ItEr16S12CreacionProxectoPlanificacion: Implementing algorithm for turning OrderElements into TaskElements.
This commit is contained in:
parent
980877ea76
commit
5fdc8ee410
3 changed files with 156 additions and 0 deletions
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue