diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueuesState.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueuesState.java index 3618b01af..7ad9ad282 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueuesState.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueuesState.java @@ -28,11 +28,14 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang.Validate; +import org.jgrapht.DirectedGraph; +import org.jgrapht.graph.SimpleDirectedGraph; import org.navalplanner.business.common.BaseEntity; 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.limiting.entities.GapRequirements; +import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueDependency; import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; import org.navalplanner.business.planner.limiting.entities.Gap.GapOnQueue; import org.navalplanner.business.resources.entities.Criterion; @@ -50,6 +53,8 @@ public class QueuesState { private final List unassignedElements; + private final DirectedGraph graph; + private final Map queuesById; private final Map elementsById; @@ -85,6 +90,47 @@ public class QueuesState { this.elementsById = byId(allElements(limitingResourceQueues, unassignedLimitingResourceQueueElements)); this.queuesByResourceId = byResourceId(limitingResourceQueues); + this.graph = buildGraph(getAllElements(unassignedElements, queues)); + } + + private static DirectedGraph buildGraph( + List allElements) { + DirectedGraph result = instantiateDirectedGraph(); + for (LimitingResourceQueueElement each : allElements) { + result.addVertex(each); + } + for (LimitingResourceQueueElement each : allElements) { + Set dependenciesAsOrigin = each + .getDependenciesAsOrigin(); + for (LimitingResourceQueueDependency eachDependency : dependenciesAsOrigin) { + addDependency(result, eachDependency); + } + } + return result; + } + + private static SimpleDirectedGraph instantiateDirectedGraph() { + return new SimpleDirectedGraph( + LimitingResourceQueueDependency.class); + } + + private static void addDependency( + DirectedGraph result, + LimitingResourceQueueDependency dependency) { + LimitingResourceQueueElement origin = dependency.getHasAsOrigin(); + LimitingResourceQueueElement destination = dependency.getHasAsDestiny(); + result.addEdge(origin, destination, dependency); + } + + private static List getAllElements( + List unassigned, + List queues) { + List result = new ArrayList(); + result.addAll(unassigned); + for (LimitingResourceQueue each : queues) { + result.addAll(each.getLimitingResourceQueueElements()); + } + return result; } private List allElements(