diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningState.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningState.java index c78f575fb..7837b62ef 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningState.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningState.java @@ -32,6 +32,7 @@ import org.navalplanner.business.planner.entities.TaskGroup; import org.navalplanner.business.planner.entities.TaskMilestone; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.web.calendars.BaseCalendarModel; public class PlanningState { private final ArrayList initial; @@ -51,7 +52,7 @@ public class PlanningState { this.initial = new ArrayList(initialState); this.toSave = new HashSet(initialState); this.toRemove = new HashSet(); - this.resources = new HashSet(initialResources); + this.resources = doReattachments(new HashSet(initialResources)); } public Collection getTasksToSave() { @@ -70,7 +71,29 @@ public class PlanningState { } private void addingNewlyCreated(IResourceDAO resourceDAO) { - resources.addAll(resourceDAO.list(Resource.class)); + Set newResources = getNewResources(resourceDAO); + doReattachments(newResources); + resources.addAll(newResources); + } + + private > T doReattachments(T result) { + for (Resource each : result) { + reattachCalendarFor(each); + } + return result; + } + + private void reattachCalendarFor(Resource each) { + if (each.getCalendar() != null) { + BaseCalendarModel.forceLoadBaseCalendar(each.getCalendar()); + } + } + + private Set getNewResources(IResourceDAO resourceDAO) { + Set result = new HashSet(resourceDAO + .list(Resource.class)); + result.removeAll(resources); + return result; } public Collection getToRemove() {