From 34026b9b513bb5eb1a8c36c21f8239afdfbbd089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 5 Oct 2009 23:34:53 +0200 Subject: [PATCH] ItEr29S08CUCreacionProxectoPlanificacionItEr28S09: Completed filtering resource load view for an order. --- .../planner/IResourceLoadForOrderCommand.java | 4 +- .../web/planner/OrderPlanningModel.java | 2 +- .../planner/ResourceLoadForOrderCommand.java | 5 +- .../web/resourceload/IResourceLoadModel.java | 3 + .../resourceload/ResourceLoadController.java | 13 +++- .../web/resourceload/ResourceLoadModel.java | 61 ++++++++++++++++++- 6 files changed, 77 insertions(+), 11 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/IResourceLoadForOrderCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/IResourceLoadForOrderCommand.java index f3e2c8567..819b5cf5e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/IResourceLoadForOrderCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/IResourceLoadForOrderCommand.java @@ -19,7 +19,6 @@ */ package org.navalplanner.web.planner; -import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.web.common.ViewSwitcher; import org.zkoss.ganttz.extensions.ICommand; @@ -30,7 +29,6 @@ import org.zkoss.ganttz.extensions.ICommand; */ public interface IResourceLoadForOrderCommand extends ICommand{ - public void initialize(Order order, ViewSwitcher switcher, - PlanningState planningState); + public void initialize(ViewSwitcher switcher, PlanningState planningState); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java index c67e6507b..a45764fea 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java @@ -91,7 +91,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { configuration.addGlobalCommand(saveCommand); IResourceLoadForOrderCommand resourceLoadForOrderCommand = getResourceLoadForOrderCommand(); - resourceLoadForOrderCommand.initialize(order, switcher, planningState); + resourceLoadForOrderCommand.initialize(switcher, planningState); configuration.addGlobalCommand(resourceLoadForOrderCommand); IResourceAllocationCommand resourceAllocationCommand = getResourceAllocationCommand(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceLoadForOrderCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceLoadForOrderCommand.java index d32bb9530..4b6ce7589 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceLoadForOrderCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceLoadForOrderCommand.java @@ -21,7 +21,6 @@ package org.navalplanner.web.planner; import static org.navalplanner.web.I18nHelper._; -import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.web.common.ViewSwitcher; import org.navalplanner.web.resourceload.ResourceLoadController; @@ -46,14 +45,14 @@ public class ResourceLoadForOrderCommand implements private ResourceLoadController resourceLoadController; @Override - public void initialize(Order order, ViewSwitcher switcher, - PlanningState planningState) { + public void initialize(ViewSwitcher switcher, PlanningState planningState) { this.switcher = switcher; this.planningState = planningState; } @Override public void doAction(IContext context) { + resourceLoadController.filterBy(planningState); switcher.goToResourceLoad(resourceLoadController); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java index 0846feb7e..696384549 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java @@ -22,6 +22,7 @@ package org.navalplanner.web.resourceload; import java.util.List; +import org.navalplanner.web.planner.PlanningState; import org.zkoss.ganttz.data.resourceload.LoadTimelinesGroup; import org.zkoss.ganttz.util.Interval; @@ -29,6 +30,8 @@ public interface IResourceLoadModel { void initGlobalView(); + void initGlobalView(PlanningState filterBy); + List getLoadTimeLines(); Interval getViewInterval(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java index 075186c82..120f307ad 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; import org.apache.commons.lang.Validate; +import org.navalplanner.web.planner.PlanningState; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -47,6 +48,8 @@ public class ResourceLoadController extends GenericForwardComposer { private List commands = new ArrayList(); + private PlanningState filterBy; + public ResourceLoadController() { } @@ -57,7 +60,11 @@ public class ResourceLoadController extends GenericForwardComposer { @Override public void doAfterCompose(org.zkoss.zk.ui.Component comp) throws Exception { - resourceLoadModel.initGlobalView(); + if (filterBy == null) { + resourceLoadModel.initGlobalView(); + } else { + resourceLoadModel.initGlobalView(filterBy); + } ResourcesLoadPanel resourcesLoadPanel = buildResourcesLoadPanel(); comp.appendChild(resourcesLoadPanel); resourcesLoadPanel.afterCompose(); @@ -72,4 +79,8 @@ public class ResourceLoadController extends GenericForwardComposer { return new ResourcesLoadPanel(resourceLoadModel.getLoadTimeLines(), new TimeTracker(resourceLoadModel.getViewInterval())); } + + public void filterBy(PlanningState planningState) { + this.filterBy = planningState; + } } 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 7033e8731..946c3d645 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 @@ -25,6 +25,7 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Collection; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -38,9 +39,11 @@ import org.navalplanner.business.planner.entities.GenericResourceAllocation; import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.planner.entities.SpecificResourceAllocation; import org.navalplanner.business.planner.entities.Task; +import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.web.planner.PlanningState; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -64,6 +67,8 @@ public class ResourceLoadModel implements IResourceLoadModel { private List loadTimeLines; private Interval viewInterval; + private PlanningState filterBy; + @Override @Transactional(readOnly = true) public void initGlobalView() { @@ -75,6 +80,13 @@ public class ResourceLoadModel implements IResourceLoadModel { } } + @Override + @Transactional(readOnly = true) + public void initGlobalView(PlanningState filterBy) { + this.filterBy = filterBy; + initGlobalView(); + } + private Date plusFiveYears(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); @@ -84,12 +96,54 @@ public class ResourceLoadModel implements IResourceLoadModel { private List calculateLoadTimelinesGroups() { List result = new ArrayList(); - List allResources = resourcesDAO.list(Resource.class); - result.addAll(groupsFor(allResources)); - result.addAll(groupsFor(resourceAllocationDAO.findGenericAllocationsByCriterion())); + result.addAll(groupsFor(resourcesToShow())); + result.addAll(groupsFor(genericAllocationsByCriterion())); return result; } + private Map> genericAllocationsByCriterion() { + if (filter()) { + return resourceAllocationDAO + .findGenericAllocationsByCriterionFor(justTasks(filterBy + .getTasksToSave())); + } else { + return resourceAllocationDAO.findGenericAllocationsByCriterion(); + + } + } + + private List resourcesToShow() { + if (filter()) { + return resourcesForActiveTasks(); + } else { + return allResources(); + } + } + + private boolean filter() { + return filterBy != null; + } + + private List resourcesForActiveTasks() { + filterBy.reassociateResourcesWithSession(resourcesDAO); + return resourcesDAO + .findResourcesRelatedTo(justTasks(filterBy.getTasksToSave())); + } + + private List justTasks(Collection tasks) { + List result = new ArrayList(); + for (TaskElement taskElement : tasks) { + if (taskElement instanceof Task) { + result.add((Task) taskElement); + } + } + return result; + } + + private List allResources() { + return resourcesDAO.list(Resource.class); + } + private List groupsFor( Map> genericAllocationsByCriterion) { List result = new ArrayList(); @@ -237,6 +291,7 @@ public class ResourceLoadModel implements IResourceLoadModel { public Interval getViewInterval() { return viewInterval; } + } class PeriodsBuilder {