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 426bb9228..3736d9158 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 @@ -147,15 +147,8 @@ public class OrderElementTreeController extends TreeController { } @Override - protected void createCells(Treeitem item, - OrderElement currentOrderElement) { - addSchedulingStateCell(currentOrderElement); - addCodeCell(currentOrderElement); - addHoursCell(currentOrderElement); - addTaskNumberCell(currentOrderElement); - addInitDateCell(currentOrderElement); - addEndDateCell(currentOrderElement); - addOperationsCell(item, currentOrderElement); + protected void addDescriptionCell(OrderElement element) { + addTaskNumberCell(element); } private void addTaskNumberCell(final OrderElement orderElementForThisRow) { @@ -207,8 +200,7 @@ public class OrderElementTreeController extends TreeController { return cssclass; } - private void addSchedulingStateCell( - final OrderElement currentOrderElement) { + void addSchedulingStateCell(final OrderElement currentOrderElement) { SchedulingStateToggler schedulingStateToggler = new SchedulingStateToggler(currentOrderElement .getSchedulingState()); final Treecell cell = addCell( @@ -235,7 +227,7 @@ public class OrderElementTreeController extends TreeController { schedulingStateToggler.afterCompose(); } - private void addCodeCell(final OrderElement orderElement) { + protected void addCodeCell(final OrderElement orderElement) { Textbox textBoxCode = new Textbox(); Util.bind(textBoxCode, new Util.Getter() { @Override @@ -268,7 +260,7 @@ public class OrderElementTreeController extends TreeController { addCell(textBoxCode); } - private void addInitDateCell(final OrderElement currentOrderElement) { + void addInitDateCell(final OrderElement currentOrderElement) { addCell(Util.bind(new Datebox(), new Util.Getter() { @Override @@ -284,7 +276,7 @@ public class OrderElementTreeController extends TreeController { })); } - private void addEndDateCell(final OrderElement currentOrderElement) { + void addEndDateCell(final OrderElement currentOrderElement) { addCell(Util.bind(new Datebox(), new Util.Getter() { @Override @@ -300,7 +292,7 @@ public class OrderElementTreeController extends TreeController { })); } - private void addHoursCell(final OrderElement currentOrderElement) { + void addHoursCell(final OrderElement currentOrderElement) { Intbox intboxHours = buildHoursIntboxFor(currentOrderElement); hoursIntBoxByOrderElement.put(currentOrderElement, intboxHours); addCell(intboxHours); @@ -363,7 +355,8 @@ public class OrderElementTreeController extends TreeController { }; } - private void addOperationsCell(final Treeitem item, + @Override + protected void addOperationsCell(final Treeitem item, final OrderElement currentOrderElement) { addCell(createEditButton(currentOrderElement), createTemplateButton(currentOrderElement), diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrdersTreeComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrdersTreeComponent.java index 5a7cda774..caba29b21 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrdersTreeComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrdersTreeComponent.java @@ -24,7 +24,12 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.List; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.trees.ITreeNode; +import org.navalplanner.web.orders.OrderElementTreeController.OrderElementTreeitemRenderer; import org.navalplanner.web.tree.TreeComponent; +import org.navalplanner.web.tree.TreeController; +import org.zkoss.zul.Treeitem; /** * @author Óscar González Fernández @@ -32,15 +37,72 @@ import org.navalplanner.web.tree.TreeComponent; */ public class OrdersTreeComponent extends TreeComponent { + abstract class OrdersTreeColumn extends Column { + OrdersTreeColumn(String label, String cssClass, String tooltip) { + super(label, cssClass, tooltip); + } + + OrdersTreeColumn(String label, String cssClass) { + super(label, cssClass); + } + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + OrderElementTreeitemRenderer treeRenderer = OrderElementTreeitemRenderer.class + .cast(renderer); + doCell(treeRenderer, OrderElement.class.cast(currentElement)); + } + + protected abstract void doCell( + OrderElementTreeitemRenderer treeRenderer, + OrderElement currentElement); + + } + public List getColumns() { List columns = new ArrayList(); - columns.add(new Column(_("Scheduling state"), "scheduling_state")); + columns.add(new OrdersTreeColumn(_("Scheduling state"), + "scheduling_state") { + + @Override + protected void doCell(OrderElementTreeitemRenderer treeRenderer, + OrderElement currentElement) { + treeRenderer.addSchedulingStateCell(currentElement); + } + + }); columns.add(codeColumn); - columns.add(new Column(_("Hours"), "hours", - _("Total order element hours"))); + columns.add(new OrdersTreeColumn(_("Hours"), "hours", + _("Total order element hours")) { + + @Override + protected void doCell(OrderElementTreeitemRenderer treeRenderer, + OrderElement currentElement) { + treeRenderer.addHoursCell(currentElement); + } + + }); columns.add(nameAndDescriptionColumn); - columns.add(new Column(_("Must start after"), "estimated_init")); - columns.add(new Column(_("Deadline"), "estimated_end")); + columns.add(new OrdersTreeColumn(_("Must start after"), + "estimated_init") { + + @Override + protected void doCell(OrderElementTreeitemRenderer treeRenderer, + OrderElement currentElement) { + treeRenderer.addInitDateCell(currentElement); + } + + }); + columns.add(new OrdersTreeColumn(_("Deadline"), "estimated_end") { + + @Override + protected void doCell(OrderElementTreeitemRenderer treeRenderer, + OrderElement currentElement) { + treeRenderer.addEndDateCell(currentElement); + } + }); columns.add(operationsColumn); return columns; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeComponent.java index 3e05f75cf..797b6ca17 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeComponent.java @@ -24,7 +24,10 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.List; +import org.navalplanner.business.trees.ITreeNode; import org.navalplanner.web.tree.TreeComponent; +import org.navalplanner.web.tree.TreeController; +import org.zkoss.zul.Treeitem; /** * Tree component for templates
@@ -49,8 +52,22 @@ public class TemplatesTreeComponent extends TreeComponent { List result = new ArrayList(); result.add(codeColumn); result.add(nameAndDescriptionColumn); - result.add(new Column(_("Must start after"), "estimated_init")); - result.add(new Column(_("Deadline"), "estimated_end")); + result.add(new Column(_("Must start after"), "estimated_init") { + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + } + }); + result.add(new Column(_("Deadline"), "estimated_end") { + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + } + }); result.add(operationsColumn); return result; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeComponent.java index 8b79e297d..2837bbf5c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeComponent.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeComponent.java @@ -23,9 +23,11 @@ import static org.navalplanner.web.I18nHelper._; import java.util.List; +import org.navalplanner.business.trees.ITreeNode; import org.navalplanner.web.orders.OrderElementTreeController; import org.zkoss.zk.ui.HtmlMacroComponent; import org.zkoss.zk.ui.util.Composer; +import org.zkoss.zul.Treeitem; /** * macro component for order elements tree and similar pages
@@ -35,7 +37,7 @@ public abstract class TreeComponent extends HtmlMacroComponent { private static final String CONTROLLER_NAME = "treeController"; - public static class Column { + public static abstract class Column { private String label; private String cssClass; @@ -63,13 +65,41 @@ public abstract class TreeComponent extends HtmlMacroComponent { public String getTooltip() { return tooltip; } + + public abstract > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement); } - protected final Column codeColumn = new Column(_("Code"), "code"); + protected final Column codeColumn = new Column(_("Code"), "code") { + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + renderer.addCodeCell(currentElement); + } + }; protected final Column nameAndDescriptionColumn = new Column( - _("Name and description"), "name"); + _("Name and description"), "name") { + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + renderer.addDescriptionCell(currentElement); + } + }; protected final Column operationsColumn = new Column(_("Operations"), - "operations"); + "operations") { + + @Override + public > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + renderer.addOperationsCell(item, currentElement); + } + }; public abstract List getColumns(); @@ -81,6 +111,7 @@ public abstract class TreeComponent extends HtmlMacroComponent { public void useController(TreeController controller) { doAfterComposeOnController(controller); + controller.setColumns(getColumns()); this.setVariable(CONTROLLER_NAME, controller, true); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java index b4dfaeb6f..187c06a96 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java @@ -21,6 +21,7 @@ package org.navalplanner.web.tree; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.apache.commons.logging.Log; @@ -29,6 +30,7 @@ import org.navalplanner.business.trees.ITreeNode; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Level; import org.navalplanner.web.common.MessagesForUser; +import org.navalplanner.web.tree.TreeComponent.Column; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.DropEvent; import org.zkoss.zk.ui.event.EventListener; @@ -227,6 +229,8 @@ public abstract class TreeController> extends protected Button btnNew, btnDown, btnUp, btnUnindent, btnIndent, btnDelete; + private List columns; + protected TreeViewStateSnapshot getSnapshotOfOpenedNodes() { return snapshotOfOpenedNodes; @@ -286,7 +290,11 @@ public abstract class TreeController> extends onDropMoveFromDraggedToTarget(); } - protected abstract void createCells(Treeitem item, T currentElement); + private void createCells(Treeitem item, T currentElement) { + for (Column each : columns) { + each.doCell(this, item, currentElement); + } + } private void applySnapshot(final Treeitem item) { if (snapshotOfOpenedNodes != null) { @@ -336,6 +344,13 @@ public abstract class TreeController> extends }); } + protected abstract void addCodeCell(final T element); + + protected abstract void addDescriptionCell(final T element); + + protected abstract void addOperationsCell(final Treeitem item, + final T currentElement); + @Override public void doCatch(Throwable ex) throws Throwable { @@ -352,4 +367,8 @@ public abstract class TreeController> extends } } + public void setColumns(List columns) { + this.columns = columns; + } + }