diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporterController.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporterController.java index 3a1f39c..66adf4c 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporterController.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporterController.java @@ -278,6 +278,9 @@ public class StatAlgoImporterController { case SOFTWARE_PUBLISH: softwarePublish(); break; + case SOFTWARE_REPACKAGE: + softwareRepackage(); + break; case HELP: showHelp(); break; @@ -372,6 +375,11 @@ public class StatAlgoImporterController { pm.softwarePublish(); } + + private void softwareRepackage() { + pm.softwareRepackage(); + + } private void showCreateProjectDialog() { pm.createProject(); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java index 8c3158c..fa65fe5 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java @@ -645,6 +645,67 @@ public class ProjectManager { }); } + + public void softwareRepackage() { + if (project != null) { + final ConfirmMessageBox mb = new ConfirmMessageBox( + "Attention", + "This operation repackages the script only without recreating the Java software. The already deployed Java software will use the new script package. Do you want to proceed?"); + mb.addDialogHideHandler(new DialogHideHandler() { + + @Override + public void onDialogHide(DialogHideEvent event) { + switch (event.getHideButton()) { + case NO: + break; + case YES: + softwareRepackageOnServer(); + break; + default: + break; + } + + } + }); + mb.setWidth(300); + mb.show(); + + } else { + Log.error("Project not open: " + project); + UtilsGXT3.alert("Error", "Project not open!"); + } + + + } + + private void softwareRepackageOnServer() { + final StatAlgoImporterMonitor monitor = new StatAlgoImporterMonitor(); + StatAlgoImporterServiceAsync.INSTANCE + .repackageSoftware(new AsyncCallback() { + + public void onFailure(Throwable caught) { + monitor.hide(); + if (caught instanceof StatAlgoImporterSessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + + } + } + + public void onSuccess(Void result) { + monitor.hide(); + UtilsGXT3.info("Repackage", + "The script has been repackaged!"); + + } + + }); + } + + public void softwarePublish() { if (project != null) { @@ -704,4 +765,6 @@ public class ProjectManager { }); } + + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java index 631cdc2..bdb16e3 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java @@ -21,32 +21,31 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("SAIStyles.css") SAIStyles saiStyles(); - + @Source("WikiLink.txt") ExternalTextResource wikiLink(); - - + @Source("help_32.png") ImageResource help32(); - + @Source("help_24.png") ImageResource help24(); @Source("download_32.png") ImageResource download32(); - + @Source("download_24.png") ImageResource download24(); @Source("download_16.png") ImageResource download16(); - + @Source("upload_32.png") ImageResource upload32(); - + @Source("upload_24.png") ImageResource upload24(); - + @Source("job_32.png") ImageResource job32(); @@ -55,7 +54,7 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("reload_24.png") ImageResource reload24(); - + @Source("reload_16.png") ImageResource reload16(); @@ -67,22 +66,28 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("cancel_32.png") ImageResource cancel32(); - + @Source("cancel_24.png") ImageResource cancel24(); @Source("algorithm_32.png") ImageResource algorithm32(); - + @Source("algorithm_24.png") ImageResource algorithm24(); - + @Source("publish_32.png") ImageResource publish32(); - + @Source("publish_24.png") ImageResource publish24(); - + + @Source("zip_32.png") + ImageResource zip32(); + + @Source("zip_24.png") + ImageResource zip24(); + @Source("project-create_32.png") ImageResource projectCreate32(); @@ -91,31 +96,31 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("project-open_32.png") ImageResource projectOpen32(); - + @Source("project-open_24.png") ImageResource projectOpen24(); - + @Source("project-save_32.png") ImageResource projectSave32(); - + @Source("project-save_24.png") ImageResource projectSave24(); @Source("add_24.png") ImageResource add24(); - + @Source("add_16.png") ImageResource add16(); - + @Source("delete_24.png") ImageResource delete24(); - + @Source("delete_16.png") ImageResource delete16(); @Source("save_24.png") ImageResource save24(); - + @Source("save_16.png") ImageResource save16(); } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png new file mode 100644 index 0000000..8d5a4bc Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png differ diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png new file mode 100644 index 0000000..8ee5883 Binary files /dev/null and b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png differ diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBar.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBar.java index afd9fed..be20524 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBar.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBar.java @@ -50,7 +50,7 @@ public class HomeToolBar { //Software private TextButton btnCreateSoftware; private TextButton btnPublishSoftware; - + private TextButton btnRepackageSoftware; // Help private TextButton btnHelp; @@ -196,6 +196,7 @@ public class HomeToolBar { btnCreateSoftware.setIconAlign(IconAlign.LEFT); btnCreateSoftware.setArrowAlign(ButtonArrowAlign.BOTTOM); btnCreateSoftware.setToolTip(msgs.btnCreateSoftwareToolTip()); + btnCreateSoftware.getElement().setMargins(new Margins(0, 4, 0, 0)); btnCreateSoftware.disable(); btnCreateSoftware.addSelectHandler(new SelectHandler() { @@ -215,6 +216,7 @@ public class HomeToolBar { btnPublishSoftware.setIconAlign(IconAlign.LEFT); btnPublishSoftware.setArrowAlign(ButtonArrowAlign.BOTTOM); btnPublishSoftware.setToolTip(msgs.btnPublishSoftwareToolTip()); + btnPublishSoftware.getElement().setMargins(new Margins(0, 4, 0, 0)); btnPublishSoftware.disable(); btnPublishSoftware.addSelectHandler(new SelectHandler() { @@ -227,6 +229,27 @@ public class HomeToolBar { softwareLayout.setWidget(0, 1, btnPublishSoftware); softwareLayout.getFlexCellFormatter().setRowSpan(0, 1, 2); + + btnRepackageSoftware = new TextButton(msgs.btnRepackageSoftwareText(), + StatAlgoImporterResources.INSTANCE.zip24()); + btnRepackageSoftware.setId("publishSofwareButton"); + btnRepackageSoftware.setScale(ButtonScale.SMALL); + btnRepackageSoftware.setIconAlign(IconAlign.LEFT); + btnRepackageSoftware.setArrowAlign(ButtonArrowAlign.BOTTOM); + btnRepackageSoftware.setToolTip(msgs.btnRepackageSoftwareToolTip()); + btnRepackageSoftware.disable(); + btnRepackageSoftware.addSelectHandler(new SelectHandler() { + + public void onSelect(SelectEvent event) { + eventBus.fireEvent(new StatAlgoImporterRibbonEvent( + StatAlgoImporterRibbonType.SOFTWARE_REPACKAGE)); + } + }); + + softwareLayout.setWidget(0, 2, btnRepackageSoftware); + softwareLayout.getFlexCellFormatter().setRowSpan(0, 2, 2); + + // Help ButtonGroup helpGroup = new ButtonGroup(); @@ -373,6 +396,7 @@ public class HomeToolBar { btnAddResource.disable(); btnCreateSoftware.disable(); btnPublishSoftware.disable(); + btnRepackageSoftware.disable(); btnHelp.enable(); break; case OPEN: @@ -387,6 +411,7 @@ public class HomeToolBar { btnAddResource.enable(); btnCreateSoftware.enable(); btnPublishSoftware.enable(); + btnRepackageSoftware.enable(); btnHelp.enable(); break; default: diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBarMessages.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBarMessages.java index 56c004f..088cc32 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBarMessages.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/ribbon/HomeToolBarMessages.java @@ -75,6 +75,13 @@ public interface HomeToolBarMessages extends Messages { @DefaultMessage("Publish Software") String btnPublishSoftwareToolTip(); + @DefaultMessage("Repackage") + String btnRepackageSoftwareText(); + + @DefaultMessage("Script Repackage") + String btnRepackageSoftwareToolTip(); + + // @DefaultMessage("Help") String helpGroupHeadingText(); @@ -84,5 +91,6 @@ public interface HomeToolBarMessages extends Messages { @DefaultMessage("Help") String helpButtonToolTip(); - + + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java index 981e2a0..0f7ed73 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java @@ -78,4 +78,6 @@ public interface StatAlgoImporterService extends RemoteService { public void publishSoftware() throws StatAlgoImporterServiceException; + public void repackageSoftware() throws StatAlgoImporterServiceException; + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java index fa9da32..97bed22 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java @@ -66,4 +66,6 @@ public interface StatAlgoImporterServiceAsync { void publishSoftware(AsyncCallback asyncCallback); + void repackageSoftware(AsyncCallback asyncCallback); + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java index d663169..b6899d0 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java @@ -133,7 +133,7 @@ public class ExplorerProjectPanel extends ContentPanel { try { wsResourcesExplorerPanel = new WorkspaceResourcesExplorerPanel( - event.getProject().getProjectFolder().getItemDescription() + event.getProject().getProjectFolder().getFolder() .getId(), false); @@ -177,7 +177,7 @@ public class ExplorerProjectPanel extends ContentPanel { dnd = new MultipleDNDUpload(); dnd.setParameters(event.getProject().getProjectFolder() - .getItemDescription().getId(), UPLOAD_TYPE.File); + .getFolder().getId(), UPLOAD_TYPE.File); dnd.addUniqueContainer(vResourcesExplorerContainer); WorskpaceUploadNotificationListener workspaceUploaderListener = new WorskpaceUploadNotificationListener() { diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/StatAlgoImporterRibbonType.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/StatAlgoImporterRibbonType.java index 2e5b679..fbe8096 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/StatAlgoImporterRibbonType.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/StatAlgoImporterRibbonType.java @@ -13,5 +13,6 @@ public enum StatAlgoImporterRibbonType { RESOURCE_ADD, SOFTWARE_CREATE, SOFTWARE_PUBLISH, + SOFTWARE_REPACKAGE, HELP; } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java index a3ebd66..4c44abb 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java @@ -20,6 +20,7 @@ import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.Main import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.ProjectArchiver; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.InputData; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.MainCode; @@ -300,11 +301,11 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements Project project = SessionUtil.getProjectSession(session); if (project != null && project.getProjectFolder() != null - && project.getProjectFolder().getItemDescription() != null) { + && project.getProjectFolder().getFolder() != null) { FilesStorage fileStorage = new FilesStorage(); fileStorage.copyItemOnFolder(aslSession.getUsername(), itemDescription.getId(), project.getProjectFolder() - .getItemDescription().getId()); + .getFolder().getId()); } else { throw new StatAlgoImporterServiceException("No project open!"); } @@ -336,27 +337,12 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements } Project project = SessionUtil.getProjectSession(session); - if (project != null) { - if (project.getMainCode() != null - && project.getMainCode().getItemDescription() != null - && project.getMainCode().getItemDescription().getId() - .compareTo(itemDescription.getId()) == 0) { - project.setMainCode(null); - project.setInputData(null); - project.setProjectTarget(null); - FilesStorage fileStorage = new FilesStorage(); - fileStorage.deleteItemOnFolder(aslSession.getUsername(), - itemDescription.getId()); - SessionUtil.setProjectSession(session, project); - } else { - FilesStorage fileStorage = new FilesStorage(); - fileStorage.deleteItemOnFolder(aslSession.getUsername(), - itemDescription.getId()); - } - return project; - } else { - throw new StatAlgoImporterServiceException("No project open!"); - } + checkProjectInfoForDelete(itemDescription,aslSession, session, project); + FilesStorage fileStorage = new FilesStorage(); + fileStorage.deleteItemOnFolder( + aslSession.getUsername(), + itemDescription.getId()); + return project; } catch (StatAlgoImporterServiceException e) { e.printStackTrace(); @@ -370,6 +356,86 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements } + private void checkProjectInfoForDelete(ItemDescription itemDescription, + ASLSession aslSession, HttpSession session, Project project) + throws StatAlgoImporterSessionExpiredException, + StatAlgoImporterServiceException { + if (project != null) { + if (project.getMainCode() != null + && project.getMainCode().getItemDescription() != null + && project.getMainCode().getItemDescription().getId() + .compareTo(itemDescription.getId()) == 0) { + project.setMainCode(null); + project.setInputData(null); + project.setProjectTarget(null); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + if (project.getProjectTarget() != null + && project.getProjectTarget().getFolder() != null + && project.getProjectTarget().getFolder().getId() + .compareTo(itemDescription.getId()) == 0) { + project.setProjectTarget(null); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + if (project.getProjectTarget() != null + && project.getProjectTarget() + .getProjectCompile() != null + && project.getProjectTarget() + .getProjectCompile().getFolder() != null + && project.getProjectTarget() + .getProjectCompile().getFolder() + .getId() + .compareTo(itemDescription.getId()) == 0) { + project.getProjectTarget().setProjectCompile(null); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + if (project.getProjectTarget() != null + && project.getProjectTarget() + .getProjectDeploy() != null + && project.getProjectTarget() + .getProjectDeploy().getFolder() != null + && project.getProjectTarget() + .getProjectDeploy().getFolder() + .getId() + .compareTo(itemDescription.getId()) == 0) { + project.getProjectTarget().setProjectDeploy( + null); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + if (project.getProjectTarget() != null + && project.getProjectTarget() + .getProjectDeploy() != null + && project.getProjectTarget() + .getProjectDeploy() + .getPackageProject() != null + && project + .getProjectTarget() + .getProjectDeploy() + .getPackageProject() + .getId() + .compareTo( + itemDescription.getId()) == 0) { + project.getProjectTarget() + .getProjectDeploy() + .setPackageProject(null); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + + } + } + } + } + } + } else { + throw new StatAlgoImporterServiceException("No project open!"); + } + } + @Override public void saveProject(InputData inputData) throws StatAlgoImporterServiceException { @@ -441,7 +507,7 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements + ", code:" + code); Project project = SessionUtil.getProjectSession(session); if (project != null && project.getProjectFolder() != null - && project.getProjectFolder().getItemDescription() != null) { + && project.getProjectFolder().getFolder() != null) { MainCodeSave mainCodeSave = new MainCodeSave(); ItemDescription mainCodeItemDescription = mainCodeSave.saveNew( aslSession, fileDescription, code, project); @@ -476,8 +542,8 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements project.setInputData(inputData); SessionUtil.setProjectSession(session, project); ProjectBuilder projectBuilder = new ProjectBuilder(project, - aslSession, session); - project = projectBuilder.build(); + aslSession); + project = projectBuilder.buildTarget(); SessionUtil.setProjectSession(session, project); ProjectArchiver.archive(project, aslSession); } else { @@ -527,12 +593,12 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements ArrayList recipients = SessionUtil.getRecipients(session .getServletContext()); Project project = SessionUtil.getProjectSession(session); - if (project != null && project.getProjectTarget() != null - && project.getProjectTarget().getTargetFolder() != null - && project.getProjectTarget().getCodeJar() != null - && project.getProjectTarget().getCodeSource() != null - && project.getProjectTarget().getIntegrationInfo() != null - && project.getProjectTarget().getPackageUrl() != null) { + if (project != null) { + ProjectBuilder projectBuilder = new ProjectBuilder(project, + aslSession); + project = projectBuilder.buildDeploy(); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); AlgorithmNotification notify = new AlgorithmNotification( aslSession, project, recipients); notify.run(); @@ -553,4 +619,34 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements } + @Override + public void repackageSoftware() throws StatAlgoImporterServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getAslSession(session); + logger.debug("RepackageSoftware()"); + Project project = SessionUtil.getProjectSession(session); + if (project != null) { + ProjectBuilder projectBuilder = new ProjectBuilder(project, + aslSession); + project = projectBuilder.buildRepackage(); + SessionUtil.setProjectSession(session, project); + ProjectArchiver.archive(project, aslSession); + } else { + throw new StatAlgoImporterServiceException( + "The script was not packaged correctly!"); + } + + return; + } catch (StatAlgoImporterServiceException e) { + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("repackageSoftware(): " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + + } + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/AlgorithmGenerator.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/AlgorithmGenerator.java index b616596..0f81318 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/AlgorithmGenerator.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/AlgorithmGenerator.java @@ -271,12 +271,12 @@ public class AlgorithmGenerator { } private String retrieveMainScriptRelativePath() { - String projectPath = project.getProjectFolder().getItemDescription() + String projectPath = project.getProjectFolder().getFolder() .getPath(); String mainCodePath = project.getMainCode().getItemDescription() .getPath(); - String relativePath = project.getProjectFolder().getItemDescription() + String relativePath = project.getProjectFolder().getFolder() .getName() + mainCodePath.substring(projectPath.length()); return relativePath; @@ -285,10 +285,11 @@ public class AlgorithmGenerator { private String retrievePackageUrl() { String packageUrl = ""; - if (project.getProjectTarget() != null - && project.getProjectTarget().getPackageUrl() != null) { - if (project.getProjectTarget().getPackageUrl().getPublicLink() != null) { - packageUrl = project.getProjectTarget().getPackageUrl() + if (project.getProjectTarget()!=null&& + project.getProjectTarget().getProjectDeploy() != null + && project.getProjectTarget().getProjectDeploy().getPackageProject() != null) { + if (project.getProjectTarget().getProjectDeploy().getPackageProject().getPublicLink() != null) { + packageUrl = project.getProjectTarget().getProjectDeploy().getPackageProject() .getPublicLink(); } } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java index 1b58952..41aece8 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java @@ -12,8 +12,6 @@ import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; -import javax.servlet.http.HttpSession; - import org.apache.commons.io.FileUtils; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; @@ -22,6 +20,8 @@ import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.Project; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectCompile; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectDeploy; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectTarget; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; import org.slf4j.Logger; @@ -34,6 +34,13 @@ import org.slf4j.LoggerFactory; * */ public class ProjectBuilder { + private static final String STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME = "Target"; + private static final String STATISTICAL_ALGORITHM_TARGET_FOLDER_DESCRIPTION = "Project Target"; + private static final String STATISTICAL_ALGORITHM_DEPLOY_FOLDER_NAME = "Deploy"; + private static final String STATISTICAL_ALGORITHM_DEPLOY_FOLDER_DESCRIPTION = "Project Deploy"; + private static final String STATISTICAL_ALGORITHM_COMPILE_FOLDER_NAME = "Compile"; + private static final String STATISTICAL_ALGORITHM_COMPILE_FOLDER_DESCRIPTION = "Project Compile"; + private static final String ALGORITHM_MIMETYPE = "text/plain"; private static final String ALGORITHM_DESCRIPTION = "Statistical Algorithm Java Code"; private static final String ALGORITHM_EXTENTION = ".java"; @@ -60,17 +67,142 @@ public class ProjectBuilder { private Project project; private ASLSession aslSession; - private ProjectTarget projectTarget; private Path algorithmJava; private Path infoTXT; - public ProjectBuilder(Project project, ASLSession aslSession, - HttpSession session) { + public ProjectBuilder(Project project, ASLSession aslSession) { this.project = project; this.aslSession = aslSession; } - private void checkInfo() throws StatAlgoImporterServiceException { + public Project buildTarget() throws StatAlgoImporterServiceException { + checkInfoForBuild(); + createTargetFolder(); + createDeployFolder(); + createProjectPackage(); + createCompileFolder(); + createAlgorithm(); + createIntegrationInfo(); + createProjectJarFile(); + + return project; + + } + + public Project buildDeploy() throws StatAlgoImporterServiceException { + checkInfoForDeploy(); + copyJarInDeploy(); + return project; + } + + public Project buildRepackage() throws StatAlgoImporterServiceException { + checkInfoForRepackage(); + repackageProjectPackage(); + return project; + } + + private void repackageProjectPackage() + throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + + List idsToExclude = new ArrayList(); + if (project.getProjectTarget() != null + && project.getProjectTarget().getFolder() != null + && project.getProjectTarget().getFolder().getId() != null + && !project.getProjectTarget().getFolder().getId().isEmpty()) { + idsToExclude.add(project.getProjectTarget().getFolder().getId()); + } + + File projectPackageFile = filesStorage.zipFolder( + aslSession.getUsername(), project.getProjectFolder() + .getFolder().getId(), idsToExclude); + + InputStream inputStream; + try { + inputStream = Files.newInputStream(projectPackageFile.toPath(), + StandardOpenOption.READ); + } catch (IOException e) { + logger.error("Error input stream generation for project package file: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + + + filesStorage.saveInputStreamInItem( + aslSession.getUsername(), project.getProjectTarget() + .getProjectDeploy().getPackageProject().getId(), + inputStream); + + + WorkspaceItem packageProject=filesStorage.retrieveItemInfoOnWorkspace(aslSession.getUsername(), project.getProjectTarget() + .getProjectDeploy().getPackageProject().getId()); + + ItemDescription packageProjectItemDescription; + try { + packageProjectItemDescription = new ItemDescription(packageProject.getId(), + packageProject.getName(), packageProject + .getOwner().getPortalLogin(), + packageProject.getPath(), packageProject + .getType().name()); + packageProjectItemDescription.setPublicLink(packageProject.getPublicLink(true)); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + + project.getProjectTarget().getProjectDeploy().setPackageProject(packageProjectItemDescription); + logger.debug("ProjectDeploy: " + + project.getProjectTarget().getProjectDeploy()); + + + } + + private void copyJarInDeploy() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + if (project.getProjectTarget().getProjectDeploy().getCodeJar() != null + && project.getProjectTarget().getProjectDeploy().getCodeJar() + .getId() != null + && !project.getProjectTarget().getProjectDeploy().getCodeJar() + .getId().isEmpty()) { + filesStorage + .deleteItemOnFolder(aslSession.getUsername(), project + .getProjectTarget().getProjectDeploy().getCodeJar() + .getId()); + } + + WorkspaceItem deployableCodeJarItem = filesStorage.copyItemOnFolder( + aslSession.getUsername(), project.getProjectTarget() + .getProjectCompile().getCodeJar().getId(), project + .getProjectTarget().getProjectDeploy().getFolder() + .getId()); + + logger.debug("DeployableCodeJarItem:" + deployableCodeJarItem); + + ItemDescription dCodeJar; + try { + dCodeJar = new ItemDescription(deployableCodeJarItem.getId(), + deployableCodeJarItem.getName(), deployableCodeJarItem + .getOwner().getPortalLogin(), + deployableCodeJarItem.getPath(), deployableCodeJarItem + .getType().name()); + dCodeJar.setPublicLink(deployableCodeJarItem.getPublicLink(true)); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + + project.getProjectTarget().getProjectDeploy().setCodeJar(dCodeJar); + logger.debug("ProjectDeploy: " + + project.getProjectTarget().getProjectDeploy()); + } + + private void checkInfoForRepackage() + throws StatAlgoImporterServiceException { if (project == null) { throw new StatAlgoImporterServiceException( "Attention No Project Found!"); @@ -81,6 +213,139 @@ public class ProjectBuilder { "Attention No Project Folder Found!"); } + if (project.getProjectTarget() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Target Found!"); + } + + if (project.getProjectTarget().getFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Target Folder Found!"); + } + + if (project.getProjectTarget().getProjectDeploy() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Deploy Found!"); + } + + if (project.getProjectTarget().getProjectDeploy().getFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Deploy Folder Found!"); + } + + if (project.getProjectTarget().getProjectDeploy().getPackageProject() == null + || project.getProjectTarget().getProjectDeploy() + .getPackageProject().getId() == null + || project.getProjectTarget().getProjectDeploy() + .getPackageProject().getId().isEmpty()) { + throw new StatAlgoImporterServiceException( + "Attention No Project Package Found. Try to create software before!"); + } + + } + + private void checkInfoForDeploy() throws StatAlgoImporterServiceException { + if (project == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Found!"); + } + + if (project.getProjectFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Folder Found!"); + } + + if (project.getProjectTarget() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Target Found!"); + } + + if (project.getProjectTarget().getFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Target Folder Found!"); + } + + if (project.getProjectTarget().getProjectDeploy() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Deploy Found!"); + } + + if (project.getProjectTarget().getProjectDeploy().getFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Deploy Folder Found!"); + } + + if (project.getProjectTarget().getProjectDeploy().getPackageProject() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Package Found!"); + } + + if (project.getProjectTarget().getProjectCompile().getFolder() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Compile Folder Found!"); + } + + if (project.getProjectTarget().getProjectCompile().getCodeSource() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Source Code Found!"); + } + + if (project.getProjectTarget().getProjectCompile().getCodeJar() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Jar Code Found!"); + } + + if (project.getProjectTarget().getProjectCompile().getIntegrationInfo() == null) { + throw new StatAlgoImporterServiceException( + "Attention No Integration Info Found!"); + } + + } + + private void createDeployFolder() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + filesStorage.deleteFolder(aslSession.getUsername(), project + .getProjectTarget().getFolder().getId(), + STATISTICAL_ALGORITHM_DEPLOY_FOLDER_NAME); + + WorkspaceFolder deployFolder = filesStorage.createFolder( + aslSession.getUsername(), project.getProjectTarget() + .getFolder().getId(), + STATISTICAL_ALGORITHM_DEPLOY_FOLDER_NAME, + STATISTICAL_ALGORITHM_DEPLOY_FOLDER_DESCRIPTION); + logger.debug("PublicFolder:" + deployFolder); + + ItemDescription pFolder; + try { + pFolder = new ItemDescription(deployFolder.getId(), + deployFolder.getName(), deployFolder.getOwner() + .getPortalLogin(), deployFolder.getPath(), + deployFolder.getType().name()); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + ProjectDeploy projectDeploy = new ProjectDeploy(pFolder); + project.getProjectTarget().setProjectDeploy(projectDeploy); + + } + + private void checkInfoForBuild() throws StatAlgoImporterServiceException { + if (project == null) { + throw new StatAlgoImporterServiceException( + "Attention No Project Found!"); + } + + if (project.getProjectFolder() == null + || project.getProjectFolder().getFolder() == null + || project.getProjectFolder().getFolder().getId() == null + || project.getProjectFolder().getFolder().getId().isEmpty()) { + throw new StatAlgoImporterServiceException( + "Attention No Project Folder Found!"); + } + if (project.getInputData() == null) { throw new StatAlgoImporterServiceException( "Attention No Input Set!"); @@ -131,18 +396,121 @@ public class ProjectBuilder { } - public Project build() throws StatAlgoImporterServiceException { - checkInfo(); - createProjectPackage(); - createAlgorithm(); - createIntegrationInfo(); - createProjectJarFile(); + private void createProjectPackage() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); - return project; + List idsToExclude = new ArrayList(); + if (project.getProjectTarget() != null + && project.getProjectTarget().getFolder() != null + && project.getProjectTarget().getFolder().getId() != null + && !project.getProjectTarget().getFolder().getId().isEmpty()) { + idsToExclude.add(project.getProjectTarget().getFolder().getId()); + } + + File projectPackageFile = filesStorage.zipFolder( + aslSession.getUsername(), project.getProjectFolder() + .getFolder().getId(), idsToExclude); + + InputStream inputStream; + try { + inputStream = Files.newInputStream(projectPackageFile.toPath(), + StandardOpenOption.READ); + } catch (IOException e) { + logger.error("Error input stream generation for project package file: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + + WorkspaceItem projectPackageItem; + + projectPackageItem = filesStorage.createItemOnWorkspace( + aslSession.getUsername(), inputStream, project.getInputData() + .getProjectInfo().getAlgorithmNameToClassName() + + PROJECT_PACKAGE_EXTENTION, + PROJECT_PACKAGE_DESCRIPTION, PROJECT_PACKAGE_MIMETYPE, project + .getProjectTarget().getProjectDeploy().getFolder() + .getId()); + + logger.debug("ProjectPackageItem:" + projectPackageItem); + + ItemDescription packageUrl; + try { + packageUrl = new ItemDescription(projectPackageItem.getId(), + projectPackageItem.getName(), projectPackageItem.getOwner() + .getPortalLogin(), projectPackageItem.getPath(), + projectPackageItem.getType().name()); + packageUrl.setPublicLink(projectPackageItem.getPublicLink(true)); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + project.getProjectTarget().getProjectDeploy().setPackageProject(packageUrl); + } + + private void createTargetFolder() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + filesStorage.deleteFolder(aslSession.getUsername(), project + .getProjectFolder().getFolder().getId(), + STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME); + + WorkspaceFolder targetFolder = filesStorage.createFolder( + aslSession.getUsername(), project.getProjectFolder() + .getFolder().getId(), + STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME, + STATISTICAL_ALGORITHM_TARGET_FOLDER_DESCRIPTION); + logger.debug("TargetFolder:" + targetFolder); + + ItemDescription tFolder; + try { + tFolder = new ItemDescription(targetFolder.getId(), + targetFolder.getName(), targetFolder.getOwner() + .getPortalLogin(), targetFolder.getPath(), + targetFolder.getType().name()); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + ProjectTarget projectTarget = new ProjectTarget(tFolder); + project.setProjectTarget(projectTarget); } - protected void createAlgorithm() throws StatAlgoImporterServiceException { + private void createCompileFolder() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + filesStorage.deleteFolder(aslSession.getUsername(), project + .getProjectTarget().getFolder().getId(), + STATISTICAL_ALGORITHM_COMPILE_FOLDER_NAME); + + WorkspaceFolder compileFolder = filesStorage.createFolder( + aslSession.getUsername(), project.getProjectTarget() + .getFolder().getId(), + STATISTICAL_ALGORITHM_COMPILE_FOLDER_NAME, + STATISTICAL_ALGORITHM_COMPILE_FOLDER_DESCRIPTION); + logger.debug("CompileFolder:" + compileFolder); + + ItemDescription cFolder; + try { + cFolder = new ItemDescription(compileFolder.getId(), + compileFolder.getName(), compileFolder.getOwner() + .getPortalLogin(), compileFolder.getPath(), + compileFolder.getType().name()); + } catch (InternalErrorException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + + ProjectCompile projectCompile = new ProjectCompile(cFolder); + project.getProjectTarget().setProjectCompile(projectCompile); + } + + private void createAlgorithm() throws StatAlgoImporterServiceException { AlgorithmGenerator algorithmGenerator = new AlgorithmGenerator(project); algorithmJava = algorithmGenerator.createAlgorithm(); @@ -156,7 +524,7 @@ public class ProjectBuilder { .getProjectInfo().getAlgorithmNameToClassName() + ALGORITHM_EXTENTION, ALGORITHM_DESCRIPTION, ALGORITHM_MIMETYPE, project.getProjectTarget() - .getTargetFolder().getId()); + .getProjectCompile().getFolder().getId()); } catch (IOException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -178,84 +546,10 @@ public class ProjectBuilder { } - projectTarget.setCodeSource(codeSource); - logger.debug("ProjectTarget: " + projectTarget); - project.setProjectTarget(projectTarget); - - } - - private void createProjectPackage() throws StatAlgoImporterServiceException { - FilesStorage filesStorage = new FilesStorage(); - filesStorage.deleteTargetFolder(aslSession.getUsername(), project - .getProjectFolder().getItemDescription().getId()); - - File projectPackageFile = filesStorage.zipFolder( - aslSession.getUsername(), project.getProjectFolder() - .getItemDescription().getId()); - - WorkspaceFolder targetFolder = filesStorage.createTargetFolder( - aslSession.getUsername(), project.getProjectFolder() - .getItemDescription().getId()); - logger.debug("TargetFolder:" + targetFolder); - - ItemDescription tFolder; - try { - tFolder = new ItemDescription(targetFolder.getId(), - targetFolder.getName(), targetFolder.getOwner() - .getPortalLogin(), targetFolder.getPath(), - targetFolder.getType().name()); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - projectTarget = new ProjectTarget(tFolder); - - InputStream inputStream; - try { - inputStream = Files.newInputStream(projectPackageFile.toPath(), - StandardOpenOption.READ); - } catch (IOException e) { - logger.error("Error input stream generation: " - + e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - } - - WorkspaceItem projectPackageItem; - try { - projectPackageItem = filesStorage.createItemOnWorkspace( - aslSession.getUsername(), inputStream, project - .getInputData().getProjectInfo() - .getAlgorithmNameToClassName() - + PROJECT_PACKAGE_EXTENTION, - PROJECT_PACKAGE_DESCRIPTION, PROJECT_PACKAGE_MIMETYPE, - targetFolder.getId()); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - - logger.debug("ProjectPackageItem:" + projectPackageItem); - ItemDescription packageUrl; - try { - packageUrl = new ItemDescription(projectPackageItem.getId(), - projectPackageItem.getName(), projectPackageItem.getOwner() - .getPortalLogin(), projectPackageItem.getPath(), - projectPackageItem.getType().name()); - packageUrl.setPublicLink(projectPackageItem.getPublicLink(true)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - - projectTarget.setPackageUrl(packageUrl); - project.setProjectTarget(projectTarget); + project.getProjectTarget().getProjectCompile() + .setCodeSource(codeSource); + logger.debug("ProjectCompile: " + + project.getProjectTarget().getProjectCompile()); } @@ -272,8 +566,8 @@ public class ProjectBuilder { aslSession.getUsername(), Files.newInputStream(infoTXT, StandardOpenOption.READ), INFO_NAME + INFO_EXTENTION, INFO_DESCRIPTION, - INFO_MIMETYPE, project.getProjectTarget().getTargetFolder() - .getId()); + INFO_MIMETYPE, project.getProjectTarget() + .getProjectCompile().getFolder().getId()); } catch (IOException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -295,9 +589,10 @@ public class ProjectBuilder { } - projectTarget.setIntegrationInfo(integrationItemDescription); - logger.debug("ProjectTarget: " + projectTarget); - project.setProjectTarget(projectTarget); + project.getProjectTarget().getProjectCompile() + .setIntegrationInfo(integrationItemDescription); + logger.debug("ProjectCompile: " + + project.getProjectTarget().getProjectCompile()); } @@ -406,7 +701,7 @@ public class ProjectBuilder { .getAlgorithmNameToClassName() + JAR_EXTENTION, CODE_JAR_DESCRIPTION, CODE_JAR_MIMETYPE, project.getProjectTarget() - .getTargetFolder().getId()); + .getProjectCompile().getFolder().getId()); } catch (IOException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -429,9 +724,10 @@ public class ProjectBuilder { } - projectTarget.setCodeJar(codeJarItemDescription); - logger.debug("ProjectTarget: " + projectTarget); - project.setProjectTarget(projectTarget); + project.getProjectTarget().getProjectCompile() + .setCodeJar(codeJarItemDescription); + logger.debug("ProjectCompile: " + + project.getProjectTarget().getProjectCompile()); } @@ -527,4 +823,5 @@ public class ProjectBuilder { } } + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java index 06684b7..9151a95 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/social/AlgorithmNotification.java @@ -81,7 +81,7 @@ public class AlgorithmNotification extends Thread { + "\n\n has requested to publish the algorithm " + project.getInputData().getProjectInfo() .getAlgorithmName() + " with the following jar " - + project.getProjectTarget().getCodeJar().getPublicLink(); + + project.getProjectTarget().getProjectDeploy().getCodeJar().getPublicLink(); String messageId; diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java index 79470e1..5597bb1 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java @@ -42,8 +42,9 @@ public class FilesStorage { private static final String STATISTICAL_ALGORITHM_PROJECT_MIMETYPE = "text/xml"; private static final String STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION = "Statistical Algorithm Project File"; private static final String STATISTICAL_ALGORITHM_PROJECT_FILE_NAME = "stat_algo.project"; - private static final String STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME = "Target"; - + + + public static final Logger logger = LoggerFactory .getLogger(FilesStorage.class); @@ -93,7 +94,7 @@ public class FilesStorage { * Folder id * @throws StatAlgoImporterServiceException */ - public void copyItemOnFolder(String user, String itemId, String folderId) + public WorkspaceItem copyItemOnFolder(String user, String itemId, String folderId) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -105,9 +106,9 @@ public class FilesStorage { "Destination is not a folder!"); } - ws.copy(itemId, folderId); + WorkspaceItem item=ws.copy(itemId, folderId); - return; + return item; } catch (WrongDestinationException | ItemAlreadyExistException | InsufficientPrivilegesException | WorkspaceFolderNotFoundException | InternalErrorException @@ -145,28 +146,29 @@ public class FilesStorage { } + /** * * @param user * User - * @param folderId + * @param parentId * Foler id * @throws StatAlgoImporterServiceException */ - public void deleteTargetFolder(String user, String folderId) + public void deleteFolder(String user, String parentId,String folderName) throws StatAlgoImporterServiceException { Workspace ws; try { ws = HomeLibrary.getUserWorkspace(user); - WorkspaceItem workSpaceItem = ws.getItem(folderId); + WorkspaceItem workSpaceItem = ws.getItem(parentId); if (!workSpaceItem.isFolder()) { throw new StatAlgoImporterServiceException( "No valid project folder!"); } WorkspaceItem target = ws.find( - STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME, folderId); + folderName, parentId); if (target != null) { ws.removeItems(target.getId()); @@ -182,30 +184,34 @@ public class FilesStorage { } } + + + + /** * * @param user * User - * @param folderId + * @param parentId * Destination folder id * @return Folder * @throws StatAlgoImporterServiceException */ - public WorkspaceFolder createTargetFolder(String user, String folderId) + public WorkspaceFolder createFolder(String user, String parentId, String folderName, String folderDescription) throws StatAlgoImporterServiceException { Workspace ws; try { ws = HomeLibrary.getUserWorkspace(user); - WorkspaceItem workSpaceItem = ws.getItem(folderId); + WorkspaceItem workSpaceItem = ws.getItem(parentId); if (!workSpaceItem.isFolder()) { throw new StatAlgoImporterServiceException( "No valid project folder!"); } - WorkspaceFolder projectTargetFolder = ws.createFolder("Target", - "Project Target", folderId); + WorkspaceFolder projectTargetFolder = ws.createFolder(folderName, + folderDescription, parentId); return projectTargetFolder; } catch (WorkspaceFolderNotFoundException | InternalErrorException @@ -535,7 +541,7 @@ public class FilesStorage { * String to save * @throws StatAlgoImporterServiceException */ - public void saveItem(String user, String itemId, String data) + public void saveStringInItem(String user, String itemId, String data) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -548,7 +554,7 @@ public class FilesStorage { } else { if (workSpaceItem.isFolder()) { throw new StatAlgoImporterServiceException( - "Item is not valid folder!"); + "Item is a folder!"); } else { } @@ -568,6 +574,40 @@ public class FilesStorage { throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } + + + public void saveInputStreamInItem(String user, String itemId, InputStream is) + throws StatAlgoImporterServiceException { + Workspace ws; + try { + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem workSpaceItem = ws.getItem(itemId); + if (workSpaceItem == null) { + throw new StatAlgoImporterServiceException( + "No item retrieved on workspace!"); + } else { + if (workSpaceItem.isFolder()) { + throw new StatAlgoImporterServiceException( + "Item is a folder!"); + } else { + + } + } + // convert String into InputStream + ws.updateItem(itemId, is); + + return; + + } catch (WorkspaceFolderNotFoundException | InternalErrorException + | HomeNotFoundException | ItemNotFoundException + | InsufficientPrivilegesException | ItemAlreadyExistException + | WrongDestinationException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + } + public File zipFolder(String user, String folderId) throws StatAlgoImporterServiceException { @@ -650,4 +690,6 @@ public class FilesStorage { out.close(); } + + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java index c3b72c0..c036b53 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java @@ -42,7 +42,7 @@ public class MainCodeSave { public void save(ASLSession aslSession, ItemDescription file, String code, Project project) throws StatAlgoImporterServiceException{ FilesStorage filesStorage = new FilesStorage(); - filesStorage.saveItem(aslSession.getUsername(), file.getId(), code); + filesStorage.saveStringInItem(aslSession.getUsername(), file.getId(), code); } @@ -94,7 +94,7 @@ public class MainCodeSave { aslSession.getUsername(), Files.newInputStream(tempFile, StandardOpenOption.READ), file.getName(), ALGORITHM_DESCRIPTION, ALGORITHM_MIMETYPE, - project.getProjectFolder().getItemDescription().getId()); + project.getProjectFolder().getFolder().getId()); } catch (IOException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java index 08df800..4045d8c 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java @@ -42,7 +42,7 @@ public class ProjectArchiver { FilesStorage filesStorage = new FilesStorage(); filesStorage.saveStatisticalAlgorithmProject(aslSession.getUsername(), byteArrayInputStream, project.getProjectFolder() - .getItemDescription().getId()); + .getFolder().getId()); } @@ -85,7 +85,7 @@ public class ProjectArchiver { if (project != null && project.getProjectFolder() != null && newProjectFolder.compareInfo(project.getProjectFolder() - .getItemDescription())) { + .getFolder())) { } else { project.setProjectFolder(new ProjectFolder(newProjectFolder)); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectCompile.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectCompile.java new file mode 100644 index 0000000..944282d --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectCompile.java @@ -0,0 +1,70 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project; + +import java.io.Serializable; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ProjectCompile implements Serializable { + + private static final long serialVersionUID = 4603210015575691417L; + private ItemDescription folder; + private ItemDescription codeSource; + private ItemDescription integrationInfo; + private ItemDescription codeJar; + + public ProjectCompile() { + super(); + } + + public ProjectCompile(ItemDescription folder) { + super(); + this.folder = folder; + } + + public ItemDescription getFolder() { + return folder; + } + + public void setFolder(ItemDescription folder) { + this.folder = folder; + } + + public ItemDescription getCodeSource() { + return codeSource; + } + + public void setCodeSource(ItemDescription codeSource) { + this.codeSource = codeSource; + } + + public ItemDescription getCodeJar() { + return codeJar; + } + + public void setCodeJar(ItemDescription codeJar) { + this.codeJar = codeJar; + } + + public ItemDescription getIntegrationInfo() { + return integrationInfo; + } + + public void setIntegrationInfo(ItemDescription integrationInfo) { + this.integrationInfo = integrationInfo; + } + + @Override + public String toString() { + return "ProjectCompile [folder=" + folder + ", codeSource=" + + codeSource + ", integrationInfo=" + integrationInfo + + ", codeJar=" + codeJar + "]"; + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectDeploy.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectDeploy.java new file mode 100644 index 0000000..14061a4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectDeploy.java @@ -0,0 +1,59 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project; + +import java.io.Serializable; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ProjectDeploy implements Serializable { + + private static final long serialVersionUID = -3403842661465451760L; + private ItemDescription folder; + private ItemDescription packageProject; + private ItemDescription codeJar; + + public ProjectDeploy() { + super(); + } + + public ProjectDeploy(ItemDescription folder) { + super(); + this.folder = folder; + } + + public ItemDescription getFolder() { + return folder; + } + + public void setFolder(ItemDescription folder) { + this.folder = folder; + } + + public ItemDescription getPackageProject() { + return packageProject; + } + + public void setPackageProject(ItemDescription packageProject) { + this.packageProject = packageProject; + } + + public ItemDescription getCodeJar() { + return codeJar; + } + + public void setCodeJar(ItemDescription codeJar) { + this.codeJar = codeJar; + } + + @Override + public String toString() { + return "ProjectDeploy [folder=" + folder + ", packageProject=" + + packageProject + ", codeJar=" + codeJar + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectFolder.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectFolder.java index e5474da..68da04a 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectFolder.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectFolder.java @@ -13,31 +13,28 @@ import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.It public class ProjectFolder implements Serializable { private static final long serialVersionUID = 3698120963507381801L; - private ItemDescription itemDescription; - - public ProjectFolder(){ + private ItemDescription folder; + + public ProjectFolder() { super(); } - public ProjectFolder(ItemDescription itemDescription) { + public ProjectFolder(ItemDescription folder) { super(); - this.itemDescription = itemDescription; + this.folder = folder; } - public ItemDescription getItemDescription() { - return itemDescription; + public ItemDescription getFolder() { + return folder; } - public void setItemDescription(ItemDescription itemDescription) { - this.itemDescription = itemDescription; + public void setFolder(ItemDescription folder) { + this.folder = folder; } @Override public String toString() { - return "ProjectFolder [itemDescription=" + itemDescription + "]"; + return "ProjectFolder [folder=" + folder + "]"; } - - - } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectTarget.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectTarget.java index 503f68a..d06e142 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectTarget.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/project/ProjectTarget.java @@ -13,72 +13,49 @@ import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.It public class ProjectTarget implements Serializable { private static final long serialVersionUID = 480665662744105383L; - private ItemDescription targetFolder; - private ItemDescription packageUrl; - private ItemDescription codeSource; - private ItemDescription integrationInfo; - private ItemDescription codeJar; + private ItemDescription folder; + private ProjectCompile projectCompile; + private ProjectDeploy projectDeploy; public ProjectTarget() { super(); } - public ProjectTarget(ItemDescription targetFolder) { + public ProjectTarget(ItemDescription folder) { super(); - this.targetFolder = targetFolder; + this.folder = folder; } - public ItemDescription getTargetFolder() { - return targetFolder; + public ItemDescription getFolder() { + return folder; } - public void setTargetFolder(ItemDescription targetFolder) { - this.targetFolder = targetFolder; + public void setFolder(ItemDescription folder) { + this.folder = folder; } - public ItemDescription getPackageUrl() { - return packageUrl; + public ProjectCompile getProjectCompile() { + return projectCompile; } - public void setPackageUrl(ItemDescription packageUrl) { - this.packageUrl = packageUrl; + public void setProjectCompile(ProjectCompile projectCompile) { + this.projectCompile = projectCompile; } - public ItemDescription getCodeSource() { - return codeSource; + public ProjectDeploy getProjectDeploy() { + return projectDeploy; } - public void setCodeSource(ItemDescription codeSource) { - this.codeSource = codeSource; - } - - public ItemDescription getCodeJar() { - return codeJar; - } - - public void setCodeJar(ItemDescription codeJar) { - this.codeJar = codeJar; - } - - - - public ItemDescription getIntegrationInfo() { - return integrationInfo; - } - - public void setIntegrationInfo(ItemDescription integrationInfo) { - this.integrationInfo = integrationInfo; + public void setProjectDeploy(ProjectDeploy projectDeploy) { + this.projectDeploy = projectDeploy; } @Override public String toString() { - return "ProjectTarget [targetFolder=" + targetFolder + ", packageUrl=" - + packageUrl + ", codeSource=" + codeSource - + ", integrationInfo=" + integrationInfo + ", codeJar=" - + codeJar + "]"; + return "ProjectTarget [folder=" + folder + ", projectCompile=" + + projectCompile + ", projectDeploy=" + projectDeploy + "]"; } - } diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png new file mode 100644 index 0000000..8d5a4bc Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_24.png differ diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png new file mode 100644 index 0000000..8ee5883 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/zip_32.png differ