diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java index e1aa48199..80568ec6d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java @@ -494,4 +494,9 @@ public class Task extends TaskElement { return canBeResized() && !isSubcontracted(); } + @Override + public boolean isMilestone() { + return false; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java index 7acd3a380..e258ac888 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskElement.java @@ -412,4 +412,6 @@ public abstract class TaskElement extends BaseEntity { return result; } + public abstract boolean isMilestone(); + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java index 345aac382..346c2f901 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskGroup.java @@ -105,21 +105,32 @@ public class TaskGroup extends TaskElement { } public void setTaskChildrenTo(List children) { + int positionOnTaskElements = 0; for (int i = 0; i < children.size(); i++) { TaskElement element = children.get(i); - if (i >= taskElements.size()) { + if (positionOnTaskElements >= taskElements.size()) { taskElements.add(element); } else { - taskElements.set(i, element); + while (positionOnTaskElements < taskElements.size() + && taskElements.get(positionOnTaskElements) + .isMilestone()) { + positionOnTaskElements++; + } + if (positionOnTaskElements >= taskElements.size()) { + taskElements.add(element); + } else { + taskElements.set(positionOnTaskElements, element); + } } + positionOnTaskElements++; } - if (children.size() < taskElements.size()) { - ListIterator listIterator = taskElements - .listIterator(children.size()); - do { - listIterator.next(); + ListIterator listIterator = taskElements + .listIterator(positionOnTaskElements); + while (listIterator.hasNext()) { + TaskElement current = listIterator.next(); + if (!current.isMilestone()) { listIterator.remove(); - } while (listIterator.hasNext()); + } } } @@ -147,4 +158,9 @@ public class TaskGroup extends TaskElement { public boolean canBeExplicitlyResized() { return false; } + + @Override + public boolean isMilestone() { + return false; + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java index feaa60fcf..e79cad452 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/TaskMilestone.java @@ -124,4 +124,9 @@ public class TaskMilestone extends TaskElement { public boolean canBeExplicitlyResized() { return false; } + + @Override + public boolean isMilestone() { + return true; + } } \ No newline at end of file