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 baed8c1c4..087a0cfdf 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -1043,6 +1043,23 @@ public class GanttDiagramGraph> implements abstract class PositionRestrictions { + private final GanttDate start; + + private final GanttDate end; + + PositionRestrictions(GanttDate start, GanttDate end) { + this.start = start; + this.end = end; + } + + GanttDate getStart() { + return start; + } + + GanttDate getEnd() { + return end; + } + abstract List> getStartConstraints(); abstract List> getEndConstraints(); @@ -1053,6 +1070,12 @@ public class GanttDiagramGraph> implements private final class NoRestrictions extends PositionRestrictions { + + public NoRestrictions(TaskPoint taskPoint) { + super(adapter.getStartDate(taskPoint.task), adapter + .getEndDateFor(taskPoint.task)); + } + @Override List> getStartConstraints() { return Collections.emptyList(); @@ -1067,10 +1090,11 @@ public class GanttDiagramGraph> implements boolean satisfies(PositionRestrictions restrictions) { return true; } + } PositionRestrictions noRestrictions() { - return new NoRestrictions(); + return new NoRestrictions(taskPoint); } DatesBasedPositionRestrictions biggerThan(GanttDate start, GanttDate end) { @@ -1089,14 +1113,11 @@ public class GanttDiagramGraph> implements private Constraint startConstraint; private Constraint endConstraint; - private final GanttDate start; - private final GanttDate end; public DatesBasedPositionRestrictions( ComparisonType comparisonType, GanttDate start, GanttDate end) { - this.start = start; - this.end = end; + super(start, end); this.startConstraint = ConstraintOnComparableValues .instantiate(comparisonType, start); this.endConstraint = ConstraintOnComparableValues.instantiate( @@ -1112,8 +1133,8 @@ public class GanttDiagramGraph> implements } private boolean satisfies(DatesBasedPositionRestrictions other) { - return startConstraint.isSatisfiedBy(other.start) - && endConstraint.isSatisfiedBy(other.end); + return startConstraint.isSatisfiedBy(other.getStart()) + && endConstraint.isSatisfiedBy(other.getEnd()); } @Override @@ -1163,7 +1184,7 @@ public class GanttDiagramGraph> implements this.task = taskPoint.task; } - private PositionRestrictions resultingRestrictions = new NoRestrictions(); + private PositionRestrictions resultingRestrictions = noRestrictions(); protected PositionRestrictions applyConstraintTo( PositionRestrictions restrictions) { @@ -1180,17 +1201,8 @@ public class GanttDiagramGraph> implements public void checkSatisfiesResult(PositionRestrictions finalResult) { super.checkSatisfiesResult(finalResult); - if (DatesBasedPositionRestrictions.class - .isInstance(finalResult)) { - checkConstraintsAgainst(DatesBasedPositionRestrictions.class - .cast(finalResult)); - } - } - - private void checkConstraintsAgainst( - DatesBasedPositionRestrictions finalResult) { - checkStartConstraints(finalResult.start); - checkEndConstraints(finalResult.end); + checkStartConstraints(finalResult.getStart()); + checkEndConstraints(finalResult.getEnd()); } private void checkStartConstraints(GanttDate finalStart) { @@ -1198,7 +1210,6 @@ public class GanttDiagramGraph> implements .checkSatisfyResult(getStartConstraints(), finalStart); } - private void checkEndConstraints(GanttDate finalEnd) { Constraint.checkSatisfyResult(getEndConstraints(), finalEnd); }