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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index ea43979b8..ff84958e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -761,6 +761,12 @@
mpxj
4.3.0
+
+
+ commons-io
+ commons-io
+ 1.4
+