Import tasks and its dates

Creates and stores the TaskSources and Tasks needed to import the data.

FEA: ItEr77S05BasicProjectImport
This commit is contained in:
Alba Carro 2012-08-29 17:51:25 +02:00 committed by Manuel Rego Casasnovas
parent 184f27d0c0
commit 5f514ef913
3 changed files with 170 additions and 14 deletions

View file

@ -22,6 +22,7 @@ package org.libreplan.importers;
import java.io.InputStream;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.planner.entities.TaskGroup;
/**
* Contract for the {@link OrderImporterMPXJ}.
@ -54,12 +55,24 @@ public interface IOrderImporter {
public Order convertImportDataToOrder(OrderDTO project);
/**
* Saves a {@link Order} which has all the data that we want to store in the
* database.
* Makes a {@link TaskGroup} from a {@link ImportData}.
*
* @param project
* ImportData to extract data from.
* @return TaskGroup with the data that we want.
*/
public TaskGroup createTask(OrderDTO project);
/**
* Saves a {@link Order} and a {@link TaskGroup} which has all the data that
* we want to store in the database.
*
* @param Order
* Order with the data.
*
* @param TaskGroup
* TaskGroup with the data.
*/
public void storeOrder(Order order);
public void storeOrder(Order order, TaskGroup taskGroup);
}

View file

@ -22,7 +22,6 @@ package org.libreplan.importers;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@ -36,10 +35,16 @@ import org.libreplan.business.common.daos.IConfigurationDAO;
import org.libreplan.business.common.daos.IEntitySequenceDAO;
import org.libreplan.business.common.entities.EntityNameEnum;
import org.libreplan.business.orders.daos.IOrderDAO;
import org.libreplan.business.orders.daos.IOrderElementDAO;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.orders.entities.OrderLine;
import org.libreplan.business.orders.entities.OrderLineGroup;
import org.libreplan.business.orders.entities.TaskSource;
import org.libreplan.business.planner.daos.ITaskElementDAO;
import org.libreplan.business.planner.daos.ITaskSourceDAO;
import org.libreplan.business.planner.entities.TaskElement;
import org.libreplan.business.planner.entities.TaskGroup;
import org.libreplan.business.scenarios.IScenarioManager;
import org.libreplan.business.scenarios.entities.OrderVersion;
import org.libreplan.business.scenarios.entities.Scenario;
@ -72,6 +77,15 @@ public class OrderImporterMPXJ implements IOrderImporter {
@Autowired
private IOrderDAO orderDAO;
@Autowired
private IOrderElementDAO orderElementDAO;
@Autowired
private ITaskElementDAO taskDAO;
@Autowired
private ITaskSourceDAO taskSourceDAO;
@Autowired
private IScenarioManager scenarioManager;
@ -167,7 +181,9 @@ public class OrderImporterMPXJ implements IOrderImporter {
orderElement.setName(project.name + ": " + project.hashCode());
orderElement.setCode(code);
orderElement.setInitDate(new Date());
orderElement.setInitDate(project.startDate);
project.order = (Order) orderElement;
((Order) orderElement).generateOrderElementCodes(entitySequenceDAO
.getNumberOfDigitsCode(EntityNameEnum.ORDER));
@ -203,8 +219,10 @@ public class OrderImporterMPXJ implements IOrderImporter {
}
} else {
orderElement = OrderLineGroup.createUnvalidated(UUID.randomUUID()
.toString());
orderElement.useSchedulingDataFor(orderVersion);
}
@ -221,24 +239,142 @@ public class OrderImporterMPXJ implements IOrderImporter {
}
orderElement.setName(task.name);
orderElement.setInitDate(new Date());
task.orderElement = orderElement;
return orderElement;
}
/**
* Saves an {@link Order} which has all the data that we want to store in
* the database.
* Creates a {@link TaskGroup} from a {@link ImportData}
*
* @param Order
* Order with the data.
* @param project
* ImportData to extract data from
*
* @return TaskGroup TaskGroup with the data extracted.
*/
@Override
@Transactional
public void storeOrder(final Order order) {
public TaskGroup createTask(OrderDTO project) {
Order order = project.order;
TaskSource taskSource = TaskSource.createForGroup(order
.getCurrentSchedulingDataForVersion());
TaskGroup taskGroup = taskSource
.createTaskGroupWithoutDatesInitializedAndLinkItToTaskSource();
BaseCalendar calendar = configurationDAO.getConfiguration()
.getDefaultCalendar();
taskGroup.setCalendar(calendar);
List<TaskElement> taskElements = new ArrayList<TaskElement>();
for (OrderElementDTO importTask : project.tasks) {
taskElements.add(createTask(importTask));
}
for (TaskElement taskElement : taskElements) {
taskGroup.addTaskElement(taskElement);
}
return taskGroup;
}
/**
* Private method.
*
* It makes a {@link TaskElement} from a {@link ImportTask}
*
* @param task
* ImportTask to extract data from.
*
* @return TaskElement TaskElement that represent the data.
*/
private TaskElement createTask(OrderElementDTO task) {
OrderElement orderElement = task.orderElement;
TaskElement taskElement;
TaskSource taskSource;
if (task.children.size() == 0) {
taskSource = TaskSource.create(
orderElement.getCurrentSchedulingDataForVersion(),
orderElement.getHoursGroups());
taskElement = taskSource
.createTaskWithoutDatesInitializedAndLinkItToTaskSource();
} else {
taskSource = TaskSource.createForGroup(orderElement
.getCurrentSchedulingDataForVersion());
taskElement = taskSource
.createTaskGroupWithoutDatesInitializedAndLinkItToTaskSource();
List<TaskElement> taskElements = new ArrayList<TaskElement>();
for (OrderElementDTO importTask : task.children) {
taskElements.add(createTask(importTask));
}
for (TaskElement childTaskElement : taskElements) {
((TaskGroup) taskElement).addTaskElement(childTaskElement);
}
}
taskElement.setStartDate(task.startDate);
taskElement.setEndDate(task.endDate);
return taskElement;
}
/**
* Saves an {@link Order} which has all the data that we want to store in
* the database. Also save all the related {@link TaskElement} and its
* {@link TaskSource}
*
* @param Order
* Order with the data.
* @param TaskGroup
* TaskGroup with the data. It also contains the link to the
* TaskSources.
*/
@Override
@Transactional
public void storeOrder(final Order order, final TaskGroup taskGroup) {
final List<TaskSource> taskSources = new ArrayList<TaskSource>();
taskSources.add(taskGroup.getTaskSource());
for (TaskElement taskElement : taskGroup.getAllChildren()) {
taskSources.add(taskElement.getTaskSource());
}
orderDAO.save(order);
taskDAO.save(taskGroup);
for (TaskSource taskSource : taskSources) {
taskSource.validate();
taskSourceDAO.save(taskSource);
}
}
}

View file

@ -4,7 +4,10 @@ import static org.libreplan.web.I18nHelper._;
import java.io.InputStream;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.planner.entities.TaskGroup;
import org.libreplan.importers.IOrderImporter;
import org.libreplan.importers.OrderDTO;
import org.libreplan.web.common.IMessagesForUser;
import org.libreplan.web.common.Level;
import org.libreplan.web.common.MessagesForUser;
@ -70,9 +73,13 @@ public class ProjectImportController extends GenericForwardComposer {
@Transactional
private void importProject(InputStream streamData, String file) {
orderImporterMPXJ.storeOrder(orderImporterMPXJ
.convertImportDataToOrder(orderImporterMPXJ.getImportData(
streamData, file)));
OrderDTO importData = orderImporterMPXJ.getImportData(streamData, file);
Order order = orderImporterMPXJ.convertImportDataToOrder(importData);
TaskGroup taskGroup = orderImporterMPXJ.createTask(importData);
orderImporterMPXJ.storeOrder(order, taskGroup);
}