From 67f0487dfb3c8d434cf2dd00cc76188a68398ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 9 Mar 2010 19:52:47 +0100 Subject: [PATCH] ItEr50S04ValidacionEProbasFuncionaisItEr49S04: Using TaskRow to wrap the tasks. This avoids doing the troublesome relocates after adding. --- .../java/org/zkoss/ganttz/TaskComponent.java | 20 ++++++--- .../zkoss/ganttz/TaskContainerComponent.java | 9 ++-- .../main/java/org/zkoss/ganttz/TaskList.java | 42 ++++++++----------- .../main/resources/web/ganttz/milestone.dsp | 14 +++---- .../src/main/resources/web/ganttz/task.dsp | 30 ++++++------- .../resources/web/ganttz/taskcontainer.dsp | 34 +++++++-------- .../main/resources/web/js/ganttz/tasklist.js | 24 ----------- 7 files changed, 70 insertions(+), 103 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java index 7a9ef0813..413054d06 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java @@ -28,6 +28,7 @@ import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.zkoss.ganttz.adapters.IDisabilityConfiguration; @@ -168,7 +169,7 @@ public class TaskComponent extends Div implements AfterCompose { .getDisabilityConfiguration()); } result.isTopLevel = isTopLevel; - return result; + return TaskRow.wrapInRow(result); } public static TaskComponent asTaskComponent(Task task, TaskList taskList) { @@ -304,6 +305,15 @@ public class TaskComponent extends Div implements AfterCompose { private IConstraintViolationListener taskViolationListener; + public TaskRow getRow() { + if (getParent() == null) { + throw new IllegalStateException( + "the TaskComponent should have been wraped by a " + + TaskRow.class.getName()); + } + return (TaskRow) getParent(); + } + public Task getTask() { return task; } @@ -401,14 +411,12 @@ public class TaskComponent extends Div implements AfterCompose { } public TaskList getTaskList() { - return (TaskList) getParent(); + return getRow().getTaskList(); } @Override public void setParent(Component parent) { - if (parent != null && !(parent instanceof TaskList)) { - throw new UiException("Unsupported parent for rows: " + parent); - } + Validate.isTrue(parent == null || parent instanceof TaskRow); super.setParent(parent); } @@ -503,7 +511,7 @@ public class TaskComponent extends Div implements AfterCompose { } protected void remove() { - this.detach(); + this.getRow().detach(); task.removeReloadListener(reloadResourcesTextRequested); } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java index e558221d2..58cedcf4f 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskContainerComponent.java @@ -31,7 +31,6 @@ import org.zkoss.ganttz.data.Position; import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.data.TaskContainer; import org.zkoss.ganttz.data.TaskContainer.IExpandListener; -import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.ext.AfterCompose; /** @@ -111,16 +110,16 @@ public class TaskContainerComponent extends TaskComponent implements if (isExpanded()) { TaskComponent previous = insertionPosition == 0 ? this : subtaskComponents.get(insertionPosition - 1); - addAllAt(previous, taskComponents, true); + addAllAt(previous.getRow(), taskComponents, true); } } - private void addAllAt(Component previous, List toAdd, + private void addAllAt(TaskRow previous, List toAdd, boolean recolate) { for (TaskComponent subtaskComponent : toAdd) { - taskList.addTaskComponent(previous.getNextSibling(), + taskList.addTaskComponent((TaskRow) previous.getNextSibling(), subtaskComponent, recolate); - previous = subtaskComponent; + previous = subtaskComponent.getRow(); } } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java index 0ff791137..201be384b 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskList.java @@ -42,7 +42,6 @@ import org.zkoss.ganttz.timetracker.zoom.ZoomLevel; import org.zkoss.ganttz.util.MenuBuilder; import org.zkoss.ganttz.util.MenuBuilder.ItemAction; import org.zkoss.zk.au.out.AuInvoke; -import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.ext.AfterCompose; @@ -118,18 +117,13 @@ public class TaskList extends XulElement implements AfterCompose { return asDependencyComponents(Arrays.asList(dependency)).get(0); } - public synchronized void addTaskComponent(Component beforeThis, + public synchronized void addTaskComponent(TaskRow beforeThis, final TaskComponent taskComponent, boolean relocate) { - final boolean isFirst = getFirstTopTaskComponent() == null - || getFirstTopTaskComponent().equals(beforeThis); - insertBefore(taskComponent, beforeThis); + insertBefore(taskComponent.getRow(), beforeThis); addContextMenu(taskComponent); addListenerForTaskComponentEditForm(taskComponent); taskComponent.afterCompose(); if (relocate) { - response(null, new AuInvoke(taskComponent, - isFirst ? "relocateFirstAfterAdding" - : "relocateAfterAdding")); setHeight(getHeight());// forcing smart update adjustZoomColumnsHeight(); getGanttPanel().getDependencyList().redrawDependencies(); @@ -141,14 +135,6 @@ public class TaskList extends XulElement implements AfterCompose { addTaskComponent(null, taskComponent, relocate); } - private TaskComponent getFirstTopTaskComponent() { - List taskComponents = getTopLevelTaskComponents(); - if (taskComponents.isEmpty()) { - return null; - } - return taskComponents.get(0); - } - public void addTasks(Position position, Collection newTasks) { if (position.isAppendToTop()) { for (Task t : newTasks) { @@ -160,14 +146,14 @@ public class TaskList extends XulElement implements AfterCompose { } else if (position.isAtTop()) { final int insertionPosition = position.getInsertionPosition(); List topTaskComponents = getTopLevelTaskComponents(); - Component beforeThis = insertionPosition < topTaskComponents.size() ? topTaskComponents - .get(insertionPosition) + TaskRow beforeThis = insertionPosition < topTaskComponents.size() ? topTaskComponents + .get(insertionPosition).getRow() : null; for (Task t : newTasks) { TaskComponent toAdd = TaskComponent.asTaskComponent(t, this); addTaskComponent(beforeThis, toAdd, true); toAdd.publishTaskComponents(taskComponentByTask); - beforeThis = toAdd.getNextSibling(); + beforeThis = (TaskRow) toAdd.getRow().getNextSibling(); } } else { Task mostRemoteAncestor = position.getMostRemoteAncestor(); @@ -250,8 +236,9 @@ public class TaskList extends XulElement implements AfterCompose { private List getTaskComponents() { ArrayList result = new ArrayList(); for (Object child : getChildren()) { - if (child instanceof TaskComponent) { - result.add((TaskComponent) child); + if (child instanceof TaskRow) { + TaskRow row = (TaskRow) child; + result.add(row.getChild()); } } return result; @@ -333,8 +320,7 @@ public class TaskList extends XulElement implements AfterCompose { } public void hideTaskComponent(TaskComponent subtaskComponent) { - removeChild(subtaskComponent); - subtaskComponent.setParent(null); + removeChild(subtaskComponent.getRow()); } public void redrawDependencies() { @@ -369,7 +355,8 @@ public class TaskList extends XulElement implements AfterCompose { boolean relocate) { for (Task task : tasks) { if (visibleTasks.contains(task)) { - addPendingTasks(tasksPendingToAdd, find(task), relocate); + addPendingTasks(tasksPendingToAdd, rowFor(task), + relocate); } if (predicate.accepts(task)) { @@ -392,8 +379,13 @@ public class TaskList extends XulElement implements AfterCompose { } } + private TaskRow rowFor(Task task) { + TaskComponent taskComponent = find(task); + return taskComponent == null ? null : taskComponent.getRow(); + } + private void addPendingTasks(List tasksPendingToAdd, - TaskComponent insertBefore, boolean relocate) { + TaskRow insertBefore, boolean relocate) { if (tasksPendingToAdd.isEmpty()) { return; } diff --git a/ganttzk/src/main/resources/web/ganttz/milestone.dsp b/ganttzk/src/main/resources/web/ganttz/milestone.dsp index 12ef49d84..4cfad9498 100644 --- a/ganttzk/src/main/resources/web/ganttz/milestone.dsp +++ b/ganttzk/src/main/resources/web/ganttz/milestone.dsp @@ -3,12 +3,10 @@ -
-
-
-
-
-
+
+
+
+
diff --git a/ganttzk/src/main/resources/web/ganttz/task.dsp b/ganttzk/src/main/resources/web/ganttz/task.dsp index 5e0c389bf..c97f9571c 100644 --- a/ganttzk/src/main/resources/web/ganttz/task.dsp +++ b/ganttzk/src/main/resources/web/ganttz/task.dsp @@ -3,21 +3,17 @@ -
-
-
${self.labelsText}
-
-
${self.resourcesText}
-
-
-
-
${self.tooltipText}
-
-
- +
+
${self.labelsText}
+
+
${self.resourcesText}
+
+
+
+
${self.tooltipText}
diff --git a/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp b/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp index 2c8b42c9a..cde291447 100644 --- a/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp +++ b/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp @@ -4,23 +4,21 @@ -
-
-
${self.labelsText}
-
-
${self.resourcesText}
-
-
-
-
-
-
-
-
-
-
${self.tooltipText}
+
+
${self.labelsText}
+
+
${self.resourcesText}
+
+
+
+
+
+
+
+
+
${self.tooltipText}
diff --git a/ganttzk/src/main/resources/web/js/ganttz/tasklist.js b/ganttzk/src/main/resources/web/js/ganttz/tasklist.js index 8be5c1c97..eaf963466 100644 --- a/ganttzk/src/main/resources/web/js/ganttz/tasklist.js +++ b/ganttzk/src/main/resources/web/js/ganttz/tasklist.js @@ -308,30 +308,6 @@ zkTask.getDD = function(cmp) { return cmp.created_dd; } -zkTask.relocateAfterAdding = function(cmp) { - var row = cmp.parentNode; - var taskList = row.parentNode.parentNode; - var nextTask = row.parentNode.nextSibling; - row.parentNode.removeChild(row); - taskList.insertBefore(row, nextTask); -} -/* - * relocateAfterAdding works for all but in the case that the task added would - * be the first one, so we create another method for that case - */ -zkTask.relocateFirstAfterAdding = function(cmp) { - var row = cmp.parentNode; - var taskList = row.parentNode.parentNode; - var nextTask = row.parentNode.previousSibling; - row.parentNode.removeChild(row); - taskList.insertBefore(row, nextTask); -} - -zkTask.cleanup = function(cmp) { - var row = cmp.parentNode; - row.parentNode.removeChild(row); -} - zkTask.init = function(cmp) { function addDragSupport() { // Configure the drag&drop over the component