ItEr16S12CreacionProxectoPlanificacion: Implementing algorithm for turning OrderElements into TaskElements.

This commit is contained in:
Óscar González Fernández 2009-07-08 21:27:10 +02:00 committed by Javier Moran Rua
parent 980877ea76
commit 5fdc8ee410
3 changed files with 156 additions and 0 deletions

View file

@ -1,5 +1,6 @@
package org.navalplanner.business.planner.services;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.planner.entities.TaskElement;
/**
@ -11,4 +12,10 @@ public interface ITaskElementService {
TaskElement findById(Long id);
/**
* @param order
* @return
*/
TaskElement convertToInitialSchedule(OrderElement order);
}

View file

@ -1,8 +1,14 @@
package org.navalplanner.business.planner.services;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.planner.daos.ITaskElementDao;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -34,4 +40,50 @@ public class TaskElementService implements ITaskElementService {
}
}
@Override
public TaskElement convertToInitialSchedule(OrderElement order) {
if (order instanceof OrderLineGroup) {
OrderLineGroup group = (OrderLineGroup) order;
return convertToTaskGroup(group);
} else {
OrderLine line = (OrderLine) order;
if (line.getHoursGroups().isEmpty())
throw new IllegalArgumentException(
"the line must have at least one "
+ HoursGroup.class.getSimpleName()
+ " associated");
return line.getHoursGroups().size() > 1 ? convertToTaskGroup(line)
: convertToTask(line);
}
}
private TaskGroup convertToTaskGroup(OrderLine line) {
TaskGroup result = new TaskGroup();
result.setOrderElement(line);
for (HoursGroup hoursGroup : line.getHoursGroups()) {
result.addTaskElement(taskFrom(line, hoursGroup));
}
return result;
}
private Task convertToTask(OrderLine line) {
HoursGroup hoursGroup = line.getHoursGroups().get(0);
return taskFrom(line, hoursGroup);
}
private Task taskFrom(OrderLine line, HoursGroup hoursGroup) {
Task result = Task.createTask(hoursGroup);
result.setOrderElement(line);
return result;
}
private TaskGroup convertToTaskGroup(OrderLineGroup group) {
TaskGroup result = new TaskGroup();
result.setOrderElement(group);
for (OrderElement orderElement : group.getChildren()) {
result.addTaskElement(convertToInitialSchedule(orderElement));
}
return result;
}
}

View file

@ -2,6 +2,7 @@ package org.navalplanner.business.test.planner.services;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@ -14,11 +15,14 @@ import java.util.List;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.junit.matchers.JUnitMatchers;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.entities.Dependency;
import org.navalplanner.business.planner.entities.Task;
@ -166,4 +170,97 @@ public class TaskElementServiceTest {
assertTrue(reloaded.getTaskElements().get(1)
.getDependenciesWithThisOrigin().isEmpty());
}
@Test
public void aOrderLineGroupIsConvertedToATaskGroup() {
OrderLineGroup orderLineGroup = new OrderLineGroup();
orderLineGroup.setName("foo");
TaskElement task = taskElementService
.convertToInitialSchedule(orderLineGroup);
assertThat(task, is(TaskGroup.class));
TaskGroup group = (TaskGroup) task;
assertThat(group.getOrderElement(),
equalTo((OrderElement) orderLineGroup));
}
@Test
public void aOrderLineWithOneHourIsConvertedToATask() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
HoursGroup hoursGroup = createHoursGroup(30);
orderLine.addHoursGroup(hoursGroup);
TaskElement taskElement = taskElementService
.convertToInitialSchedule(orderLine);
assertThat(taskElement, is(Task.class));
Task group = (Task) taskElement;
assertThat(group.getOrderElement(), equalTo((OrderElement) orderLine));
assertThat(group.getHoursGroup(), equalTo(hoursGroup));
}
@Test
public void theSublinesOfAnOrderLineGroupAreConverted() {
OrderLineGroup orderLineGroup = new OrderLineGroup();
orderLineGroup.setName("foo");
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
HoursGroup hoursGroup = createHoursGroup(30);
orderLine.addHoursGroup(hoursGroup);
orderLineGroup.add(orderLine);
TaskElement task = taskElementService
.convertToInitialSchedule(orderLineGroup);
assertThat(task, is(TaskGroup.class));
TaskGroup group = (TaskGroup) task;
assertThat(group.getOrderElement(),
equalTo((OrderElement) orderLineGroup));
assertThat(group.getTaskElements().size(), equalTo(1));
assertThat(group.getTaskElements().get(0).getOrderElement(),
equalTo((OrderElement) orderLine));
}
@Test(expected = IllegalArgumentException.class)
public void aOrderLineWithNoHoursIsRejected() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
taskElementService.convertToInitialSchedule(orderLine);
}
private HoursGroup createHoursGroup(int hours) {
HoursGroup result = new HoursGroup();
result.setWorkingHours(hours);
return result;
}
@Test
public void aOrderLineWithMoreThanOneHourIsConvertedToATaskGroup() {
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
HoursGroup hours1 = createHoursGroup(30);
orderLine.addHoursGroup(hours1);
HoursGroup hours2 = createHoursGroup(10);
orderLine.addHoursGroup(hours2);
TaskElement taskElement = taskElementService
.convertToInitialSchedule(orderLine);
assertThat(taskElement, is(TaskGroup.class));
TaskGroup group = (TaskGroup) taskElement;
assertThat(group.getOrderElement(), equalTo((OrderElement) orderLine));
assertThat(group.getTaskElements().size(), equalTo(2));
Task child1 = (Task) group.getTaskElements().get(0);
Task child2 = (Task) group.getTaskElements().get(1);
assertThat(child1.getOrderElement(), equalTo((OrderElement) orderLine));
assertThat(child2.getOrderElement(), equalTo((OrderElement) orderLine));
assertThat(child1.getHoursGroup(), not(equalTo(child2.getHoursGroup())));
assertThat(child1.getHoursGroup(), JUnitMatchers
.either(equalTo(hours1)).or(equalTo(hours2)));
assertThat(child2.getHoursGroup(), JUnitMatchers
.either(equalTo(hours1)).or(equalTo(hours2)));
}
}