From 7c5362f49eefd72f8a6a0456e178593a8e11fc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 8 Mar 2010 18:51:50 +0100 Subject: [PATCH] ItEr50S04ValidacionEProbasFuncionaisItEr49S04: Calculating the sum of the specific allocations at interval using the resources assignments relationship instead of doing query. --- .../web/resourceload/LoadPeriodGenerator.java | 56 ++++++++++++------- .../web/resourceload/ResourceLoadModel.java | 4 +- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java index 324d86b7e..cee3687c8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java @@ -25,15 +25,17 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.LocalDate; -import org.navalplanner.business.planner.daos.IResourceAllocationDAO; +import org.navalplanner.business.planner.entities.DayAssignment; import org.navalplanner.business.planner.entities.GenericDayAssignment; import org.navalplanner.business.planner.entities.GenericResourceAllocation; import org.navalplanner.business.planner.entities.ResourceAllocation; @@ -91,14 +93,12 @@ abstract class LoadPeriodGenerator { } public static LoadPeriodGeneratorFactory onCriterion( - final IResourceAllocationDAO resourceAllocationDAO, final Criterion criterion) { return new LoadPeriodGeneratorFactory() { @Override public LoadPeriodGenerator create(ResourceAllocation allocation) { - return new LoadPeriodGeneratorOnCriterion( - resourceAllocationDAO, criterion, allocation); + return new LoadPeriodGeneratorOnCriterion(criterion, allocation); } }; } @@ -284,32 +284,26 @@ class LoadPeriodGeneratorOnCriterion extends LoadPeriodGenerator { private final Criterion criterion; - private IResourceAllocationDAO resourceAllocationDAO; - - public LoadPeriodGeneratorOnCriterion( - IResourceAllocationDAO resourceAllocationDAO, Criterion criterion, + public LoadPeriodGeneratorOnCriterion(Criterion criterion, ResourceAllocation allocation) { - this(resourceAllocationDAO, criterion, allocation.getStartDate(), - allocation.getEndDate(), - Arrays - .> asList(allocation)); + this(criterion, allocation.getStartDate(), allocation.getEndDate(), + Arrays.> asList(allocation)); } - public LoadPeriodGeneratorOnCriterion( - IResourceAllocationDAO resourceAllocationDAO, Criterion criterion, + public LoadPeriodGeneratorOnCriterion(Criterion criterion, LocalDate startDate, LocalDate endDate, List> allocations) { super(startDate, endDate, allocations); - this.resourceAllocationDAO = resourceAllocationDAO; this.criterion = criterion; } @Override protected LoadPeriodGenerator create(LocalDate start, LocalDate end, List> allocationsOnInterval) { - return new LoadPeriodGeneratorOnCriterion(resourceAllocationDAO, - criterion, start, end, - allocationsOnInterval); + LoadPeriodGeneratorOnCriterion result = new LoadPeriodGeneratorOnCriterion( + criterion, start, end, allocationsOnInterval); + result.specificByResourceCached = specificByResourceCached; + return result; } private Set getResourcesMatchedByCriterionFromAllocations() { @@ -349,12 +343,32 @@ class LoadPeriodGeneratorOnCriterion extends LoadPeriodGenerator { } private int calculateSumOfSpecific() { - List specific = resourceAllocationDAO - .getSpecificAssignmentsBetween( - getResourcesMatchedByCriterionFromAllocations(), start, end); + Set resources = getResourcesMatchedByCriterionFromAllocations(); + List specific = new ArrayList(); + for (Resource each : resources) { + specific.addAll(specificAssignmentsAtInterval(each)); + } return sum(specific); } + private List specificAssignmentsAtInterval( + Resource each) { + return DayAssignment.getAtInterval( + getSpecificOrderedAssignmentsFor(each), start, end); + } + + private Map> specificByResourceCached = new HashMap>(); + + private List getSpecificOrderedAssignmentsFor( + Resource resource) { + if (!specificByResourceCached.containsKey(resource)) { + specificByResourceCached.put(resource, DayAssignment + .specific(DayAssignment.orderedByDay(resource + .getAssignments()))); + } + return specificByResourceCached.get(resource); + } + private int sum(List specific) { int result = 0; for (SpecificDayAssignment s : specific) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java index 63fbcb774..e246a78bb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java @@ -182,8 +182,8 @@ public class ResourceLoadModel implements IResourceLoadModel { private List createPeriods(Criterion criterion, List value) { - return PeriodsBuilder.build(LoadPeriodGenerator.onCriterion( - resourceAllocationDAO, criterion), value); + return PeriodsBuilder.build(LoadPeriodGenerator.onCriterion(criterion), + value); } private List groupsFor(List allResources) {