ItEr17S10CUCreacionProxectoPlanificacionItEr16S12: Simple adaptation of TaskElements to the planner.

Javier Moran Rua <jmoran@igalia.com>: Removed
navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderPlanningModel.java, not necessary.
This commit is contained in:
Óscar González Fernández 2009-07-16 10:41:02 +02:00 committed by Javier Moran Rua
parent 062e7319f6
commit c821902fa1
3 changed files with 162 additions and 5 deletions

View file

@ -0,0 +1,19 @@
package org.navalplanner.web.planner;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.TaskElement;
import org.zkoss.ganttz.adapters.PlannerConfiguration;
/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public interface IOrderPlanningModel {
public interface ConfigurationOnTransaction {
public void use(PlannerConfiguration<TaskElement> configuration);
}
void createConfiguration(Order order,
ConfigurationOnTransaction onTransaction);
}

View file

@ -1,15 +1,16 @@
package org.navalplanner.web.planner; package org.navalplanner.web.planner;
import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry; import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry;
import org.navalplanner.web.common.entrypoints.URLHandler; import org.navalplanner.web.common.entrypoints.URLHandler;
import org.navalplanner.web.planner.IOrderPlanningModel.ConfigurationOnTransaction;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.zkoss.ganttz.Planner; import org.zkoss.ganttz.Planner;
import org.zkoss.ganttz.adapters.PlannerConfiguration; import org.zkoss.ganttz.adapters.PlannerConfiguration;
import org.zkoss.ganttz.util.ITaskFundamentalProperties;
/** /**
* @author Óscar González Fernández <ogonzalez@igalia.com> * @author Óscar González Fernández <ogonzalez@igalia.com>
@ -22,6 +23,9 @@ public class OrderPlanningController implements
@Autowired @Autowired
private IURLHandlerRegistry urlHandlerRegistry; private IURLHandlerRegistry urlHandlerRegistry;
@Autowired
private IOrderPlanningModel model;
private Planner planner; private Planner planner;
public OrderPlanningController() { public OrderPlanningController() {
@ -29,11 +33,14 @@ public class OrderPlanningController implements
@Override @Override
public void showSchedule(Order order) { public void showSchedule(Order order) {
PlannerConfiguration<ITaskFundamentalProperties> configuration = new DataForPlanner() model.createConfiguration(order, new ConfigurationOnTransaction() {
.getMediumLoad();
// TODO just for trying passing medium load @Override
public void use(PlannerConfiguration<TaskElement> configuration) {
planner.setConfiguration(configuration); planner.setConfiguration(configuration);
} }
});
}
public void registerPlanner(Planner planner) { public void registerPlanner(Planner planner) {
this.planner = planner; this.planner = planner;

View file

@ -0,0 +1,131 @@
package org.navalplanner.web.planner;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.entities.Dependency;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.Dependency.Type;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.ganttz.adapters.DomainDependency;
import org.zkoss.ganttz.adapters.IAdapterToTaskFundamentalProperties;
import org.zkoss.ganttz.adapters.IStructureNavigator;
import org.zkoss.ganttz.adapters.PlannerConfiguration;
import org.zkoss.ganttz.util.DefaultFundamentalProperties;
import org.zkoss.ganttz.util.DependencyType;
import org.zkoss.ganttz.util.ITaskFundamentalProperties;
/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class OrderPlanningModel implements IOrderPlanningModel {
@Autowired
private IOrderService orderService;
private final class TaskElementToFundamentalProperties implements
IAdapterToTaskFundamentalProperties<TaskElement> {
private final Order order;
private TaskElementToFundamentalProperties(Order order) {
this.order = order;
}
@Override
public ITaskFundamentalProperties adapt(final TaskElement taskElement) {
// FIXME We'll need a custom ITaskFundamentalProperties
// implementation to edit the taskElement
DefaultFundamentalProperties result = new DefaultFundamentalProperties();
result.setName(taskElement.getOrderElement().getName());
result
.setBeginDate(taskElement.getStartDate() != null ? taskElement
.getStartDate()
: order.getInitDate());
OrderElement orderElement = taskElement.getOrderElement();
Integer workHours = orderElement.getWorkHours();
result.setLengthMilliseconds(workHours * 3600l * 1000);
result.setNotes(null);
return result;
}
@Override
public List<DomainDependency<TaskElement>> getDependenciesOriginating(
TaskElement taskElement) {
Set<Dependency> dependenciesWithThisOrigin = taskElement
.getDependenciesWithThisOrigin();
List<DomainDependency<TaskElement>> result = new ArrayList<DomainDependency<TaskElement>>();
for (Dependency dependency : dependenciesWithThisOrigin) {
result.add(DomainDependency.createDependency(taskElement,
dependency.getDestination(), toGanntType(dependency
.getType())));
}
return result;
}
private DependencyType toGanntType(Type type) {
switch (type) {
case END_START:
return DependencyType.END_START;
case START_START:
return DependencyType.START_START;
case END_END:
return DependencyType.END_END;
case START_END:
default:
throw new RuntimeException(type + " not supported yet");
}
}
}
private final class TaskElementNavigator implements
IStructureNavigator<TaskElement> {
@Override
public List<TaskElement> getChildren(TaskElement object) {
return object.getChildren();
}
@Override
public boolean isLeaf(TaskElement object) {
return object.isLeaf();
}
}
@Transactional(readOnly = true)
public void createConfiguration(Order order,
ConfigurationOnTransaction onTransaction) {
Order orderReloaded = reload(order);
if (!orderReloaded.isSomeTaskElementScheduled())
throw new IllegalArgumentException("the order " + order
+ " must be scheduled");
onTransaction.use(createConfiguration(orderReloaded));
}
private PlannerConfiguration<TaskElement> createConfiguration(
Order orderReloaded) {
return new PlannerConfiguration<TaskElement>(
new TaskElementToFundamentalProperties(orderReloaded),
new TaskElementNavigator(), orderReloaded.getAssociatedTasks());
}
private Order reload(Order order) {
try {
return orderService.find(order.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
}
}