ItEr42S17CUGravacionModelosUnidadesTraballoItEr41S20: Template tree is rendered now

This commit is contained in:
Óscar González Fernández 2010-01-06 00:37:16 +01:00
parent 9fdfc305e9
commit 474085dc1c
3 changed files with 171 additions and 14 deletions

View file

@ -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 <T extends ITreeNode<T>> void doCell(
TreeController<T>.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<Column> getColumns() {
List<Column> result = new ArrayList<Column>();
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 <T extends ITreeNode<T>> void doCell(
TreeController<T>.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 <T extends ITreeNode<T>> void doCell(
TreeController<T>.Renderer renderer,
Treeitem item, T currentElement) {
protected void doCell(TemplatesTreeRenderer renderer,
Treeitem item, OrderElementTemplate currentElement) {
renderer.addEndCell(currentElement);
}
});
result.add(operationsColumn);
return result;

View file

@ -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<OrderElementTemplate> {
final class TemplatesTreeRenderer extends Renderer {
private final ClassValidator<OrderElementTemplate> validator = new ClassValidator<OrderElementTemplate>(
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<String>() {
@Override
public String get() {
return element.getName();
}
}, new Util.Setter<String>() {
@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<String>() {
@Override
public String get() {
return element.getCode();
}
}, new Util.Setter<String>() {
@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<Integer>() {
@Override
public Integer get() {
return currentElement.getStartAsDaysFromBeginning();
}
}, new Setter<Integer>() {
@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<Integer>() {
@Override
public Integer get() {
return currentElement.getDeadlineAsDaysFromBeginning();
}
}, new Setter<Integer>() {
@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

View file

@ -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<T extends ITreeNode<T>> extends
onDropMoveFromDraggedToTarget();
}
protected void checkInvalidValues(
ClassValidator<OrderElementTemplate> 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);