diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java index cc1fdd91d..590ad962b 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -79,6 +79,10 @@ public class GanttDiagramGraph> implements public void setStartDate(GanttDate previousStart, GanttDate previousEnd, GanttDate newStart) { } + + @Override + public void positionPotentiallyModified() { + } }; } @@ -555,13 +559,17 @@ public class GanttDiagramGraph> implements } } - public interface IDependenciesEnforcerHook { + private interface IDependenciesEnforcer { public void setStartDate(GanttDate previousStart, GanttDate previousEnd, GanttDate newStart); public void setNewEnd(GanttDate previousEnd, GanttDate newEnd); } + public interface IDependenciesEnforcerHook extends IDependenciesEnforcer { + public void positionPotentiallyModified(); + } + public interface IDependenciesEnforcerHookFactory { public IDependenciesEnforcerHook create(T task, INotificationAfterDependenciesEnforcement notification); @@ -708,8 +716,10 @@ public class GanttDiagramGraph> implements @Override public IDependenciesEnforcerHook create(V task, INotificationAfterDependenciesEnforcement notificator) { - return onlyEnforceDependenciesOnEntrance(onEntrance(task), - onNotification(task, notificator)); + return withPositionPotentiallyModified( + task, + onlyEnforceDependenciesOnEntrance(onEntrance(task), + onNotification(task, notificator))); } @Override @@ -717,8 +727,8 @@ public class GanttDiagramGraph> implements return create(task, EMPTY_NOTIFICATOR); } - private IDependenciesEnforcerHook onEntrance(final V task) { - return new IDependenciesEnforcerHook() { + private IDependenciesEnforcer onEntrance(final V task) { + return new IDependenciesEnforcer() { public void setStartDate(GanttDate previousStart, GanttDate previousEnd, GanttDate newStart) { @@ -733,9 +743,9 @@ public class GanttDiagramGraph> implements }; } - private IDependenciesEnforcerHook onNotification(final V task, + private IDependenciesEnforcer onNotification(final V task, final INotificationAfterDependenciesEnforcement notification) { - return new IDependenciesEnforcerHook() { + return new IDependenciesEnforcer() { @Override public void setStartDate(GanttDate previousStart, @@ -757,11 +767,33 @@ public class GanttDiagramGraph> implements } - private IDependenciesEnforcerHook onlyEnforceDependenciesOnEntrance( - final IDependenciesEnforcerHook onEntrance, - final IDependenciesEnforcerHook notification) { + private IDependenciesEnforcerHook withPositionPotentiallyModified( + final V task, final IDependenciesEnforcer enforcer) { return new IDependenciesEnforcerHook() { + @Override + public void setStartDate(GanttDate previousStart, + GanttDate previousEnd, GanttDate newStart) { + enforcer.setStartDate(previousStart, previousEnd, newStart); + } + + @Override + public void setNewEnd(GanttDate previousEnd, GanttDate newEnd) { + enforcer.setNewEnd(previousEnd, newEnd); + } + + @Override + public void positionPotentiallyModified() { + taskPositionModified(task); + } + }; + } + + private IDependenciesEnforcer onlyEnforceDependenciesOnEntrance( + final IDependenciesEnforcer onEntrance, + final IDependenciesEnforcer notification) { + return new IDependenciesEnforcer() { + @Override public void setStartDate(final GanttDate previousStart, final GanttDate previousEnd, final GanttDate newStart) { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java index ea2cdb1bd..b1f9788a6 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java @@ -85,7 +85,8 @@ public abstract class Task implements ITaskFundamentalProperties { private ConstraintViolationNotificator violationNotificator = ConstraintViolationNotificator .create(); - private IDependenciesEnforcerHook dependenciesEnforcerHook = GanttDiagramGraph.doNothingHook(); + private IDependenciesEnforcerHook dependenciesEnforcerHook = GanttDiagramGraph + .doNothingHook(); private final INotificationAfterDependenciesEnforcement notifyDates = new INotificationAfterDependenciesEnforcement() { @@ -258,11 +259,8 @@ public abstract class Task implements ITaskFundamentalProperties { Validate.notNull(dependenciesEnforcerHook); } - public void fireChangesForPreviousValues(GanttDate previousStart, - GanttDate previousEnd) { - dependenciesEnforcerHook.setStartDate(previousStart, previousStart, - fundamentalProperties.getBeginDate()); - dependenciesEnforcerHook.setNewEnd(previousEnd, getEndDate()); + public void enforceDependenciesDueToPositionPotentiallyModified() { + dependenciesEnforcerHook.positionPotentiallyModified(); } public GanttDate getBeginDate() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationModel.java index 433c5dfad..bfd8d0e46 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationModel.java @@ -188,12 +188,9 @@ public class ResourceAllocationModel implements IResourceAllocationModel { private > T applyDateChangesNotificationIfNoFlags( IOnTransaction allocationDoer) { org.zkoss.ganttz.data.Task ganttTask = context.getTask(); - GanttDate previousStartDate = ganttTask.getBeginDate(); - GanttDate previousEnd = ganttTask.getEndDate(); T result = transactionService.runOnReadOnlyTransaction(allocationDoer); if (!result.isFlagged()) { - ganttTask.fireChangesForPreviousValues(previousStartDate, - previousEnd); + ganttTask.enforceDependenciesDueToPositionPotentiallyModified(); } return result; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java index 09e4c1d9a..f08e345ee 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java @@ -138,8 +138,6 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { public void accept() { if (context != null && orderElement != null && isVisibleAdvances()) { org.zkoss.ganttz.data.Task ganttTask = context.getTask(); - GanttDate previousStartDate = ganttTask.getBeginDate(); - GanttDate previousEnd = ganttTask.getEndDate(); createConsolidationIfNeeded(); @@ -153,8 +151,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { updateConsolidationInAdvanceIfIsNeeded(); - ganttTask.fireChangesForPreviousValues(previousStartDate, - previousEnd); + ganttTask.enforceDependenciesDueToPositionPotentiallyModified(); ganttTask.reloadResourcesText(); context.reloadCharts(); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/limiting/allocation/LimitingResourceAllocationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/limiting/allocation/LimitingResourceAllocationModel.java index 995ac2d5f..e48970975 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/limiting/allocation/LimitingResourceAllocationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/limiting/allocation/LimitingResourceAllocationModel.java @@ -383,11 +383,8 @@ public class LimitingResourceAllocationModel implements ILimitingResourceAllocat IOnTransaction allocationDoer) { if (context != null) { org.zkoss.ganttz.data.Task ganttTask = context.getTask(); - GanttDate previousStartDate = ganttTask.getBeginDate(); - GanttDate previousEnd = ganttTask.getEndDate(); transactionService.runOnReadOnlyTransaction(allocationDoer); - ganttTask.fireChangesForPreviousValues(previousStartDate, - previousEnd); + ganttTask.enforceDependenciesDueToPositionPotentiallyModified(); } else { // Update hours of a Task from Limiting Resource view transactionService.runOnReadOnlyTransaction(allocationDoer); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java index 23ea42245..8fb86529e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/SubcontractModel.java @@ -115,13 +115,10 @@ public class SubcontractModel implements ISubcontractModel { } private void recalculateTaskLength() { - GanttDate previousStartDate = ganttTask.getBeginDate(); - GanttDate previousEnd = ganttTask.getEndDate(); - task.setStartDate(startDate); task.setEndDate(endDate); - ganttTask.fireChangesForPreviousValues(previousStartDate, previousEnd); + ganttTask.enforceDependenciesDueToPositionPotentiallyModified(); } @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/reassign/ReassignCommand.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/reassign/ReassignCommand.java index 937050874..9848e7af8 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/reassign/ReassignCommand.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/reassign/ReassignCommand.java @@ -167,15 +167,11 @@ public class ReassignCommand implements IReassignCommand { final int total = reassignations.size(); for (final WithAssociatedEntity each : reassignations) { Task ganttTask = each.ganntTask; - final GanttDate previousBeginDate = ganttTask - .getBeginDate(); - final GanttDate previousEnd = ganttTask.getEndDate(); transactionService .runOnReadOnlyTransaction(reassignmentTransaction(each)); diagramGraph.enforceRestrictions(each.ganntTask); - ganttTask.fireChangesForPreviousValues(previousBeginDate, - previousEnd); + ganttTask.enforceDependenciesDueToPositionPotentiallyModified(); updater.doUpdate(showCompleted(i, total)); i++; }