From 5597655c7e93fdf3dba1facd61fccd5e6caf2166 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Mon, 11 Jan 2016 16:01:28 +0000 Subject: [PATCH] 1452: Implement a GUI for StatMan Algorithms Importer Task-Url: https://support.d4science.org/issues/1452 Updated Code Generator git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@122186 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/rpc/StatAlgoImporterService.java | 2 + .../rpc/StatAlgoImporterServiceAsync.java | 2 + .../server/StatAlgoImporterServiceImpl.java | 29 ++++++++++ .../server/generator/AlgorithmGenerator.java | 3 +- .../server/generator/ProjectBuilder.java | 57 +++++++++++++++++++ .../server/storage/FilesStorage.java | 40 ++++++++++++- .../server/storage/ProjectArchiver.java | 2 +- 7 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java 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 6cc46ab..27e1a13 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 @@ -64,4 +64,6 @@ public interface StatAlgoImporterService extends RemoteService { public void saveCode(String code) throws StatAlgoImporterServiceException; + public void createAlgorithm() 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 627191b..a3a4c2a 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 @@ -55,4 +55,6 @@ public interface StatAlgoImporterServiceAsync { void saveCode(String code, AsyncCallback asyncCallback); + void createAlgorithm(AsyncCallback callback); + } 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 2c53002..eac468a 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 @@ -8,6 +8,7 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterService; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeReader; +import org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator.ProjectBuilder; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.ProjectArchiver; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData; @@ -351,5 +352,33 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements } } + + + @Override + public void createAlgorithm() throws StatAlgoImporterServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getAslSession(session); + logger.debug("createAlgorithm()"); + Project project = SessionUtil.getProjectSession(session); + if (project != null) { + ProjectBuilder projectBuilder=new ProjectBuilder(project, aslSession); + projectBuilder.build(); + } else { + throw new StatAlgoImporterServiceException("No project open!"); + } + + return; + } catch (StatAlgoImporterServiceException e) { + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("createAlgorithm(): " + 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 687b4bd..4c44ce6 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 @@ -40,8 +40,7 @@ public class AlgorithmGenerator { return "AlgorithmGenerator [project=" + project + "]"; } - public Path createAlgorithm() throws StatAlgoImporterServiceException, - IOException { + public Path createAlgorithm() throws StatAlgoImporterServiceException { try { Path tempFile = Files.createTempFile(project.getClassName(), 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 new file mode 100644 index 0000000..cb3f034 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/generator/ProjectBuilder.java @@ -0,0 +1,57 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; + +import org.gcube.application.framework.core.session.ASLSession; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class ProjectBuilder { + 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"; + + public static final Logger logger = LoggerFactory + .getLogger(ProjectBuilder.class); + + private Project project; + private ASLSession aslSession; + + public ProjectBuilder(Project project, ASLSession aslSession) { + this.project = project; + this.aslSession = aslSession; + } + + public void build() throws StatAlgoImporterServiceException { + AlgorithmGenerator algorithmGenerator = new AlgorithmGenerator(project); + Path algorithm = algorithmGenerator.createAlgorithm(); + + FilesStorage filesStorage = new FilesStorage(); + try { + filesStorage.saveItemOnWorkspace(aslSession.getUsername(), + Files.newInputStream(algorithm, StandardOpenOption.READ), + project.getClassName() + ALGORITHM_EXTENTION, + ALGORITHM_DESCRIPTION, ALGORITHM_MIMETYPE, project + .getProjectFolder().getItemDescription().getId()); + } catch (IOException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), + e); + } + + } + +} 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 5f1e149..a6720fe 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 @@ -80,7 +80,7 @@ public class FilesStorage { } - public void saveItemOnFolder(String user, InputStream inputStream, + public void saveStatisticalAlgorithmProject(String user, InputStream inputStream, String folderId) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -116,6 +116,44 @@ public class FilesStorage { } + + public void saveItemOnWorkspace(String user, InputStream inputStream, String name, + String description, String mimeType, + String folderId) throws StatAlgoImporterServiceException { + Workspace ws; + try { + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem workSpaceItem = ws.getItem(folderId); + if (!workSpaceItem.isFolder()) { + throw new StatAlgoImporterServiceException( + "Destination is not a folder!"); + } + + WorkspaceItem projectItem = ws.find( + name, folderId); + + if (projectItem == null) { + ws.createExternalFile(name, + description, + mimeType, inputStream, + folderId); + } else { + ws.updateItem(projectItem.getId(), inputStream); + } + + return; + } catch (WrongItemTypeException | WorkspaceFolderNotFoundException + | InternalErrorException | HomeNotFoundException + | ItemNotFoundException | InsufficientPrivilegesException + | ItemAlreadyExistException | WrongDestinationException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + } + + /** * */ 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 35024b7..4a6aa07 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 @@ -36,7 +36,7 @@ public class ProjectArchiver { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( byteArrayOutputStream.toByteArray()); FilesStorage filesStorage = new FilesStorage(); - filesStorage.saveItemOnFolder(aslSession.getUsername(), + filesStorage.saveStatisticalAlgorithmProject(aslSession.getUsername(), byteArrayInputStream, project.getProjectFolder() .getItemDescription().getId());