From 18c6864aa80fdcc66a46d66f78014cf9b8104802 Mon Sep 17 00:00:00 2001 From: Lorenzo Tilve Date: Mon, 8 Jun 2009 13:09:27 +0200 Subject: [PATCH] ItEr10S10CUCreacionDeOrganizacionsDeTraballo: Add CRUD and drag and drop operations to workorganization controller (work in progress) * Data is loaded from a fake model * Delete and create operations need to get correct focus * Drag and drop will be done against model operations --- .../WorkOrganizationController.java | 208 +++++++++++++++++- .../web/workorders/WorkOrganizationModel.java | 20 ++ .../main/webapp/common/layout/template.zul | 4 +- .../src/main/webapp/workorders/_list.zul | 3 + .../webapp/workorders/workorganization.zul | 138 +++++++----- 5 files changed, 309 insertions(+), 64 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationModel.java diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationController.java index cd89eb48b..f3f934a42 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationController.java @@ -1,10 +1,29 @@ package org.navalplanner.web.workorders; +import org.zkoss.zk.ui.event.Event; +import java.awt.dnd.DragSourceEvent; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import org.navalplanner.web.common.Util; +import org.zkoss.ganttz.Task; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.DropEvent; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.metainfo.EventHandlerMap; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.SimpleTreeModel; +import org.zkoss.zul.SimpleTreeNode; +import org.zkoss.zul.Textbox; +import org.zkoss.zul.TreeModel; import org.zkoss.zul.Treecell; import org.zkoss.zul.Treeitem; +import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; +import org.zkoss.zul.api.Tree; +import org.zkoss.zul.api.Window; +import org.zkoss.zul.event.TreeDataListener; /** * Controller for {@link WorkOrganization} view of WorkOrder entitites
@@ -12,19 +31,202 @@ import org.zkoss.zul.Treerow; */ public class WorkOrganizationController extends GenericForwardComposer { + private Tree tree; + private WorkOrganizationModel model; + private List taskWorkList = new ArrayList(); + private TaskWorkTreeitemRenderer renderer = new TaskWorkTreeitemRenderer(); + public WorkOrganizationController() { } - public void move(Component self, Component dragged) { + public TaskWorkTreeitemRenderer getRenderer() { + return renderer; + } + + public WorkOrganizationController(Tree tree) { + this.tree = tree; + } + + public void move(Component self, Component dragged) { + /* if (self instanceof Treeitem) { + if (dragged.getParent().getId().equals("right")) { + self.insertBefore(dragged, self.getNextSibling()); + } else { + self.insertBefore(dragged, self.getNextSibling()); + } + } else { + self.appendChild(dragged); + } */ Treeitem elem = new Treeitem("Elemento"); //elem.appendChild(dragged); - self.appendChild(elem); - } + + if (self != null) { + System.out.println("SELF: " + self.toString()); + } + if (dragged != null) { + System.out.println("DRAGGED: " + dragged.toString()); + } + + self.appendChild(elem); + } + + public void addTaskWork() { + if (tree == null) { + System.out.println("Tree is null"); + } else { + int index = tree.getSelectedCount(); + taskWorkList.add( + index, + new SimpleTreeNode(new TaskWork("Nueva tarea", null, null, 10), new ArrayList())); + this.tree.setModel(this.model); + } + Util.reloadBindings(tree); + } + + public void removeTaskWork() { + if (tree == null) { + System.out.println("Tree is null"); + } else { + if (!(taskWorkList.isEmpty())) { + // Handle subchildren! + int index = tree.getSelectedCount(); +// System.out.println( +// "TREE+ "+tree.getSelectedItems().toArray().toString()); + + taskWorkList.remove(index); + + this.tree.setModel(this.model); + } + } + Util.reloadBindings(tree); + } @Override public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); comp.setVariable("controller", this, true); + + // Get real TaskWorkList + List children1 = new ArrayList(); + + children1.add(new SimpleTreeNode(new TaskWork("uno", null, null, 10), new ArrayList())); + children1.add(new SimpleTreeNode(new TaskWork("dos", null, null, 10), new ArrayList())); + children1.add(new SimpleTreeNode(new TaskWork("tres", null, null, 10), new ArrayList())); + children1.add(new SimpleTreeNode(new TaskWork("cuatro", null, null, 10), new ArrayList())); + + SimpleTreeNode stn1 = + new SimpleTreeNode(new TaskWork("uno", null, null, 10), children1); + SimpleTreeNode stn2 = + new SimpleTreeNode(new TaskWork("dos", null, null, 10), children1); + SimpleTreeNode stn3 = + new SimpleTreeNode(new TaskWork("tres", null, null, 10), new ArrayList()); + SimpleTreeNode stn4 = + new SimpleTreeNode(new TaskWork("cuatro", null, null, 10), children1); + + taskWorkList.add(stn1); + taskWorkList.add(stn2); + taskWorkList.add(stn3); + taskWorkList.add(stn4); + + this.model = new WorkOrganizationModel(taskWorkList); + +// Set model (annalize parameter values) +// this.model = new WorkOrganizationModel(taskWorkList); +// this.tree.setModel(this.model); } + public WorkOrganizationModel getTasksWork() { + return this.model; + } + +// ------------------------------------------------- +// ------------------------------------------------- + public class TaskWork { + + private String name; + private Date startDate; + private Date endDate; + private int hours; + + public TaskWork(String name, Date startdate, Date enddate, int hours) { + this.name = name; + this.startDate = startdate; + this.endDate = enddate; + this.hours = hours; + } + + public Date getEndDate() { + return endDate; + } + + public int getHours() { + return hours; + } + + public String getName() { + return name; + } + + public Date getStartDate() { + return startDate; + } + } + +// ------------------------------------------------- +// ------------------------------------------------- + public class TaskWorkTreeitemRenderer implements TreeitemRenderer { + + public void TaskWorkTreeitemRenderer() { + } + + @Override + public void render(Treeitem item, Object data) throws Exception { + SimpleTreeNode t = (SimpleTreeNode) data; + TaskWork taskWork = (TaskWork) t.getData(); + //Contruct treecells + Treecell tcName = new Treecell(taskWork.getName()); + tcName.appendChild(new Textbox(taskWork.getName())); + Treecell tcAccountId = new Treecell(); + tcAccountId.appendChild(new Textbox("" + taskWork.getHours())); + Treecell tcDateStart = new Treecell(); + tcDateStart.appendChild(new Datebox(taskWork.getStartDate())); + Treecell tcDateEnd = new Treecell(); + tcDateStart.appendChild(new Datebox(taskWork.getEndDate())); + Treerow tr = null; + /* + * Since only one treerow is allowed, if treerow is not null, + * append treecells to it. If treerow is null, contruct a new + * treerow and attach it to item. + */ + if (item.getTreerow() == null) { + tr = new Treerow(); + tr.setParent(item); + } else { + tr = item.getTreerow(); + tr.getChildren().clear(); + } + //Attach treecells to treerow + tr.setDraggable("true"); + tr.setDroppable("true"); + + tcName.setParent(tr); + tcDateStart.setParent(tr); + tcDateEnd.setParent(tr); + tcAccountId.setParent(tr); + item.setOpen(false); + + tr.addEventListener("onDrop", new EventListener() { + + @Override + public void onEvent(org.zkoss.zk.ui.event.Event arg0) throws Exception { + DropEvent dropEvent = (DropEvent) arg0; + move((Component) dropEvent.getTarget(), + (Component) dropEvent.getDragged()); + System.out.println("Dragging"+dropEvent.toString()); + } + }); + + } + } } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationModel.java new file mode 100644 index 000000000..0c2b21852 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workorders/WorkOrganizationModel.java @@ -0,0 +1,20 @@ +package org.navalplanner.web.workorders; + +import java.util.List; +import org.zkoss.zul.SimpleTreeModel; +import org.zkoss.zul.SimpleTreeNode; +import org.zkoss.zul.TreeModel; +import org.zkoss.zul.event.TreeDataListener; + +/** + * Model for WorkOrganization
+ * @author Lorenzo Tilve Álvaro + * Pending of real implementation of methods + */ +public class WorkOrganizationModel extends SimpleTreeModel { + + public WorkOrganizationModel(List children) { + super(new SimpleTreeNode("Root", children)); + } + +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/common/layout/template.zul b/navalplanner-webapp/src/main/webapp/common/layout/template.zul index 1cf9c1e51..3ea34f558 100644 --- a/navalplanner-webapp/src/main/webapp/common/layout/template.zul +++ b/navalplanner-webapp/src/main/webapp/common/layout/template.zul @@ -74,6 +74,6 @@
- © Fundación para o Fomento da Calidade Industrial e - Desenvolvemento Tecnolóxico de Galicia. Xunta de Galicia +
\ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/workorders/_list.zul b/navalplanner-webapp/src/main/webapp/workorders/_list.zul index c85e965b4..97198ef2f 100644 --- a/navalplanner-webapp/src/main/webapp/workorders/_list.zul +++ b/navalplanner-webapp/src/main/webapp/workorders/_list.zul @@ -20,6 +20,9 @@ +