ItEr33S14CUCreacionUnidadesPlanificacion: Dependencies now return the constraints they apply
This commit is contained in:
parent
d089a52d10
commit
0622d0bb1d
2 changed files with 105 additions and 1 deletions
|
|
@ -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<Constraint<Date>> toConstraints(Task source,
|
||||
DependencyType type) {
|
||||
return type.getStartConstraints(source);
|
||||
}
|
||||
},
|
||||
END {
|
||||
@Override
|
||||
public List<Constraint<Date>> toConstraints(Task source,
|
||||
DependencyType type) {
|
||||
return type.getEndConstraints(source);
|
||||
}
|
||||
};
|
||||
|
||||
abstract List<Constraint<Date>> toConstraints(Task source,
|
||||
DependencyType type);
|
||||
}
|
||||
|
||||
public static List<Constraint<Date>> getStartConstraints(
|
||||
Collection<Dependency> dependencies) {
|
||||
return getConstraintsFor(dependencies, Calculation.START);
|
||||
}
|
||||
|
||||
public static List<Constraint<Date>> getEndConstraints(
|
||||
Collection<Dependency> incoming) {
|
||||
return getConstraintsFor(incoming, Calculation.END);
|
||||
}
|
||||
|
||||
private static List<Constraint<Date>> getConstraintsFor(
|
||||
Collection<Dependency> dependencies, Calculation calculation) {
|
||||
List<Constraint<Date>> result = new ArrayList<Constraint<Date>>();
|
||||
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<? extends Dependency> dependencies) {
|
||||
Date result = null;
|
||||
|
|
@ -68,6 +107,11 @@ public class Dependency {
|
|||
return result;
|
||||
}
|
||||
|
||||
private List<Constraint<Date>> toConstraints(
|
||||
Calculation calculation) {
|
||||
return calculation.toConstraints(source, type);
|
||||
}
|
||||
|
||||
private final Task source;
|
||||
|
||||
private final Task destination;
|
||||
|
|
|
|||
|
|
@ -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<Constraint<Date>> getEndConstraints(Task source) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Constraint<Date>> 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<Constraint<Date>> getStartConstraints(Task source) {
|
||||
return Collections.singletonList(biggerThanTaskEndDate(source));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Constraint<Date>> 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<Constraint<Date>> getEndConstraints(Task source) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Constraint<Date>> 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<Constraint<Date>> getEndConstraints(Task source) {
|
||||
return Collections.singletonList(biggerThanTaskEndDate(source));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Constraint<Date>> getStartConstraints(Task source) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
};
|
||||
|
||||
protected Constraint<Date> biggerThanTaskEndDate(Task source) {
|
||||
return DateConstraint.biggerOrEqualThan(source.getEndDate());
|
||||
}
|
||||
|
||||
protected Constraint<Date> 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<Constraint<Date>> getStartConstraints(Task source);
|
||||
|
||||
public abstract List<Constraint<Date>> getEndConstraints(Task source);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue