ItEr29S14ProcuraOrganizacionsTraballo: Filter OrderElements by label

This commit is contained in:
Diego Pino Garcia 2009-10-13 10:23:40 +02:00 committed by Javier Moran Rua
parent 4d54f4a47c
commit 65e89d6f3e
6 changed files with 129 additions and 2 deletions

View file

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

View file

@ -0,0 +1,12 @@
package org.navalplanner.web.orders;
/**
*
* @author Diego Pino Garcia <dpino@igalia.com>
*
*/
public interface IPredicate {
boolean complays(Object object);
}

View file

@ -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 <dpino@igalia.com>
*
*/
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()));
}
}

View file

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

View file

@ -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<Order> 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<Label> labels) {
for (Label label : labels) {
initializeLabel(label);
}
}
private void initializeLabel(Label label) {
label.getName();
label.getType().getName();
}
@Override
@Transactional(readOnly = true)
public IOrderElementModel getOrderElementModel(OrderElement orderElement) {
@ -291,4 +341,9 @@ public class OrderModel implements IOrderModel {
taskElementDAO.save(convertToInitialSchedule(order));
}
@Override
public void addLabelPredicate(Label label) {
predicate = new LabelOrderElementPredicate(label);
}
}

View file

@ -38,10 +38,12 @@
<vbox>
<hbox>
<!-- Filter by label -->
<combobox>
<combobox id="cbFilterType">
<comboitem label="Filter by Label" />
</combobox>
<bandboxSearch id="bdLabels" finder="LabelBandboxFinder" />
<bandboxSearch id="bdFilter" finder="LabelBandboxFinder" />
<button label="${i18n:_('Filter')}" style="margin-top: -4px"
onClick="orderElementTreeController.onApplyFilter(event)"/>
</hbox>
</vbox>
<vbox>