From 474085dc1cb5a2257813af322d8ac5c33480eb5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 6 Jan 2010 00:37:16 +0100 Subject: [PATCH] ItEr42S17CUGravacionModelosUnidadesTraballoItEr41S20: Template tree is rendered now --- .../web/templates/TemplatesTreeComponent.java | 55 +++++++-- .../templates/TemplatesTreeController.java | 114 +++++++++++++++++- .../navalplanner/web/tree/TreeController.java | 16 +++ 3 files changed, 171 insertions(+), 14 deletions(-) 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 797b6ca17..05b7d203e 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,9 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.List; +import org.navalplanner.business.templates.entities.OrderElementTemplate; import org.navalplanner.business.trees.ITreeNode; +import org.navalplanner.web.templates.TemplatesTreeController.TemplatesTreeRenderer; import org.navalplanner.web.tree.TreeComponent; import org.navalplanner.web.tree.TreeController; import org.zkoss.zul.Treeitem; @@ -35,6 +37,28 @@ import org.zkoss.zul.Treeitem; */ public class TemplatesTreeComponent extends TreeComponent { + private abstract class TemplatesTreeColumn extends Column { + + TemplatesTreeColumn(String label, String cssClass, String tooltip) { + super(label, cssClass, tooltip); + } + + TemplatesTreeColumn(String label, String cssClass) { + super(label, cssClass); + } + + public final > void doCell( + TreeController.Renderer renderer, + Treeitem item, T currentElement) { + doCell(TemplatesTreeRenderer.class.cast(renderer), item, + OrderElementTemplate.class.cast(currentElement)); + } + + protected abstract void doCell(TemplatesTreeRenderer renderer, + Treeitem item, OrderElementTemplate currentElement); + + } + public String getAddElementLabel() { return _("New Template element"); } @@ -50,23 +74,38 @@ public class TemplatesTreeComponent extends TreeComponent { @Override public List getColumns() { List result = new ArrayList(); + result.add(new TemplatesTreeColumn("", "") { + + @Override + protected void doCell(TemplatesTreeRenderer renderer, + Treeitem item, OrderElementTemplate currentElement) { + renderer.addFirstCell(currentElement); + } + + }); result.add(codeColumn); result.add(nameAndDescriptionColumn); - result.add(new Column(_("Must start after"), "estimated_init") { + result.add(new TemplatesTreeColumn( + _("Must start after (days since beginning project)"), + "estimated_init") { @Override - public > void doCell( - TreeController.Renderer renderer, - Treeitem item, T currentElement) { + protected void doCell(TemplatesTreeRenderer renderer, + Treeitem item, OrderElementTemplate currentElement) { + renderer.addInitCell(currentElement); } + }); - result.add(new Column(_("Deadline"), "estimated_end") { + result.add(new TemplatesTreeColumn( + _("Deadline (days since beggining project)"), + "estimated_end") { @Override - public > void doCell( - TreeController.Renderer renderer, - Treeitem item, T currentElement) { + protected void doCell(TemplatesTreeRenderer renderer, + Treeitem item, OrderElementTemplate currentElement) { + renderer.addEndCell(currentElement); } + }); result.add(operationsColumn); return result; 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 3c51725ed..b8a216a9e 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 @@ -19,9 +19,16 @@ */ package org.navalplanner.web.templates; +import org.hibernate.validator.ClassValidator; import org.navalplanner.business.templates.entities.OrderElementTemplate; +import org.navalplanner.web.common.Util; +import org.navalplanner.web.common.Util.Getter; +import org.navalplanner.web.common.Util.Setter; import org.navalplanner.web.tree.EntitiesTree; import org.navalplanner.web.tree.TreeController; +import org.zkoss.zul.Intbox; +import org.zkoss.zul.Label; +import org.zkoss.zul.Textbox; import org.zkoss.zul.Treeitem; import org.zkoss.zul.TreeitemRenderer; @@ -32,6 +39,106 @@ import org.zkoss.zul.TreeitemRenderer; public class TemplatesTreeController extends TreeController { + final class TemplatesTreeRenderer extends Renderer { + + private final ClassValidator validator = new ClassValidator( + OrderElementTemplate.class); + + void addFirstCell(OrderElementTemplate currentElement) { + int[] path = getModel().getPath(currentElement); + String cssClass = "depth_" + path.length; + Label label = new Label(); + label.setValue(""); + label.setSclass(cssClass); + addCell(label); + } + + @Override + protected void addOperationsCell(Treeitem item, + OrderElementTemplate currentElement) { + addCell(new Label()); + } + + @Override + protected void addDescriptionCell(final OrderElementTemplate element) { + Textbox textBox = Util.bind(new Textbox(), + new Util.Getter() { + + @Override + public String get() { + return element.getName(); + } + }, new Util.Setter() { + + @Override + public void set(String value) { + element.setName(value); + } + }); + + addCell(textBox); + } + + @Override + protected void addCodeCell(final OrderElementTemplate element) { + Textbox textBoxCode = new Textbox(); + Util.bind(textBoxCode, new Util.Getter() { + @Override + public String get() { + return element.getCode(); + } + }, new Util.Setter() { + + @Override + public void set(String value) { + element.setCode(value); + } + }); + addCell(textBoxCode); + } + + void addInitCell(final OrderElementTemplate currentElement) { + final Intbox intbox = new Intbox(); + Util.bind(intbox, new Getter() { + + @Override + public Integer get() { + return currentElement.getStartAsDaysFromBeginning(); + } + }, new Setter() { + + @Override + public void set(Integer value) { + checkInvalidValues(validator, "startAsDaysFromBeginning", + value, intbox); + currentElement.setStartAsDaysFromBeginning(value); + } + }); + addCell(intbox); + } + + void addEndCell(final OrderElementTemplate currentElement) { + final Intbox intbox = new Intbox(); + Util.bind(intbox, new Getter() { + + @Override + public Integer get() { + return currentElement.getDeadlineAsDaysFromBeginning(); + } + }, new Setter() { + + @Override + public void set(Integer value) { + checkInvalidValues(validator, + "deadlineAsDaysFromBeginning", value, intbox); + currentElement.setDeadlineAsDaysFromBeginning(value); + } + }); + addCell(intbox); + } + + } + private final IOrderTemplatesModel model; public TemplatesTreeController(IOrderTemplatesModel model) { @@ -50,12 +157,7 @@ public class TemplatesTreeController extends @Override public TreeitemRenderer getRenderer() { - return new TreeitemRenderer() { - - @Override - public void render(Treeitem item, Object data) throws Exception { - } - }; + return new TemplatesTreeRenderer(); } @Override 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 187c06a96..106903f61 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 @@ -26,16 +26,21 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.templates.entities.OrderElementTemplate; 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.WrongValueException; import org.zkoss.zk.ui.event.DropEvent; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; +import org.zkoss.zul.Intbox; import org.zkoss.zul.RendererCtrl; import org.zkoss.zul.Tree; import org.zkoss.zul.TreeModel; @@ -290,6 +295,17 @@ public abstract class TreeController> extends onDropMoveFromDraggedToTarget(); } + protected void checkInvalidValues( + ClassValidator validator, + String property, Integer value, final Intbox component) { + InvalidValue[] invalidValues = validator.getPotentialInvalidValues( + property, value); + if (invalidValues.length > 0) { + throw new WrongValueException(component, invalidValues[0] + .getMessage()); + } + } + private void createCells(Treeitem item, T currentElement) { for (Column each : columns) { each.doCell(this, item, currentElement);