From b916a3a50c7754df8f189eb2aca6f1f6eda1b08d Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Wed, 15 Dec 2010 17:38:59 +0100 Subject: [PATCH] Fix bug for all elements affected by the allocation of a 'LimitingResourceQueueElement', remove all its dependency components before refreshing its queue The method assignLimitingResourceQueueElement() allocates an limiting resource queue element from the list of new queue elements to a queue. Queue elements already in a queue might be affected by this allocation (may change their position due to dependency constraints) and need to redraw. For redrawing each element, its queue is refreshing. Refreshing the queueu causes to paint the elements in a new position an create new dependency components, however the old dependecy components need to be removed before. FEA: ItEr65OTS04CorreccionsRecursosLimitantes --- .../LimitingResourcesController.java | 7 +++++-- .../LimitingResourcesPanel.java | 5 +++++ .../limitingresources/QueueListComponent.java | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java index da26e11b6..757dca248 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesController.java @@ -470,8 +470,11 @@ public class LimitingResourcesController extends GenericForwardComposer { for (LimitingResourceQueueElement each : inserted) { // FIXME visually wrong if an element jumps from a queue to // another - limitingResourcesPanel.refreshQueue(each - .getLimitingResourceQueue()); + LimitingResourceQueue queue = each.getLimitingResourceQueue(); + // Remove all dependency components associated to element + limitingResourcesPanel.removeDependencyComponentsFor(each); + // Dependencies will be created again on refreshing queue + limitingResourcesPanel.refreshQueue(queue); } } else { showErrorMessage(_("Cannot allocate selected element. There is not any queue " + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesPanel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesPanel.java index ca645a7bb..1fa94d084 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesPanel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingResourcesPanel.java @@ -429,6 +429,11 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { .getLimitingResourceQueueElement()); } + public void removeDependencyComponentsFor(LimitingResourceQueueElement element) { + QueueTask queueTask = queueListComponent.getQueueTask(element); + dependencyList.removeDependencyComponents(queueTask); + } + public void refreshQueue(LimitingResourceQueue queue) { queueListComponent.refreshQueue(queue); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueListComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueListComponent.java index bc36f6bfc..ad184bd94 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueListComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueListComponent.java @@ -142,6 +142,23 @@ public class QueueListComponent extends HtmlMacroComponent implements return result; } + /** + * Returns {@link QueueTask} associated to element + * + * @param element + * @return + */ + public QueueTask getQueueTask(LimitingResourceQueueElement element) { + QueueComponent queue = fromQueueToComponent.get(element.getLimitingResourceQueue()); + for (QueueTask each: queue.getQueueTasks()) { + LimitingResourceQueueElement target = each.getLimitingResourceQueueElement(); + if (element.getId().equals(target.getId())) { + return each; + } + } + return null; + } + public Map getLimitingResourceElementToQueueTaskMap() { Map result = new HashMap(); for (QueueTask each : getQueueTasks()) {