From 9909aef73802f544204a7c5add65d6cb37416246 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 28 Jul 2009 12:08:13 +0200 Subject: [PATCH] ItEr19S11CUAsignacionRecursosEspecificosAPlanificacionItEr18S14: Checking if the same Worker is not assigned more than one time to the same Task. --- .../business/planner/entities/Task.java | 28 +++++++++++++++++++ .../planner/ResourceAllocationController.java | 6 ++++ .../navalplanner/web/planner/SaveCommand.java | 8 ++++++ 3 files changed, 42 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java index b73f60826..011d4bd24 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java @@ -8,6 +8,7 @@ import java.util.Set; import org.apache.commons.lang.Validate; import org.hibernate.validator.NotNull; import org.navalplanner.business.orders.entities.HoursGroup; +import org.navalplanner.business.resources.entities.Worker; /** * @author Óscar González Fernández @@ -65,4 +66,31 @@ public class Task extends TaskElement { resourceAllocations.remove(resourceAllocation); } + /** + * Checks if there isn't any {@link Worker} repeated in the {@link Set} of + * {@link ResourceAllocation} of this {@link Task}. + * + * @return true if the {@link Task} is valid, that means there + * isn't any {@link Worker} repeated. + */ + public boolean isValidResourceAllocationWorkers() { + Set workers = new HashSet(); + + for (ResourceAllocation resourceAllocation : resourceAllocations) { + if (resourceAllocation instanceof SpecificResourceAllocation) { + Worker worker = ((SpecificResourceAllocation) resourceAllocation) + .getWorker(); + if (worker != null) { + if (workers.contains(worker.getId())) { + return false; + } else { + workers.add(worker.getId()); + } + } + } + } + + return true; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceAllocationController.java index db047bea7..a8e3235da 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ResourceAllocationController.java @@ -101,6 +101,12 @@ public class ResourceAllocationController extends GenericForwardComposer { } } + if (!resourceAllocationModel.getTask() + .isValidResourceAllocationWorkers()) { + throw new WrongValueException(window.getFellow("resourcesList"), + "There is some Worker assigned twice (or more)"); + } + Clients.closeErrorBox(window.getFellow("resourcesList")); window.setVisible(false); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java index c242c68a9..c0ad3a1ba 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java @@ -2,6 +2,7 @@ package org.navalplanner.web.planner; import java.util.List; +import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.services.ITaskElementService; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +37,13 @@ public class SaveCommand implements ISaveCommand { public void doAction(IContext context) { for (TaskElement taskElement : taskElements) { taskElementService.save(taskElement); + if (taskElement instanceof Task) { + if (!((Task) taskElement).isValidResourceAllocationWorkers()) { + throw new RuntimeException("The Task '" + + taskElement.getName() + + "' has some repeated Worker assigned"); + } + } } // TODO redirect to another page or show message }