From 628e065542d3acc2a0b6ec2e992ef1a4b0a63732 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 11 Oct 2011 12:56:05 +0200 Subject: [PATCH] [Bug #1187] Add filter by resources in TaskGroup filter in company Gantt view FEA: ItEr75S04BugFixing --- .../finders/TaskGroupFilterEnum.java | 2 +- .../TaskGroupsMultipleFiltersFinder.java | 42 +++++++++++++++++++ .../web/planner/TaskGroupPredicate.java | 35 +++++++++++++++- 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupFilterEnum.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupFilterEnum.java index 3a40b2d05..4f22f7a81 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupFilterEnum.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupFilterEnum.java @@ -29,7 +29,7 @@ public enum TaskGroupFilterEnum implements IFilterEnum { Criterion(_("Criterion")), Label(_("Label")), ExternalCompany(_("Customer")), State( _("State")), Code(_("Code")), CustomerReference( - _("Customer Reference")); + _("Customer Reference")), Resource(_("Resource")); /** * Forces to mark the string as needing translation */ diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupsMultipleFiltersFinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupsMultipleFiltersFinder.java index f8d67fd6f..aadd2d349 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupsMultipleFiltersFinder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TaskGroupsMultipleFiltersFinder.java @@ -33,6 +33,7 @@ import org.navalplanner.business.orders.entities.OrderStatusEnum; import org.navalplanner.business.planner.entities.TaskGroup; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.resources.entities.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -59,6 +60,7 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder { fillWithFirstTenFiltersState(); fillWihtFirstTenFiltersCodes(); fillWihtFirstTenFiltersCustomerReferences(); + fillWithFirstTenFiltersResources(); addNoneFilter(); return getListMatching(); } @@ -152,6 +154,7 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder { searchInLabelTypes(filter); searchInExternalCompanies(filter); searchInOrderStatus(filter); + searchInResources(filter); } } @@ -334,4 +337,43 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder { reference, reference)); } + private List fillWithFirstTenFiltersResources() { + Map, List> mapResources = databaseSnapshots + .snapshotMapResources(); + Iterator> iteratorClass = mapResources.keySet().iterator(); + while (iteratorClass.hasNext() && getListMatching().size() < 10) { + Class className = iteratorClass.next(); + for (int i = 0; getListMatching().size() < 10 + && i < mapResources.get(className).size(); i++) { + Resource resource = mapResources.get(className).get(i); + addResource(className, resource); + } + } + return getListMatching(); + } + + private void searchInResources(String filter) { + Map, List> mapResources = databaseSnapshots + .snapshotMapResources(); + for (Class className : mapResources.keySet()) { + for (Resource resource : mapResources.get(className)) { + String name = StringUtils.deleteWhitespace(resource.getName() + .toLowerCase()); + if (name.contains(filter)) { + addResource(className, resource); + if ((filter.length() < 3) && (getListMatching().size() > 9)) { + return; + } + } + } + } + } + + private void addResource(Class className, Resource resource) { + String pattern = resource.getName(); + getListMatching().add( + new FilterPair(TaskGroupFilterEnum.Resource, className + .getSimpleName(), pattern, resource)); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskGroupPredicate.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskGroupPredicate.java index f3d41d22b..3218472b9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskGroupPredicate.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskGroupPredicate.java @@ -29,9 +29,11 @@ import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderStatusEnum; 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.TaskElement; import org.navalplanner.business.planner.entities.TaskGroup; import org.navalplanner.business.resources.entities.Criterion; +import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.web.common.components.finders.FilterPair; import org.navalplanner.web.common.components.finders.TaskGroupFilterEnum; import org.zkoss.ganttz.IPredicate; @@ -102,6 +104,8 @@ public class TaskGroupPredicate implements IPredicate { return acceptCode(filter, taskGroup); case CustomerReference: return acceptCustomerReference(filter, taskGroup); + case Resource: + return acceptResource(filter, taskGroup); } return false; } @@ -249,4 +253,33 @@ public class TaskGroupPredicate implements IPredicate { return false; } -} + private boolean acceptResource(FilterPair filter, TaskElement taskElement) { + Resource filterResource = (Resource) filter.getValue(); + return existResourceInTaskElementResourceAllocations(filterResource, + taskElement); + } + + private boolean existResourceInTaskElementResourceAllocations( + Resource filterResource, TaskElement taskElement) { + for (ResourceAllocation each : taskElement + .getAllResourceAllocations()) { + if (acceptsResourceInResourceAllocation(filterResource, each)) { + return true; + } + } + return false; + } + + private boolean acceptsResourceInResourceAllocation( + Resource filterResource, ResourceAllocation resourceAllocation) { + if (resourceAllocation instanceof SpecificResourceAllocation) { + Resource resource = ((SpecificResourceAllocation) resourceAllocation) + .getResource(); + if (resource.getId().equals(filterResource.getId())) { + return true; + } + } + return false; + } + +} \ No newline at end of file