From f1bbab882c82653c917c1c68712687d84534da8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 8 Feb 2010 23:33:02 +0100 Subject: [PATCH] ItEr47S11CUVisualizacionResponsabilidadesTRaballoNaPlanificacionItEr46S12: When resizing a task it's reallocated if possible --- .../business/planner/entities/Task.java | 5 ++++ .../planner/entities/TaskElement.java | 20 ++++++++++++++-- .../business/planner/entities/TaskGroup.java | 5 ++++ .../planner/entities/TaskMilestone.java | 5 ++++ .../web/planner/TaskElementAdapter.java | 23 +++++++++++++++---- 5 files changed, 51 insertions(+), 7 deletions(-) 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 82cd12fa3..dd82decb9 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 @@ -478,4 +478,9 @@ public class Task extends TaskElement { return !getSatisfiedResourceAllocations().isEmpty(); } + @Override + protected boolean canBeResized() { + return calculatedValue != CalculatedValue.END_DATE; + } + } 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 a0f787845..94a2ca75b 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 @@ -202,8 +202,7 @@ public abstract class TaskElement extends BaseEntity { if (newStartDate == null) { return; } - boolean sameDay = new LocalDate(newStartDate).equals(new LocalDate( - startDate)); + final boolean sameDay = areSameDay(newStartDate, startDate); long durationMilliseconds = this.endDate.getTime() - this.startDate.getTime(); this.startDate = newStartDate; @@ -213,6 +212,10 @@ public abstract class TaskElement extends BaseEntity { } } + private boolean areSameDay(Date one, Date other) { + return new LocalDate(one).equals(new LocalDate(other)); + } + protected abstract void moveAllocations(); public Date getEndDate() { @@ -223,6 +226,19 @@ public abstract class TaskElement extends BaseEntity { this.endDate = endDate != null ? new Date(endDate.getTime()) : null; } + public void resizeTo(Date endDate) { + if (!canBeResized()) { + return; + } + boolean sameDay = areSameDay(this.endDate, endDate); + setEndDate(endDate); + if (!sameDay) { + moveAllocations(); + } + } + + protected abstract boolean canBeResized(); + public LocalDate getDeadline() { return deadline; } 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 6580b22cd..9d961dd28 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 @@ -137,4 +137,9 @@ public class TaskGroup extends TaskElement { } return result; } + + @Override + protected boolean canBeResized() { + 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 b912ed6b7..c8996bfa0 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 @@ -114,4 +114,9 @@ public class TaskMilestone extends TaskElement { protected void initializeEndDate() { // do nothing } + + @Override + protected boolean canBeResized() { + return false; + } } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java index 4a9e95782..6f59a3f55 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java @@ -161,8 +161,7 @@ public class TaskElementAdapter implements ITaskElementAdapter { .runOnReadOnlyTransaction(new IOnTransaction() { @Override public Long execute() { - taskDAO.reattach(taskElement); - reattachAllResourcesForTask(); + stepsBeforePossibleReallocation(); Long result = setBeginDateInsideTransaction(beginDate); fireTaskElementMoved(taskElement); return result; @@ -206,12 +205,21 @@ public class TaskElementAdapter implements ITaskElementAdapter { } @Override - public void setLengthMilliseconds(long lengthMilliseconds) { - updateEndDate(lengthMilliseconds); + public void setLengthMilliseconds(final long lengthMilliseconds) { + transactionService + .runOnReadOnlyTransaction(new IOnTransaction() { + @Override + public Void execute() { + stepsBeforePossibleReallocation(); + updateEndDate(lengthMilliseconds); + return null; + } + }); + fireTaskElementMoved(taskElement); } private void updateEndDate(long lengthMilliseconds) { - taskElement.setEndDate(new Date(getBeginDate().getTime() + taskElement.resizeTo(new Date(getBeginDate().getTime() + lengthMilliseconds)); } @@ -534,6 +542,11 @@ public class TaskElementAdapter implements ITaskElementAdapter { return taskElement.isSubcontracted(); } + private void stepsBeforePossibleReallocation() { + taskDAO.reattach(taskElement); + reattachAllResourcesForTask(); + } + } @Override