From 2ccf19bf24db2f70315eec7bd977959790f7461b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 9 Feb 2010 12:41:40 +0100 Subject: [PATCH] ItEr47S04ValidacionEProbasFuncionaisItEr46S04: [Bug #272] Fixing bug. Loading the criterions at PlanningState in order to avoid duplicated instances. --- .../web/planner/order/OrderPlanningModel.java | 2 +- .../web/planner/order/PlanningState.java | 39 ++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java index 9128c3eb8..c38e589a7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java @@ -746,7 +746,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { criterionDAO.list(Criterion.class); forceLoadOfChildren(Arrays.asList(taskElement)); planningState = new PlanningState(taskElement, orderReloaded - .getAssociatedTasks(), allResources); + .getAssociatedTasks(), allResources, criterionDAO); forceLoadOfDependenciesCollections(planningState.getInitial()); forceLoadOfWorkingHours(planningState.getInitial()); forceLoadOfLabels(planningState.getInitial()); 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 915844d72..e41f2782d 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 @@ -30,7 +30,10 @@ import java.util.Set; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.entities.TaskGroup; import org.navalplanner.business.planner.entities.TaskMilestone; +import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.daos.IResourceDAO; +import org.navalplanner.business.resources.entities.Criterion; +import org.navalplanner.business.resources.entities.CriterionSatisfaction; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.web.calendars.BaseCalendarModel; @@ -45,10 +48,14 @@ public class PlanningState { private final TaskGroup rootTask; + private final ICriterionDAO criterionDAO; + public PlanningState(TaskGroup rootTask, Collection initialState, - Collection initialResources) { + Collection initialResources, + ICriterionDAO criterionDAO) { this.rootTask = rootTask; + this.criterionDAO = criterionDAO; this.initial = new ArrayList(initialState); this.toSave = new HashSet(initialState); this.toRemove = new HashSet(); @@ -67,9 +74,28 @@ public class PlanningState { for (Resource resource : resources) { resourceDAO.reattach(resource); } + // ensuring no repeated instances of criterions + reattachCriterions(getExistentCriterions(resources)); addingNewlyCreated(resourceDAO); } + private void reattachCriterions(Set criterions) { + for (Criterion each : criterions) { + criterionDAO.reattachUnmodifiedEntity(each); + } + } + + private Set getExistentCriterions(Set resources) { + Set result = new HashSet(); + for (Resource resource : resources) { + for (CriterionSatisfaction each : resource + .getCriterionSatisfactions()) { + result.add(each.getCriterion()); + } + } + return result; + } + private void addingNewlyCreated(IResourceDAO resourceDAO) { Set newResources = getNewResources(resourceDAO); doReattachments(newResources); @@ -79,6 +105,8 @@ public class PlanningState { private > T doReattachments(T result) { for (Resource each : result) { reattachCalendarFor(each); + // loading criterions so there are no repeated instances + forceLoadOfCriterions(each); } return result; } @@ -89,6 +117,15 @@ public class PlanningState { } } + private void forceLoadOfCriterions(Resource resource) { + Set criterionSatisfactions = resource + .getCriterionSatisfactions(); + for (CriterionSatisfaction each : criterionSatisfactions) { + each.getCriterion().getName(); + each.getCriterion().getType(); + } + } + private Set getNewResources(IResourceDAO resourceDAO) { Set result = new HashSet(resourceDAO .list(Resource.class));