diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/IFilterChangedListener.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/IFilterChangedListener.java
new file mode 100644
index 000000000..f607aa3ac
--- /dev/null
+++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/IFilterChangedListener.java
@@ -0,0 +1,27 @@
+/*
+ * This file is part of NavalPlan
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.zkoss.ganttz.resourceload;
+
+public interface IFilterChangedListener {
+
+ public void filterChanged(boolean filter);
+
+}
diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java
index ee5f55529..a6239f493 100644
--- a/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java
+++ b/ganttzk/src/main/java/org/zkoss/ganttz/resourceload/ResourcesLoadPanel.java
@@ -20,6 +20,8 @@
package org.zkoss.ganttz.resourceload;
+import static org.zkoss.ganttz.i18n.I18nHelper._;
+
import java.util.List;
import org.apache.commons.lang.StringUtils;
@@ -30,6 +32,8 @@ import org.zkoss.ganttz.timetracker.zoom.ZoomLevel;
import org.zkoss.ganttz.util.ComponentsFinder;
import org.zkoss.ganttz.util.MutableTreeModel;
import org.zkoss.ganttz.util.OnZKDesktopRegistry;
+import org.zkoss.ganttz.util.WeakReferencedListeners;
+import org.zkoss.ganttz.util.WeakReferencedListeners.IListenerNotification;
import org.zkoss.ganttz.util.script.IScriptsRegister;
import org.zkoss.zk.au.out.AuInvoke;
import org.zkoss.zk.ui.Component;
@@ -42,7 +46,6 @@ import org.zkoss.zul.ListModel;
import org.zkoss.zul.Separator;
import org.zkoss.zul.SimpleListModel;
import org.zkoss.zul.api.Listbox;
-
public class ResourcesLoadPanel extends HtmlMacroComponent {
public interface IToolbarCommand {
@@ -59,16 +62,28 @@ public class ResourcesLoadPanel extends HtmlMacroComponent {
private ResourceLoadList resourceLoadList;
- private final List groups;
+ private List groups;
private MutableTreeModel treeModel;
- private final TimeTracker timeTracker;
+ private TimeTracker timeTracker;
+
+ private WeakReferencedListeners zoomListeners = WeakReferencedListeners
+ .create();
private Listbox listZoomLevels;
+ private static final String filterResources = _("Filter by resources");
+ private static final String filterCriterions = _("Filter by criterions");
+ private boolean filterbyResources = true;
+
public ResourcesLoadPanel(List groups,
TimeTracker timeTracker) {
+ init(groups, timeTracker);
+
+ }
+
+ public void init(List groups, TimeTracker timeTracker) {
this.groups = groups;
this.timeTracker = timeTracker;
treeModel = createModelForTree();
@@ -78,6 +93,37 @@ public class ResourcesLoadPanel extends HtmlMacroComponent {
registerNeededScripts();
}
+ public ListModel getFilters() {
+ String[] filters = new String[] { filterResources, filterCriterions };
+ return new SimpleListModel(filters);
+ }
+
+ public void setFilter(String filterby) {
+ if (filterby.equals(filterResources)) {
+ this.filterbyResources = true;
+ } else {
+ this.filterbyResources = false;
+ }
+ }
+
+ public boolean getFilter() {
+ return filterbyResources;
+ }
+
+ public void onApplyFilter() {
+ zoomListeners
+ .fireEvent(new IListenerNotification() {
+ @Override
+ public void doNotify(IFilterChangedListener listener) {
+ listener.filterChanged(getFilter());
+ }
+ });
+ }
+
+ public void addFilterListener(IFilterChangedListener listener) {
+ zoomListeners.addListener(listener);
+ }
+
public ListModel getZoomLevels() {
return new SimpleListModel(ZoomLevel.values());
}
@@ -192,6 +238,12 @@ public class ResourcesLoadPanel extends HtmlMacroComponent {
listZoomLevels.setSelectedIndex(timeTracker.getDetailLevel().ordinal());
}
+ public void clearComponents() {
+ getFellow("insertionPointLeftPanel").getChildren().clear();
+ getFellow("insertionPointRightPanel").getChildren().clear();
+ getFellow("insertionPointTimetracker").getChildren().clear();
+ }
+
private TimeTrackerComponent createTimeTrackerHeader() {
return new TimeTrackerComponent(
timeTracker) {
diff --git a/ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul b/ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul
index c07002122..5b0a7f20e 100644
--- a/ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul
+++ b/ganttzk/src/main/resources/web/ganttz/zul/resourcesLoadLayout.zul
@@ -38,22 +38,14 @@ resourcesLoadPanel = self;
onSelect="resourcesLoadPanel.setZoomLevel(self.selectedItem.value);" >
- From: to:
-
Filter:
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java
index d2f4a554c..765ff0c73 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/IResourceLoadModel.java
@@ -29,9 +29,9 @@ import org.zkoss.ganttz.util.Interval;
public interface IResourceLoadModel {
- void initGlobalView();
+ void initGlobalView(boolean filterByResources);
- void initGlobalView(Order filterBy);
+ void initGlobalView(Order filterBy, boolean filterByResources);
List getLoadTimeLines();
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java
index fb88ef6f4..8193fc762 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadController.java
@@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
+import org.zkoss.ganttz.resourceload.IFilterChangedListener;
import org.zkoss.ganttz.resourceload.ResourcesLoadPanel;
import org.zkoss.ganttz.resourceload.ResourcesLoadPanel.IToolbarCommand;
import org.zkoss.ganttz.timetracker.TimeTracker;
@@ -57,6 +58,12 @@ public class ResourceLoadController implements Composer {
private org.zkoss.zk.ui.Component parent;
+ private ResourcesLoadPanel resourcesLoadPanel;
+
+ private TimeTracker timeTracker;
+
+ private transient IFilterChangedListener filterChangedListener;
+
public ResourceLoadController() {
}
@@ -72,14 +79,22 @@ public class ResourceLoadController implements Composer {
}
public void reload() {
+ // by default show the task by resources
+ boolean filterByResources = true;
+ reload(filterByResources);
+ }
+
+ private void reload(boolean filterByResources) {
try {
if (filterBy == null) {
- resourceLoadModel.initGlobalView();
+ resourceLoadModel.initGlobalView(filterByResources);
} else {
- resourceLoadModel.initGlobalView(filterBy);
+ resourceLoadModel.initGlobalView(filterBy, filterByResources);
}
+ timeTracker = buildTimeTracker();
+ resourcesLoadPanel = buildResourcesLoadPanel();
+ addListeners();
- ResourcesLoadPanel resourcesLoadPanel = buildResourcesLoadPanel();
this.parent.getChildren().clear();
this.parent.appendChild(resourcesLoadPanel);
resourcesLoadPanel.afterCompose();
@@ -96,16 +111,36 @@ public class ResourceLoadController implements Composer {
}
}
+ private void addListeners() {
+ filterChangedListener = new IFilterChangedListener() {
+
+ @Override
+ public void filterChanged(boolean filter) {
+ onApplyFilter(filter);
+ }
+ };
+ this.resourcesLoadPanel.addFilterListener(filterChangedListener);
+ }
+
+ public void onApplyFilter(boolean filterByResources) {
+ resourcesLoadPanel.clearComponents();
+ reload(filterByResources);
+ }
+
private void addCommands(ResourcesLoadPanel resourcesLoadPanel) {
resourcesLoadPanel.add(commands.toArray(new IToolbarCommand[0]));
}
+ private TimeTracker buildTimeTracker() {
+ return timeTracker = new TimeTracker(resourceLoadModel
+ .getViewInterval(), resourceLoadModel
+ .calculateInitialZoomLevel(), SeveralModificators.create(),
+ SeveralModificators.create(new BankHolidaysMarker()), parent);
+ }
+
private ResourcesLoadPanel buildResourcesLoadPanel() {
return new ResourcesLoadPanel(resourceLoadModel.getLoadTimeLines(),
- new TimeTracker(resourceLoadModel.getViewInterval(),
- resourceLoadModel.calculateInitialZoomLevel(),
- SeveralModificators.create(), SeveralModificators
- .create(new BankHolidaysMarker()), parent));
+ timeTracker);
}
public void filterBy(Order order) {
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java
index 81e3f417d..e5e095cb9 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java
@@ -80,17 +80,21 @@ public class ResourceLoadModel implements IResourceLoadModel {
private Order filterBy;
+ private boolean filterByResources = true;
+
@Override
@Transactional(readOnly = true)
- public void initGlobalView() {
+ public void initGlobalView(boolean filterByResources) {
filterBy = null;
+ this.filterByResources = filterByResources;
doGlobalView();
}
@Override
@Transactional(readOnly = true)
- public void initGlobalView(Order filterBy) {
+ public void initGlobalView(Order filterBy, boolean filterByResources) {
this.filterBy = orderDAO.findExistingEntity(filterBy.getId());
+ this.filterByResources = filterByResources;
doGlobalView();
}
@@ -112,8 +116,11 @@ public class ResourceLoadModel implements IResourceLoadModel {
private List calculateLoadTimeLines() {
List result = new ArrayList();
- result.addAll(groupsFor(resourcesToShow()));
- result.addAll(groupsFor(genericAllocationsByCriterion()));
+ if (filterByResources) {
+ result.addAll(groupsFor(resourcesToShow()));
+ } else {
+ result.addAll(groupsFor(genericAllocationsByCriterion()));
+ }
return result;
}