ItEr33S14CUCreacionUnidadesPlanificacion: Dependencies now return the constraints they apply

This commit is contained in:
Óscar González Fernández 2009-11-07 15:54:38 +01:00
parent d089a52d10
commit 0622d0bb1d
2 changed files with 105 additions and 1 deletions

View file

@ -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;

View file

@ -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);
}