From 65e89d6f3ea0550f714e413360357ae361b5d3f3 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Tue, 13 Oct 2009 10:23:40 +0200 Subject: [PATCH] ItEr29S14ProcuraOrganizacionsTraballo: Filter OrderElements by label --- .../navalplanner/web/orders/IOrderModel.java | 2 + .../navalplanner/web/orders/IPredicate.java | 12 ++++ .../orders/LabelOrderElementPredicate.java | 35 ++++++++++++ .../orders/OrderElementTreeController.java | 21 +++++++ .../navalplanner/web/orders/OrderModel.java | 55 +++++++++++++++++++ .../main/webapp/orders/_orderElementTree.zul | 6 +- 6 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IPredicate.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/orders/LabelOrderElementPredicate.java diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java index 64c5f521c..0fedcdcd5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IOrderModel.java @@ -23,6 +23,7 @@ package org.navalplanner.web.orders; import java.util.List; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.orders.entities.IOrderLineGroup; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; @@ -64,4 +65,5 @@ public interface IOrderModel { void convertToScheduleAndSave(Order order); + void addLabelPredicate(Label label); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IPredicate.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IPredicate.java new file mode 100644 index 000000000..20cd2cd51 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IPredicate.java @@ -0,0 +1,12 @@ +package org.navalplanner.web.orders; + +/** + * + * @author Diego Pino Garcia + * + */ +public interface IPredicate { + + boolean complays(Object object); + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/LabelOrderElementPredicate.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/LabelOrderElementPredicate.java new file mode 100644 index 000000000..fc129bff2 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/LabelOrderElementPredicate.java @@ -0,0 +1,35 @@ +package org.navalplanner.web.orders; + +import org.navalplanner.business.labels.entities.Label; +import org.navalplanner.business.orders.entities.OrderElement; + +/** + * + * @author Diego Pino Garcia + * + */ +public class LabelOrderElementPredicate implements IPredicate { + + Label label; + + public LabelOrderElementPredicate(Label label) { + this.label = label; + } + + @Override + public boolean complays(Object object) { + final OrderElement orderElement = (OrderElement) object; + for (Label label : orderElement.getLabels()) { + if (equalsLabel(label)) { + return true; + } + } + return false; + } + + private boolean equalsLabel(Label label) { + return (this.label.getName().equals(label.getName()) && this.label + .getType().getName().equals(label.getType().getName())); + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java index 6a860fac7..36ed6543e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java @@ -34,6 +34,7 @@ import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderLine; import org.navalplanner.web.common.Util; +import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.DropEvent; @@ -42,6 +43,7 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; +import org.zkoss.zul.Combobox; import org.zkoss.zul.Constraint; import org.zkoss.zul.Datebox; import org.zkoss.zul.Intbox; @@ -61,6 +63,10 @@ import org.zkoss.zul.api.Tree; */ public class OrderElementTreeController extends GenericForwardComposer { + private Combobox cbFilterType; + + private BandboxSearch bdFilter; + private Tree tree; private OrderElementTreeitemRenderer renderer = new OrderElementTreeitemRenderer(); @@ -521,4 +527,19 @@ public class OrderElementTreeController extends GenericForwardComposer { } } + private final String FILTER_BY_LABEL = _("Filter by Label"); + + /** + * + * @param event + */ + public void onApplyFilter(Event event) { + if (FILTER_BY_LABEL.equals(cbFilterType.getValue())) { + org.navalplanner.business.labels.entities.Label label = (org.navalplanner.business.labels.entities.Label) bdFilter + .getSelectedElement(); + orderModel.addLabelPredicate(label); + Util.reloadBindings(tree); + } + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java index 8f4630c88..f63a90881 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -27,6 +27,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.lang.Validate; import org.hibernate.validator.ClassValidator; @@ -36,7 +37,10 @@ import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.labels.daos.ILabelDAO; +import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.orders.daos.IOrderDAO; +import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.IOrderLineGroup; import org.navalplanner.business.orders.entities.Order; @@ -91,6 +95,12 @@ public class OrderModel implements IOrderModel { @Autowired private ITaskElementDAO taskElementDAO; + @Autowired + private ILabelDAO labelDAO; + + @Autowired + private IOrderElementDAO orderElementDAO; + @Override @Transactional(readOnly = true) public List getOrders() { @@ -201,11 +211,51 @@ public class OrderModel implements IOrderModel { this.order = order; } + private IPredicate predicate; + + public IPredicate getPredicate() { + return predicate; + } + + public void setPredicate(IPredicate predicate) { + this.predicate = predicate; + } + @Override + @Transactional(readOnly = true) public OrderElementTreeModel getOrderElementTreeModel() { + if (predicate != null) { + return applyPredicate(); + } return orderElementTreeModel; } + private OrderElementTreeModel applyPredicate() { + for (OrderElement orderElement : order.getOrderElements()) { + reattachOrderElement(orderElement); + initializeLabels(orderElement.getLabels()); + if (predicate.complays(orderElement)) { + order.remove(orderElement); + } + } + return new OrderElementTreeModel(order); + } + + private void reattachOrderElement(OrderElement orderElement) { + orderElementDAO.save(orderElement); + } + + private void initializeLabels(Set