From 836c3d2da0ebc991e9bfe4a9de31a97002394074 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Mon, 17 Jan 2011 00:53:22 +0100 Subject: [PATCH] [Bug #803] Refactor LimitingResourcesPanel * Modularize code and removed unused code in other related classes FEA: ItEr68S04BugFixing --- .../LimitingDependencyComponent.java | 9 -- .../LimitingDependencyList.java | 52 +----- .../LimitingResourcesController.java | 1 - .../LimitingResourcesPanel.java | 148 +++++++++--------- .../web/limitingresources/QueueComponent.java | 27 ++-- .../limitingresources/QueueListComponent.java | 4 +- 6 files changed, 85 insertions(+), 156 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyComponent.java index 0866286f5..f1e0f32e1 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/LimitingDependencyComponent.java @@ -21,7 +21,6 @@ package org.navalplanner.web.limitingresources; import org.apache.commons.lang.Validate; -import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueDependency; import org.zkoss.ganttz.data.DependencyType; import org.zkoss.zk.au.out.AuInvoke; import org.zkoss.zul.impl.XulElement; @@ -79,14 +78,6 @@ public class LimitingDependencyComponent extends XulElement { this.destination = findTaskComponent(idTaskEnd); } - public void zoomChanged() { - redrawDependency(); - } - - public void redrawDependency() { - response("zoomChanged", new AuInvoke(this, "draw")); - } - public QueueTask getSource() { return source; } 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 2814d03a1..d75862a84 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 @@ -20,9 +20,7 @@ package org.navalplanner.web.limitingresources; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; @@ -31,23 +29,16 @@ 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.TimeTrackerComponent; -import org.zkoss.ganttz.timetracker.zoom.IZoomLevelChangedListener; -import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; -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 implements AfterCompose { +public class LimitingDependencyList extends XulElement { private static final Log LOG = LogFactory.getLog(DependencyList.class); - private transient IZoomLevelChangedListener listener; - private final LimitingResourcesPanel panel; private Map dependencies = new HashMap(); @@ -105,7 +96,6 @@ public class LimitingDependencyList extends XulElement implements AfterCompose { private void addDependencyComponent( LimitingDependencyComponent dependencyComponent) { - dependencyComponent.redrawDependency(); dependencyComponent.setParent(this); } @@ -134,46 +124,6 @@ public class LimitingDependencyList extends XulElement implements AfterCompose { } } - @Override - public void afterCompose() { - if (listener == null) { - listener = new IZoomLevelChangedListener() { - @Override - public void zoomLevelChanged(ZoomLevel detailLevel) { - for (LimitingDependencyComponent dependencyComponent : getLimitingDependencyComponents()) { - dependencyComponent.zoomChanged(); - } - } - }; - getTimeTracker().addZoomListener(listener); - } - redrawDependencies(); - } - - @SuppressWarnings("unchecked") - private List getLimitingDependencyComponents() { - return new ArrayList(dependencies.values()); - } - - private TimeTracker getTimeTracker() { - return getTimeTrackerComponent().getTimeTracker(); - } - - private TimeTrackerComponent getTimeTrackerComponent() { - return panel.getTimeTrackerComponent(); - } - - private void redrawDependencies() { - redrawDependencyComponents(getLimitingDependencyComponents()); - } - - private void redrawDependencyComponents( - List dependencyComponents) { - for (LimitingDependencyComponent dependencyComponent : dependencyComponents) { - dependencyComponent.redrawDependency(); - } - } - public void clear() { dependencies.clear(); } 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 14433f8a3..a645fda82 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 @@ -565,7 +565,6 @@ public class LimitingResourcesController extends GenericForwardComposer { public boolean moveTask(LimitingResourceQueueElement element) { showManualAllocationWindow(element); - limitingResourcesPanel.reloadComponent(); return getManualAllocationWindowStatus() == Messagebox.OK; } 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 8133203dd..390ce0b6f 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 @@ -32,9 +32,8 @@ import org.joda.time.Period; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; -import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.LimitingResourceQueue; -import org.springframework.beans.factory.annotation.Autowired; +import org.zkoss.ganttz.DependencyList; import org.zkoss.ganttz.timetracker.TimeTracker; import org.zkoss.ganttz.timetracker.TimeTracker.IDetailItemFilter; import org.zkoss.ganttz.timetracker.TimeTrackerComponent; @@ -69,16 +68,18 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { private LimitingResourcesController limitingResourcesController; + private TimeTracker timeTracker; + private TimeTrackerComponent timeTrackerComponent; + private TimeTrackerComponent timeTrackerHeader; + private LimitingResourcesLeftPane leftPane; private QueueListComponent queueListComponent; private MutableTreeModel treeModel; - private TimeTracker timeTracker; - private Listbox listZoomLevels; private Button paginationDownButton; @@ -87,6 +88,11 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { private Listbox horizontalPagination; + private LimitingDependencyList dependencyList = new LimitingDependencyList( + this); + + private PaginatorFilter paginatorFilter; + private Component insertionPointLeftPanel; private Component insertionPointRightPanel; private Component insertionPointTimetracker; @@ -103,18 +109,6 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { goToSelectedHorizontalPage(); } - @Autowired - IResourceDAO resourcesDAO; - - private LimitingDependencyList dependencyList = new LimitingDependencyList( - this); - - private PaginatorFilter paginatorFilter; - - private TimeTrackerComponent timeTrackerHeader; - - private IZoomLevelChangedListener zoomChangedListener; - /** * Returns the closest upper {@link LimitingResourcesPanel} instance going * all the way up from comp @@ -148,7 +142,6 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { treeModel = createModelForTree(); - timeTrackerComponent = timeTrackerForLimitingResourcesPanel(timeTracker); queueListComponent = new QueueListComponent(this, timeTracker, treeModel); @@ -235,50 +228,52 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { return toolbar; } - private TimeTrackerComponent timeTrackerForLimitingResourcesPanel( - TimeTracker timeTracker) { - return new TimeTrackerComponent(timeTracker) { - @Override - protected void scrollHorizontalPercentage(int pixelsDisplacement) { - response("", new AuInvoke(queueListComponent, - "adjustScrollHorizontalPosition", pixelsDisplacement - + "")); - } - }; - } - @Override public void afterCompose() { super.afterCompose(); - paginatorFilter = new PaginatorFilter(); initializeBindings(); + initializeTimetracker(); listZoomLevels .setSelectedIndex(timeTracker.getDetailLevel().ordinal() - 2); - // Pagination stuff - paginationUpButton.setDisabled(paginatorFilter.isLastPage()); - - paginatorFilter.setInterval(timeTracker.getRealInterval()); - timeTracker.setFilter(paginatorFilter); - // Insert leftPane component with limitingresources list insertionPointLeftPanel.appendChild(leftPane); leftPane.afterCompose(); - insertionPointRightPanel.appendChild(timeTrackerComponent); + // Initialize queues insertionPointRightPanel.appendChild(queueListComponent); queueListComponent.afterCompose(); - dependencyList = generateDependencyComponentsList(); - if (dependencyList != null) { - dependencyList.afterCompose(); - insertionPointRightPanel.appendChild(dependencyList); - } + // Initialize dependencies + rebuildDependencies(); - zoomChangedListener = new IZoomLevelChangedListener() { + initializePagination(); + } + + /** + * Apparently it's necessary to append {@link DependencyList} to + * insertionPointRightPanel again every time the list of dependencies is + * regenerated. Otherwise tasks overflow if they don't fit in current page + * + */ + private void rebuildDependencies() { + dependencyList.clear(); + for (LimitingResourceQueueElement each : getLimitingResourceQueueElements()) { + dependencyList.addDependenciesFor(each); + } + insertionPointRightPanel.appendChild(dependencyList); + } + + private Set getLimitingResourceQueueElements() { + return queueListComponent.getLimitingResourceElementToQueueTaskMap() + .keySet(); + } + + private void initializeTimetracker() { + timeTracker.addZoomListener(new IZoomLevelChangedListener() { @Override public void zoomLevelChanged(ZoomLevel newDetailLevel) { reloadTimetracker(); @@ -293,23 +288,44 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { paginatorFilter.goToHorizontalPage(0); } - }; - this.timeTracker.addZoomListener(zoomChangedListener); - - // Insert timetracker headers + }); timeTrackerHeader = createTimeTrackerHeader(); + timeTrackerComponent = createTimeTrackerComponent(); insertionPointTimetracker.appendChild(timeTrackerHeader); + insertionPointRightPanel.appendChild(timeTrackerComponent); timeTrackerHeader.afterCompose(); timeTrackerComponent.afterCompose(); - - paginatorFilter.populateHorizontalListbox(); } - private void rebuildDependencies() { - dependencyList.clear(); - insertionPointRightPanel.appendChild(dependencyList); - dependencyList = generateDependencyComponentsList(); - dependencyList.afterCompose(); + @SuppressWarnings("serial") + private TimeTrackerComponent createTimeTrackerHeader() { + return new TimeTrackerComponent(timeTracker) { + + @Override + protected void scrollHorizontalPercentage(int pixelsDisplacement) { + + } + }; + } + + @SuppressWarnings("serial") + private TimeTrackerComponent createTimeTrackerComponent() { + return new TimeTrackerComponent(timeTracker) { + @Override + protected void scrollHorizontalPercentage(int pixelsDisplacement) { + response("", new AuInvoke(queueListComponent, + "adjustScrollHorizontalPosition", pixelsDisplacement + + "")); + } + }; + } + + private void initializePagination() { + paginatorFilter = new PaginatorFilter(); + paginationUpButton.setDisabled(paginatorFilter.isLastPage()); + paginatorFilter.setInterval(timeTracker.getRealInterval()); + timeTracker.setFilter(paginatorFilter); + paginatorFilter.populateHorizontalListbox(); } private void initializeBindings() { @@ -325,16 +341,6 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { insertionPointTimetracker = getFellow("insertionPointTimetracker"); } - private LimitingDependencyList generateDependencyComponentsList() { - Set queueElements = queueListComponent - .getLimitingResourceElementToQueueTaskMap().keySet(); - - for (LimitingResourceQueueElement each : queueElements) { - dependencyList.addDependenciesFor(each); - } - return dependencyList; - } - public Map getQueueTaskMap() { return queueListComponent.getLimitingResourceElementToQueueTaskMap(); } @@ -345,20 +351,6 @@ public class LimitingResourcesPanel extends HtmlMacroComponent { getFellow("insertionPointTimetracker").getChildren().clear(); } - public TimeTrackerComponent getTimeTrackerComponent() { - return timeTrackerComponent; - } - - private TimeTrackerComponent createTimeTrackerHeader() { - return new TimeTrackerComponent(timeTracker) { - - @Override - protected void scrollHorizontalPercentage(int pixelsDisplacement) { - - } - }; - } - public void unschedule(QueueTask task) { LimitingResourceQueueElement queueElement = task.getLimitingResourceQueueElement(); LimitingResourceQueue queue = queueElement.getLimitingResourceQueue(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java index 76737f6c1..e89c64b22 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java @@ -85,14 +85,6 @@ public class QueueComponent extends XulElement implements private List queueTasks = new ArrayList(); - public List getQueueTasks() { - return queueTasks; - } - - public void setLimitingResourceQueue(LimitingResourceQueue limitingResourceQueue) { - this.limitingResourceQueue = limitingResourceQueue; - } - private QueueComponent( final QueueListComponent queueListComponent, final TimeTracker timeTracker, @@ -109,12 +101,24 @@ public class QueueComponent extends XulElement implements public void zoomLevelChanged(ZoomLevel detailLevel) { getChildren().clear(); createChildren(limitingResourceQueue, timeTracker.getMapper()); - // invalidate(); } }; this.timeTracker.addZoomListener(zoomChangedListener); } + @Override + public void afterCompose() { + appendContextMenus(); + } + + public List getQueueTasks() { + return queueTasks; + } + + public void setLimitingResourceQueue(LimitingResourceQueue limitingResourceQueue) { + this.limitingResourceQueue = limitingResourceQueue; + } + private void createChildren(LimitingResourceQueue limitingResourceQueue, IDatesMapper mapper) { List queueTasks = createQueueTasks(mapper, @@ -509,9 +513,4 @@ public class QueueComponent extends XulElement implements } } - @Override - public void afterCompose() { - appendContextMenus(); - } - } 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 ed810bad2..26667b01e 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 @@ -76,7 +76,7 @@ public class QueueListComponent extends HtmlMacroComponent implements private void insertAsComponent(LimitingResourceQueue queue) { QueueComponent component = QueueComponent.create(this, timeTracker, queue); - this.appendChild(component); + appendChild(component); fromQueueToComponent.put(queue, component); } @@ -130,8 +130,6 @@ public class QueueListComponent extends HtmlMacroComponent implements for (QueueComponent each : fromQueueToComponent.values()) { each.afterCompose(); } - response(null, new AuInvoke(QueueListComponent.this, - "adjustResourceLoadRows")); } public List getQueueTasks() {