diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java index 1715adce9..381b106d5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java @@ -28,6 +28,8 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -53,6 +55,8 @@ import org.zkoss.zul.Messagebox; */ public class SaveCommand implements ISaveCommand { + private static final Log LOG = LogFactory.getLog(SaveCommand.class); + @Autowired private ITaskElementDAO taskElementDAO; @@ -121,33 +125,49 @@ public class SaveCommand implements ISaveCommand { private void updateRootTaskPosition() { TaskGroup rootTask = state.getRootTask(); final Date min = minDate(state.getTasksToSave()); - rootTask.setStartDate(min); + if (min != null) { + rootTask.setStartDate(min); + } final Date max = maxDate(state.getTasksToSave()); - rootTask.setEndDate(max); + if (max != null) { + rootTask.setEndDate(max); + } taskElementDAO.save(rootTask); } private Date maxDate(Collection tasksToSave) { - return Collections.max(toEndDates(tasksToSave)); + List endDates = toEndDates(tasksToSave); + return endDates.isEmpty() ? null : Collections.max(endDates); } private List toEndDates(Collection tasksToSave) { List result = new ArrayList(); for (TaskElement taskElement : tasksToSave) { - result.add(taskElement.getEndDate()); + Date endDate = taskElement.getEndDate(); + if (endDate != null) { + result.add(endDate); + } else { + LOG.warn("the task" + taskElement + " has null end date"); + } } return result; } private Date minDate(Collection tasksToSave) { - return Collections.min(toStartDates(tasksToSave)); + List startDates = toStartDates(tasksToSave); + return startDates.isEmpty() ? null : Collections.min(startDates); } private List toStartDates( Collection tasksToSave) { List result = new ArrayList(); for (TaskElement taskElement : tasksToSave) { - result.add(taskElement.getStartDate()); + Date startDate = taskElement.getStartDate(); + if (startDate != null) { + result.add(startDate); + } else { + LOG.warn("the task" + taskElement + " has null start date"); + } } return result; }