[Bug #1050] Fix bug

Don't force the insertion always at the top level.

FEA: ItEr74S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-05-06 17:38:31 +02:00
parent 3bb62c0591
commit 955c39181f
2 changed files with 25 additions and 31 deletions

View file

@ -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);
}
}
}

View file

@ -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");