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();