From 0622d0bb1d75ddd31cb053ac3caf5b7dcb41ba17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sat, 7 Nov 2009 15:54:38 +0100 Subject: [PATCH] ItEr33S14CUCreacionUnidadesPlanificacion: Dependencies now return the constraints they apply --- .../org/zkoss/ganttz/data/Dependency.java | 46 +++++++++++++- .../org/zkoss/ganttz/data/DependencyType.java | 60 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Dependency.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Dependency.java index 08d9bc690..3e1f68524 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Dependency.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Dependency.java @@ -20,11 +20,14 @@ package org.zkoss.ganttz.data; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.List; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; +import org.zkoss.ganttz.data.constraint.Constraint; /** * This class represents a dependency. Contains the source and the destination. @@ -34,7 +37,42 @@ import org.apache.commons.lang.builder.HashCodeBuilder; public class Dependency { private enum Calculation { - START, END; + START { + @Override + public List> toConstraints(Task source, + DependencyType type) { + return type.getStartConstraints(source); + } + }, + END { + @Override + public List> toConstraints(Task source, + DependencyType type) { + return type.getEndConstraints(source); + } + }; + + abstract List> toConstraints(Task source, + DependencyType type); + } + + public static List> getStartConstraints( + Collection dependencies) { + return getConstraintsFor(dependencies, Calculation.START); + } + + public static List> getEndConstraints( + Collection incoming) { + return getConstraintsFor(incoming, Calculation.END); + } + + private static List> getConstraintsFor( + Collection dependencies, Calculation calculation) { + List> result = new ArrayList>(); + for (Dependency dependency : dependencies) { + result.addAll(dependency.toConstraints(calculation)); + } + return result; } public static Date calculateStart(Task origin, Date current, @@ -47,6 +85,7 @@ public class Dependency { return apply(Calculation.END, origin, current, depencencies); } + private static Date apply(Calculation calculation, Task origin, Date current, Collection dependencies) { Date result = null; @@ -68,6 +107,11 @@ public class Dependency { return result; } + private List> toConstraints( + Calculation calculation) { + return calculation.toConstraints(source, type); + } + private final Task source; private final Task destination; diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/DependencyType.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/DependencyType.java index 3c2ca87c4..e01c30408 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/DependencyType.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/DependencyType.java @@ -20,7 +20,12 @@ package org.zkoss.ganttz.data; +import java.util.Collections; import java.util.Date; +import java.util.List; + +import org.zkoss.ganttz.data.constraint.Constraint; +import org.zkoss.ganttz.data.constraint.DateConstraint; /** * This enum tells the type of a depepdency. Each instance contanins the correct @@ -40,6 +45,17 @@ public enum DependencyType { Date current) { return current; } + + @Override + public List> getEndConstraints(Task source) { + return Collections.emptyList(); + } + + @Override + public List> getStartConstraints(Task source) { + return Collections.emptyList(); + } + }, END_START { @Override @@ -52,6 +68,17 @@ public enum DependencyType { Date current) { return getBigger(originalTask.getEndDate(), current); } + + @Override + public List> getStartConstraints(Task source) { + return Collections.singletonList(biggerThanTaskEndDate(source)); + } + + @Override + public List> getEndConstraints(Task source) { + return Collections.emptyList(); + } + }, START_START { @@ -64,6 +91,16 @@ public enum DependencyType { public Date calculateStartDestinyTask(Task originTask, Date current) { return getBigger(originTask.getBeginDate(), current); } + + @Override + public List> getEndConstraints(Task source) { + return Collections.emptyList(); + } + + @Override + public List> getStartConstraints(Task source) { + return Collections.singletonList(biggerThanTaskStartDate(source)); + } }, END_END { @@ -76,8 +113,27 @@ public enum DependencyType { public Date calculateStartDestinyTask(Task originTask, Date current) { return current; } + + @Override + public List> getEndConstraints(Task source) { + return Collections.singletonList(biggerThanTaskEndDate(source)); + } + + @Override + public List> getStartConstraints(Task source) { + return Collections.emptyList(); + } }; + protected Constraint biggerThanTaskEndDate(Task source) { + return DateConstraint.biggerOrEqualThan(source.getEndDate()); + } + + protected Constraint biggerThanTaskStartDate(Task source) { + return DateConstraint + .biggerOrEqualThan(source.getBeginDate()); + } + private static Date getBigger(Date date1, Date date2) { if (date1.before(date2)) { return date2; @@ -90,4 +146,8 @@ public enum DependencyType { public abstract Date calculateStartDestinyTask(Task originTask, Date current); + + public abstract List> getStartConstraints(Task source); + + public abstract List> getEndConstraints(Task source); }