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:
parent
062e7319f6
commit
c821902fa1
3 changed files with 162 additions and 5 deletions
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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,10 +33,13 @@ 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
|
||||||
planner.setConfiguration(configuration);
|
public void use(PlannerConfiguration<TaskElement> configuration) {
|
||||||
|
planner.setConfiguration(configuration);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerPlanner(Planner planner) {
|
public void registerPlanner(Planner planner) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue