diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyList.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyList.java index 3a3ef6a24..8ae785306 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyList.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyList.java @@ -22,6 +22,7 @@ package org.navalplanner.web.limitingresources; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; @@ -30,24 +31,68 @@ import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueue import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; import org.navalplanner.business.resources.entities.LimitingResourceQueue; import org.zkoss.ganttz.DependencyList; +import org.zkoss.ganttz.timetracker.TimeTracker; +import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener; +import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; +import org.zkoss.ganttz.util.ComponentsFinder; +import org.zkoss.zk.ui.ext.AfterCompose; import org.zkoss.zul.impl.XulElement; /** * @author Lorenzo Tilve Álvaro * @author Diego Pino García */ -public class LimitingDependencyList extends XulElement { +public class LimitingDependencyList extends XulElement implements AfterCompose { private static final Log LOG = LogFactory.getLog(DependencyList.class); private final LimitingResourcesPanel panel; + private transient IZoomLevelChangedListener listener; + private Map dependencies = new HashMap(); public LimitingDependencyList(LimitingResourcesPanel panel) { this.panel = panel; } + @Override + public void afterCompose() { + if (listener == null) { + listener = new IZoomLevelChangedListener() { + @Override + public void zoomLevelChanged(ZoomLevel detailLevel) { + removeDependencyComponents(); + createDependencyComponents(); + } + + private void createDependencyComponents() { + for (LimitingResourceQueueDependency each: dependencies.keySet()) { + LimitingDependencyComponent dependencyComponent = createDependencyComponent(each); + if (dependencyComponent != null) { + addDependencyComponent(dependencyComponent); + } + } + } + + }; + getTimeTracker().addZoomListener(listener); + } + } + + private void removeDependencyComponents() { + List children = ComponentsFinder + .findComponentsOfType(LimitingDependencyComponent.class, + getChildren()); + for (LimitingDependencyComponent each : children) { + removeChild(each); + } + } + + private TimeTracker getTimeTracker() { + return panel.getTimeTracker(); + } + public void addDependenciesFor(LimitingResourceQueueElement queueElement) { for (LimitingResourceQueueDependency origin: queueElement.getDependenciesAsOrigin()) { addDependency(origin); @@ -126,6 +171,7 @@ public class LimitingDependencyList extends XulElement { } public void clear() { + removeDependencyComponents(); dependencies.clear(); } 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 5a6e08d74..e22f11032 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 @@ -296,6 +296,7 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { // Initialize dependencies rebuildDependencies(); + dependencyList.afterCompose(); initializePagination(); } @@ -427,6 +428,10 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { return timeTrackerComponent; } + public TimeTracker getTimeTracker() { + return timeTrackerComponent.getTimeTracker(); + } + public void unschedule(QueueTask task) { LimitingResourceQueueElement queueElement = task.getLimitingResourceQueueElement(); LimitingResourceQueue queue = queueElement.getLimitingResourceQueue();