[Bug #803] Refactor LimitingResourcesPanel

* Modularize code and removed unused code in other related classes

FEA: ItEr68S04BugFixing
This commit is contained in:
Diego Pino Garcia 2011-01-17 00:53:22 +01:00
parent affada5877
commit 836c3d2da0
6 changed files with 85 additions and 156 deletions

View file

@ -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;
}

View file

@ -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 <ltilve@igalia.com>
* @author Diego Pino García <dpino@igalia.com>
*/
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<LimitingResourceQueueDependency, LimitingDependencyComponent> dependencies = new HashMap<LimitingResourceQueueDependency, LimitingDependencyComponent>();
@ -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<LimitingDependencyComponent> getLimitingDependencyComponents() {
return new ArrayList<LimitingDependencyComponent>(dependencies.values());
}
private TimeTracker getTimeTracker() {
return getTimeTrackerComponent().getTimeTracker();
}
private TimeTrackerComponent getTimeTrackerComponent() {
return panel.getTimeTrackerComponent();
}
private void redrawDependencies() {
redrawDependencyComponents(getLimitingDependencyComponents());
}
private void redrawDependencyComponents(
List<LimitingDependencyComponent> dependencyComponents) {
for (LimitingDependencyComponent dependencyComponent : dependencyComponents) {
dependencyComponent.redrawDependency();
}
}
public void clear() {
dependencies.clear();
}

View file

@ -565,7 +565,6 @@ public class LimitingResourcesController extends GenericForwardComposer {
public boolean moveTask(LimitingResourceQueueElement element) {
showManualAllocationWindow(element);
limitingResourcesPanel.reloadComponent();
return getManualAllocationWindowStatus() == Messagebox.OK;
}

View file

@ -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<LimitingResourceQueue> 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<LimitingResourceQueueElement> 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<LimitingResourceQueueElement> queueElements = queueListComponent
.getLimitingResourceElementToQueueTaskMap().keySet();
for (LimitingResourceQueueElement each : queueElements) {
dependencyList.addDependenciesFor(each);
}
return dependencyList;
}
public Map<LimitingResourceQueueElement, QueueTask> 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();

View file

@ -85,14 +85,6 @@ public class QueueComponent extends XulElement implements
private List<QueueTask> queueTasks = new ArrayList<QueueTask>();
public List<QueueTask> 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<QueueTask> getQueueTasks() {
return queueTasks;
}
public void setLimitingResourceQueue(LimitingResourceQueue limitingResourceQueue) {
this.limitingResourceQueue = limitingResourceQueue;
}
private void createChildren(LimitingResourceQueue limitingResourceQueue,
IDatesMapper mapper) {
List<QueueTask> queueTasks = createQueueTasks(mapper,
@ -509,9 +513,4 @@ public class QueueComponent extends XulElement implements
}
}
@Override
public void afterCompose() {
appendContextMenus();
}
}

View file

@ -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<QueueTask> getQueueTasks() {