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 3bc908c65..5a91e60fd 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 @@ -61,7 +61,6 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Button; import org.zkoss.zul.Constraint; import org.zkoss.zul.Datebox; -import org.zkoss.zul.Intbox; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Tab; import org.zkoss.zul.Textbox; @@ -396,8 +395,6 @@ public class OrderElementTreeController extends TreeController { public class OrderElementTreeitemRenderer extends Renderer { - private Map hoursIntBoxByOrderElement = new HashMap(); - public OrderElementTreeitemRenderer() { } @@ -442,7 +439,7 @@ public class OrderElementTreeController extends TreeController { IOrderElementModel model = orderModel .getOrderElementModel(currentOrderElement); orderElementController.openWindow(model); - updateOrderElementHours(currentOrderElement); + updateHoursFor(currentOrderElement); } protected void addCodeCell(final OrderElement orderElement) { @@ -660,31 +657,7 @@ public class OrderElementTreeController extends TreeController { IOrderElementModel model = orderModel .getOrderElementModel(currentOrderElement); orderElementController.openWindow(model); - updateOrderElementHours(currentOrderElement); - } - - private void updateOrderElementHours(OrderElement orderElement) { - if ((!readOnly) && (orderElement instanceof OrderLine)) { - Intbox boxHours = (Intbox) getRenderer().hoursIntBoxByOrderElement - .get(orderElement); - boxHours.setValue(orderElement.getWorkHours()); - Treecell tc = (Treecell) boxHours.getParent(); - setReadOnlyHoursCell(orderElement, boxHours, tc); - boxHours.invalidate(); - } - } - - private void setReadOnlyHoursCell(OrderElement orderElement, - Intbox boxHours, Treecell tc) { - if ((!readOnly) && (orderElement instanceof OrderLine)) { - if (orderElement.getHoursGroups().size() > 1) { - boxHours.setReadonly(true); - tc.setTooltiptext(_("Not editable for containing more that an hours group.")); - } else { - boxHours.setReadonly(false); - tc.setTooltiptext(""); - } - } + getRenderer().updateHoursFor(currentOrderElement); } public Treeitem getTreeitemByOrderElement(OrderElement element) { @@ -753,18 +726,6 @@ public class OrderElementTreeController extends TreeController { } } - @Override - protected void refreshHoursBox(OrderElement node) { - List parentNodes = getModel().getParents(node); - // Remove the last element because it's an - // Order node, not an OrderElement - parentNodes.remove(parentNodes.size() - 1); - for (OrderElement parent : parentNodes) { - getRenderer().hoursIntBoxByOrderElement.get(parent) - .setValue(parent.getWorkHours()); - } - } - @Override protected IHoursGroupHandler getHoursGroupHandler() { return new IHoursGroupHandler() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeController.java index 73608ccd8..d5b122dd9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTreeController.java @@ -37,7 +37,6 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Intbox; import org.zkoss.zul.Textbox; import org.zkoss.zul.Treeitem; -import org.zkoss.zul.TreeitemRenderer; /** * Controller for template element tree
@@ -189,7 +188,7 @@ public class TemplatesTreeController extends } @Override - public TreeitemRenderer getRenderer() { + public TemplatesTreeRenderer getRenderer() { return new TemplatesTreeRenderer(); } @@ -221,11 +220,6 @@ public class TemplatesTreeController extends return tooltipText.toString(); } - @Override - protected void refreshHoursBox(OrderElementTemplate node) { - // we do nothing, since there isn't an hours box in this tree - } - @Override protected IHoursGroupHandler getHoursGroupHandler() { return new IHoursGroupHandler() { 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 1deb594b7..80d677b43 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 @@ -86,7 +86,7 @@ public abstract class TreeController> extends private final Class type; - public abstract TreeitemRenderer getRenderer(); + public abstract Renderer getRenderer(); protected TreeController(Class type) { this.type = type; @@ -203,7 +203,7 @@ public abstract class TreeController> extends T node = getSelectedNode(); getModel().addElementAt(node, name.getValue(), hours.getValue()); - refreshHoursBox(node); + getRenderer().refreshHoursValueForThisNodeAndParents(node); } else { getModel().addElement(name.getValue(), hours.getValue()); } @@ -217,8 +217,6 @@ public abstract class TreeController> extends name.focus(); } - protected abstract void refreshHoursBox(T node); - protected abstract void filterByPredicateIfAny(); protected static class TreeViewStateSnapshot { @@ -771,6 +769,29 @@ public abstract class TreeController> extends }; } + public void updateHoursFor(T element) { + if (!readOnly && isLine(element)) { + Intbox boxHours = (Intbox) hoursIntBoxByElement.get(element); + Treecell tc = (Treecell) boxHours.getParent(); + setReadOnlyHoursCell(element, boxHours, tc); + boxHours.invalidate(); + refreshHoursValueForThisNodeAndParents(element); + } + } + + public void refreshHoursValueForThisNodeAndParents(T node) { + List parentNodes = getModel().getParents(node); + for (T parent : parentNodes) { + Intbox intbox = hoursIntBoxByElement.get(parent); + // For the Order node there is no associated intbox + if (intbox != null) { + Integer currentHours = getHoursGroupHandler() + .getWorkHoursFor(parent); + intbox.setValue(currentHours); + } + } + } + private Constraint getHoursConstraintFor(final T line) { return new Constraint() { @Override