From 0d7c88f1cda0f31f09103e73eb3e20dbd24db9cf Mon Sep 17 00:00:00 2001 From: Alba Carro Date: Fri, 24 Aug 2012 23:54:31 +0200 Subject: [PATCH] Import project web ui Implements a page with a browse button to select a file to import. Modifies CustomMenuControler to show the import option. FEA: ItEr77S05BasicProjectImport --- libreplan-webapp/pom.xml | 5 + .../web/common/CustomMenuController.java | 3 + .../imports/ProjectImportController.java | 95 +++++++++++++++++++ .../webapp/orders/imports/projectImport.zul | 42 ++++++++ pom.xml | 6 ++ 5 files changed, 151 insertions(+) create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/orders/imports/ProjectImportController.java create mode 100644 libreplan-webapp/src/main/webapp/orders/imports/projectImport.zul diff --git a/libreplan-webapp/pom.xml b/libreplan-webapp/pom.xml index f2e055ed4..2326f109d 100644 --- a/libreplan-webapp/pom.xml +++ b/libreplan-webapp/pom.xml @@ -448,5 +448,10 @@ br.com.digilabs.jqplot jqplot4java + + + commons-io + commons-io + diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java index 18bfd0956..626ebb88a 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/CustomMenuController.java @@ -273,6 +273,9 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { globalView.goToOrdersList(); } }, "01-introducion.html#id2")); + // In order of see the Import project option in the menu + planningItems.add(subItem(_("Import project"), + "/orders/imports/projectImport.zul", "")); } if (SecurityUtils.isSuperuserOrUserInRoles(UserRole.ROLE_PLANNING)) { planningItems.add(subItem(_("Resources Load"), new ICapture() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/imports/ProjectImportController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/imports/ProjectImportController.java new file mode 100644 index 000000000..4584e4446 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/imports/ProjectImportController.java @@ -0,0 +1,95 @@ +package org.libreplan.web.orders.imports; + +import static org.libreplan.web.I18nHelper._; + +import java.io.InputStream; + +import org.libreplan.business.orders.imports.OrderImporter; +import org.libreplan.web.common.IMessagesForUser; +import org.libreplan.web.common.Level; +import org.libreplan.web.common.MessagesForUser; +import org.springframework.transaction.annotation.Transactional; +import org.zkoss.util.media.Media; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.util.GenericForwardComposer; + +/** + * Controller for import projects + * + * @author Alba Carro Pérez + */ +public class ProjectImportController extends GenericForwardComposer { + + /** + * OrderImporter service. + */ + private OrderImporter orderImporterMPXJ; + + private IMessagesForUser messages; + + private Component messagesContainer; + + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + comp.setAttribute("projectImportController", this); + messages = new MessagesForUser(messagesContainer); + } + + /** + * Method called when the onUpload event happens. + * + * @param Media + * Media to be imported. + */ + public void importProject(Media media) { + + String file = media.getName(); + + if (checkFileFormat(file)) { + + importProject(media.getStreamData(), file); + + messages.showMessage(Level.INFO, _(file + ": Import successfully!")); + + } else { + messages.showMessage(Level.ERROR, + _("The only current suported formats are mpp and planner.")); + } + + } + + /** + * Imports an InputStream. + * + * @param streamData + * InputStream with the data that is going to be imported. + * @param file + * Name of the file that we want to import. + * @return boolean True if the streamData was imported, false if not. + */ + @Transactional + private void importProject(InputStream streamData, String file) { + + orderImporterMPXJ.storeOrder(orderImporterMPXJ + .convertImportDataToOrder(orderImporterMPXJ.getImportData( + streamData, file))); + + } + + /** + * Checks that the file has the correct format (.mpp or .planner). + * + * @param file + * Name of the file. + * @return boolean True if is correct, false if not. + */ + private boolean checkFileFormat(String file) { + + if (file.matches("(?i).*mpp") | file.matches("(?i).*planner")) { + return true; + } + + return false; + } + +} diff --git a/libreplan-webapp/src/main/webapp/orders/imports/projectImport.zul b/libreplan-webapp/src/main/webapp/orders/imports/projectImport.zul new file mode 100644 index 000000000..1aa3459bb --- /dev/null +++ b/libreplan-webapp/src/main/webapp/orders/imports/projectImport.zul @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + +