From 955c39181fb4190929dc9be2ea965eeb6153e1a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 6 May 2011 17:38:31 +0200 Subject: [PATCH] [Bug #1050] Fix bug Don't force the insertion always at the top level. FEA: ItEr74S04BugFixing --- .../java/org/zkoss/ganttz/data/Position.java | 17 ++++++++ .../milestone/AddMilestoneCommand.java | 39 ++++--------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Position.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Position.java index b83b47ff2..697b3b4e3 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Position.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Position.java @@ -121,6 +121,8 @@ public abstract class Position { return new ChildPosition(ancestors, positionInParent); } + public abstract Position sameLevelAt(int positionInParent); + private static class ChildPosition extends Position { @@ -159,6 +161,11 @@ public abstract class Position { public boolean canPop() { return parents.size() > 1; } + + @Override + public Position sameLevelAt(int positionInParent) { + return new ChildPosition(parents, positionInParent); + } } private static class AppendToTopPosition extends Position { @@ -186,6 +193,11 @@ public abstract class Position { public boolean canPop() { return false; } + + @Override + public Position sameLevelAt(int positionInParent) { + return new InsertInTopPosition(positionInParent); + } } private static class InsertInTopPosition extends Position { @@ -219,6 +231,11 @@ public abstract class Position { return false; } + @Override + public Position sameLevelAt(int positionInParent) { + return new InsertInTopPosition(positionInParent); + } + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/milestone/AddMilestoneCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/milestone/AddMilestoneCommand.java index 1fc87e59a..f70dcdacf 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/milestone/AddMilestoneCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/milestone/AddMilestoneCommand.java @@ -23,7 +23,6 @@ package org.navalplanner.web.planner.milestone; import static org.navalplanner.web.I18nHelper._; -import org.apache.commons.lang.Validate; import org.navalplanner.business.planner.daos.ITaskElementDAO; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.entities.TaskGroup; @@ -62,39 +61,17 @@ public class AddMilestoneCommand implements IAddMilestoneCommand { TaskMilestone milestone = TaskMilestone.create(task.getEndDate()); milestone.setName(_("new milestone")); taskElementDAO.reattach(task); - InsertionPoint insertionPoint = getInsertionPoint(task); - insertionPoint.root.addTaskElement(insertionPoint.insertionPosition, - milestone); - context.add(Position - .createAtTopPosition(insertionPoint.insertionPosition), - milestone); + + Position taskPosition = context.getMapper().findPositionFor(task); + int insertAt = taskPosition.getInsertionPosition() + 1; + + TaskGroup parent = task.getParent(); + parent.addTaskElement(insertAt, milestone); + context.add(taskPosition.sameLevelAt(insertAt), milestone); + planningState.added(milestone.getParent()); } - private static class InsertionPoint { - final TaskGroup root; - - final int insertionPosition; - - private InsertionPoint(TaskGroup root, int position) { - this.root = root; - this.insertionPosition = position + 1; - } - } - - private InsertionPoint getInsertionPoint(TaskElement task) { - Validate.isTrue(task.getParent() != null, - "the task parent is not null " - + "since all shown tasks are children " - + "of the root Order"); - TaskGroup taskParent = task.getParent(); - if (taskParent.getParent() == null) { - return new InsertionPoint(taskParent, taskParent.getChildren() - .indexOf(task)); - } - return getInsertionPoint(taskParent); - } - @Override public String getName() { return _("Add Milestone");