forked from LupusNobilis/java-org.hwo.ui
70 lines
1.6 KiB
Java
70 lines
1.6 KiB
Java
package org.hwo.ui.gantt;
|
|
|
|
import org.hwo.datetime.DateTime;
|
|
|
|
public class GanttResolver {
|
|
JGantt gantt;
|
|
|
|
public GanttResolver(JGantt gantt) {
|
|
this.gantt = gantt;
|
|
|
|
}
|
|
|
|
/* Optimieren links: (Einsetzen)
|
|
*
|
|
* Schneidendes Objekt bei startTime finden, startTime korrigieren, wiederholen für abhängige in gleicher resource
|
|
*
|
|
*
|
|
*/
|
|
public void leftOptimize(IGanttObject object){
|
|
|
|
for (IGanttResource resource: object.getResources()){
|
|
IGanttObject o = gantt.findObjectAt(resource, object.getStartTime());
|
|
|
|
if (o != null){
|
|
DateTime dt = o.getEndTime();
|
|
dt.addSeconds(1);
|
|
|
|
System.err.println(String.format("Resolver: Move Start Time of %s from %s to %s after end of %s",object.toString(),object.getStartTime(),dt.toString(),o.toString()));
|
|
|
|
object.setStartTime(dt);
|
|
|
|
for (IGanttObject dobj: gantt.findDependedObjects(o, resource)){
|
|
leftOptimize(dobj);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/* Optimieren rechts: (Verschieben)
|
|
*
|
|
* Objekte mit StartTime innerhalb finden, und nach rechts verschieben
|
|
*
|
|
*
|
|
*/
|
|
public void rightOptimize(IGanttObject object){
|
|
|
|
for (IGanttResource resource: object.getResources()){
|
|
IGanttObject o = gantt.findObjectAt(resource, object.getStartTime());
|
|
|
|
if (o != null){
|
|
DateTime dt = o.getEndTime();
|
|
dt.addSeconds(1);
|
|
|
|
System.err.println(String.format("Resolver: Move Start Time of %s from %s to %s after end of %s",object.toString(),object.getStartTime(),dt.toString(),o.toString()));
|
|
|
|
object.setStartTime(dt);
|
|
|
|
for (IGanttObject dobj: gantt.findDependedObjects(o, resource)){
|
|
leftOptimize(dobj);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|