From b79c40562a3629d1ec8e5d921c3570f6c32d1a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 29 Sep 2011 13:50:56 +0200 Subject: [PATCH] [Bug #1197] Fix bug When creating the PlanningState the criterions of the associated hours groups are loaded, so the same criterions in the task and in the hour groups are loaded. Some other data is loaded to avoid this kind of situation. FEA: ItEr75S04BugFixing --- .../entities/CriterionRequirement.java | 12 ++++++- .../entities/DirectCriterionRequirement.java | 12 ++++++- .../IndirectCriterionRequirement.java | 4 +++ .../planner/order/PlanningStateCreator.java | 33 +++++++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/CriterionRequirement.java b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/CriterionRequirement.java index 52d59a994..4b5cc2902 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/CriterionRequirement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/CriterionRequirement.java @@ -31,7 +31,7 @@ import org.navalplanner.business.templates.entities.OrderElementTemplate; * * @author Susana Montes Pedreira */ -public class CriterionRequirement extends BaseEntity{ +public abstract class CriterionRequirement extends BaseEntity { private Criterion criterion; @@ -101,4 +101,14 @@ public class CriterionRequirement extends BaseEntity{ public void setOrderElementTemplate(OrderElementTemplate orderElementTemplate) { this.orderElementTemplate = orderElementTemplate; } + + public void ensureDataLoaded() { + if (criterion != null) { + criterion.getName(); + } + ensureSpecificDataLoaded(); + } + + protected abstract void ensureSpecificDataLoaded(); + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/DirectCriterionRequirement.java b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/DirectCriterionRequirement.java index 40571f0f7..b75a883d7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/DirectCriterionRequirement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/DirectCriterionRequirement.java @@ -35,7 +35,7 @@ import org.navalplanner.business.templates.entities.OrderElementTemplate; * @author Susana Montes Pedreira * @author Diego Pino Garcia */ -public class DirectCriterionRequirement extends CriterionRequirement{ +public class DirectCriterionRequirement extends CriterionRequirement { private DirectCriterionRequirement origin; @@ -138,4 +138,14 @@ public class DirectCriterionRequirement extends CriterionRequirement{ this.origin = origin; } + @Override + protected void ensureSpecificDataLoaded() { + if (origin != null) { + origin.ensureDataLoaded(); + } + for (IndirectCriterionRequirement each : children) { + each.ensureDataLoaded(); + } + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/IndirectCriterionRequirement.java b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/IndirectCriterionRequirement.java index df8145236..7e46bba2d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/IndirectCriterionRequirement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/requirements/entities/IndirectCriterionRequirement.java @@ -92,4 +92,8 @@ public class IndirectCriterionRequirement extends CriterionRequirement{ public void setValid(Boolean valid) { this.valid = BooleanUtils.toBoolean(valid); } + + @Override + protected void ensureSpecificDataLoaded() { + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java index bc9af49db..2f563d8bb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/PlanningStateCreator.java @@ -31,12 +31,15 @@ import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.Validate; import org.hibernate.Hibernate; import org.joda.time.LocalDate; +import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; +import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.daos.IEntitySequenceDAO; import org.navalplanner.business.common.entities.EntityNameEnum; import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.orders.daos.IOrderDAO; +import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.TaskSource; @@ -57,6 +60,8 @@ import org.navalplanner.business.planner.entities.Task; 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.planner.entities.consolidations.CalculatedConsolidation; +import org.navalplanner.business.requirements.entities.CriterionRequirement; import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.Criterion; @@ -240,6 +245,7 @@ public class PlanningStateCreator { Scenario currentScenario = scenarioManager.getCurrent(); final List allResources = resourceDAO.list(Resource.class); criterionDAO.list(Criterion.class); + forceLoadOfOrderAssociatedData(orderReloaded); TaskGroup rootTask = orderReloaded.getAssociatedTaskElement(); if (rootTask != null) { forceLoadOf(rootTask); @@ -260,6 +266,33 @@ public class PlanningStateCreator { return result; } + private void forceLoadOfOrderAssociatedData(Order order) { + List all = new ArrayList(); + all.add(order); + all.addAll(order.getAllChildren()); + for (OrderElement each : all) { + for (DirectAdvanceAssignment direct : each.getDirectAdvanceAssignments()) { + direct.getAdvanceMeasurements().size(); + direct.getAdvanceType().getHumanId(); + } + for (IndirectAdvanceAssignment indirect : each + .getIndirectAdvanceAssignments()) { + Set consolidation = indirect + .getCalculatedConsolidation(); + for (CalculatedConsolidation c : consolidation) { + c.getCalculatedConsolidatedValues().size(); + } + } + for (HoursGroup hours : each.getHoursGroups()) { + for (CriterionRequirement requirement : hours + .getCriterionRequirements()) { + requirement.ensureDataLoaded(); + } + hours.getValidCriterions().size(); + } + } + } + private void forceLoadDayAssignments(Set resources) { for (Resource resource : resources) { resource.getAssignments().size();