From be76132e5b8859577ba6df68a5744e8b329e8085 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Mon, 30 Jul 2018 13:36:06 +0000 Subject: [PATCH] ref 11724: SAI - Update to StorageHUB https://support.d4science.org/issues/11724 Updated to StorageHub git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@169988 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../server/blackbox/MainGenerator.java | 20 +- .../server/generator/AlgorithmGenerator.java | 2 + .../server/generator/ProjectBuilder.java | 205 ++++------------- .../server/storage/CodeSave.java | 25 +-- .../server/storage/DeploySave.java | 27 +-- .../server/storage/FilesStorage.java | 210 +++++++++++------- .../server/storage/ProjectArchiver.java | 37 +-- 7 files changed, 188 insertions(+), 338 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/blackbox/MainGenerator.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/blackbox/MainGenerator.java index c8d3510..4b28fc6 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/blackbox/MainGenerator.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/blackbox/MainGenerator.java @@ -8,8 +8,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; @@ -85,7 +83,7 @@ public class MainGenerator { // project.getProjectConfig().getLanguage(), // binarySoftware.getPublicLink()); // } else { - + logger.debug("Generate Script R"); producedScript = s.generateScript(input, output, binarySoftware.getName(), project.getProjectConfig().getLanguage()); @@ -99,10 +97,10 @@ public class MainGenerator { ////// FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem mainItem; + ItemDescription mainItemDescription; try { - mainItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), + mainItemDescription = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), Files.newInputStream(producedScript, StandardOpenOption.READ), "Main.R", R_DESCRIPTION + project.getProjectConfig().getLanguage(), R_MIMETYPE, @@ -113,18 +111,6 @@ public class MainGenerator { throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } - ItemDescription mainItemDescription; - try { - mainItemDescription = new ItemDescription(mainItem.getId(), mainItem.getName(), - mainItem.getOwner().getPortalLogin(), mainItem.getPath(), mainItem.getType().name()); - mainItemDescription.setPublicLink(mainItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - MainCode mainCode = new MainCode(mainItemDescription); project.setMainCode(mainCode); 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 ba5ad5e..6993d65 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 @@ -495,7 +495,9 @@ public class AlgorithmGenerator { logger.debug("ProjectInfo: " + project); String projectPath = project.getProjectFolder().getFolder().getPath(); String mainCodePath = project.getMainCode().getItemDescription().getPath(); + String projectFolderName=project.getProjectFolder().getFolder().getName(); logger.debug("ProjectPath: " + projectPath); + logger.debug("Project Folder Name: "+projectFolderName); logger.debug("MainCodePath: " + mainCodePath); String relativePath = project.getProjectFolder().getFolder().getName() 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 5ede51a..43ccfa9 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 @@ -15,9 +15,6 @@ import java.util.GregorianCalendar; import java.util.List; import org.apache.commons.io.FileUtils; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.blackbox.MainGenerator; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; @@ -186,22 +183,10 @@ public class ProjectBuilder { filesStorage.saveInputStreamInItem(serviceCredentials.getUserName(), project.getProjectTarget().getProjectDeploy().getPackageProject().getId(), inputStream); - WorkspaceItem packageProject = filesStorage.retrieveItemInfoOnWorkspace(serviceCredentials.getUserName(), + ItemDescription packageProjectItemDescription = filesStorage.retrieveItemInfoOnWorkspace( + serviceCredentials.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(false)); - } 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()); @@ -239,24 +224,11 @@ public class ProjectBuilder { project.getProjectTarget().getProjectDeploy().getCodeJar().getId()); } - WorkspaceItem deployableCodeJarItem = filesStorage.copyItemOnFolder(serviceCredentials.getUserName(), + ItemDescription dCodeJar = filesStorage.copyItemOnFolder(serviceCredentials.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(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } + logger.debug("DeployableCodeJarItem:" + dCodeJar); project.getProjectTarget().getProjectDeploy().setCodeJar(dCodeJar); logger.debug("ProjectDeploy: " + project.getProjectTarget().getProjectDeploy()); @@ -348,22 +320,12 @@ public class ProjectBuilder { filesStorage.deleteFolder(serviceCredentials.getUserName(), project.getProjectTarget().getFolder().getId(), STATISTICAL_ALGORITHM_DEPLOY_FOLDER_NAME); - WorkspaceFolder deployFolder = filesStorage.createFolder(serviceCredentials.getUserName(), + ItemDescription deployFolder = filesStorage.createFolder(serviceCredentials.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); + ProjectDeploy projectDeploy = new ProjectDeploy(deployFolder); project.getProjectTarget().setProjectDeploy(projectDeploy); } @@ -440,13 +402,12 @@ public class ProjectBuilder { } } - + private void createShareInfo() throws StatAlgoImporterServiceException { - ProjectShareInfoBuilder projectShareInfoBuilder=new ProjectShareInfoBuilder(serviceCredentials, project); + ProjectShareInfoBuilder projectShareInfoBuilder = new ProjectShareInfoBuilder(serviceCredentials, project); projectShareInfoBuilder.create(); - + } - private void createProjectPackage() throws StatAlgoImporterServiceException { List idsToExclude = new ArrayList(); @@ -467,32 +428,19 @@ public class ProjectBuilder { 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(); + logger.error("Error input stream generation for project package file: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } - WorkspaceItem projectPackageItem; + ItemDescription packageUrl; - projectPackageItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), inputStream, + packageUrl = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), inputStream, project.getInputData().getProjectInfo().getAlgorithmNameToClassName() + PROJECT_PACKAGE_EXTENTION, PROJECT_PACKAGE_DESCRIPTION, PROJECT_PACKAGE_MIMETYPE, project.getProjectTarget().getProjectDeploy().getFolder().getId()); - logger.debug("ProjectPackageItem:" + projectPackageItem); + logger.debug("ProjectPackageItem:" + packageUrl); - ItemDescription packageUrl; - try { - packageUrl = new ItemDescription(projectPackageItem.getId(), projectPackageItem.getName(), - projectPackageItem.getOwner().getPortalLogin(), projectPackageItem.getPath(), - projectPackageItem.getType().name()); - packageUrl.setPublicLink(projectPackageItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } project.getProjectTarget().getProjectDeploy().setPackageProject(packageUrl); } @@ -501,22 +449,12 @@ public class ProjectBuilder { filesStorage.deleteFolder(serviceCredentials.getUserName(), project.getProjectFolder().getFolder().getId(), STATISTICAL_ALGORITHM_TARGET_FOLDER_NAME); - WorkspaceFolder targetFolder = filesStorage.createFolder(serviceCredentials.getUserName(), + ItemDescription targetFolder = filesStorage.createFolder(serviceCredentials.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); + ProjectTarget projectTarget = new ProjectTarget(targetFolder); project.setProjectTarget(projectTarget); } @@ -526,67 +464,45 @@ public class ProjectBuilder { filesStorage.deleteFolder(serviceCredentials.getUserName(), project.getProjectTarget().getFolder().getId(), STATISTICAL_ALGORITHM_COMPILE_FOLDER_NAME); - WorkspaceFolder compileFolder = filesStorage.createFolder(serviceCredentials.getUserName(), + ItemDescription compileFolder = filesStorage.createFolder(serviceCredentials.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); + ProjectCompile projectCompile = new ProjectCompile(compileFolder); project.getProjectTarget().setProjectCompile(projectCompile); } private void createBackupFolder() throws StatAlgoImporterServiceException { FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem backupFolder = filesStorage.find(serviceCredentials.getUserName(), + ItemDescription backupFolder = filesStorage.find(serviceCredentials.getUserName(), project.getProjectFolder().getFolder().getId(), STATISTICAL_ALGORITHM_BACKUP_FOLDER_NAME); if (backupFolder == null) { - WorkspaceFolder newBackupFolder = filesStorage.createFolder(serviceCredentials.getUserName(), + ItemDescription newBackupFolder = filesStorage.createFolder(serviceCredentials.getUserName(), project.getProjectFolder().getFolder().getId(), STATISTICAL_ALGORITHM_BACKUP_FOLDER_NAME, STATISTICAL_ALGORITHM_BACKUP_FOLDER_DESCRIPTION); logger.debug("BackupFolder:" + backupFolder); - try { - backupFolderId = newBackupFolder.getId(); - } catch (InternalErrorException e) { - logger.error("Error retrieving Backup Folder Id: " + e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException("Error retrieving Backup Folder Id", e); - } + backupFolderId = newBackupFolder.getId(); } else { - try { - backupFolderId = backupFolder.getId(); - } catch (InternalErrorException e) { - logger.error("Error retrieving Backup Folder Id: " + e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException("Error retrieving Backup Folder Id", e); - } + backupFolderId = backupFolder.getId(); + } } private void createAlgorithm() throws StatAlgoImporterServiceException { - AlgorithmGenerator algorithmGenerator = new AlgorithmGenerator(project,serviceCredentials); + AlgorithmGenerator algorithmGenerator = new AlgorithmGenerator(project, serviceCredentials); algorithmJava = algorithmGenerator.createAlgorithm(); FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem algorithmItem; + ItemDescription codeSource; try { - algorithmItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), + codeSource = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), Files.newInputStream(algorithmJava, StandardOpenOption.READ), project.getInputData().getProjectInfo().getAlgorithmNameToClassName() + ALGORITHM_EXTENTION, ALGORITHM_DESCRIPTION, ALGORITHM_MIMETYPE, @@ -597,18 +513,6 @@ public class ProjectBuilder { throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } - ItemDescription codeSource; - try { - codeSource = new ItemDescription(algorithmItem.getId(), algorithmItem.getName(), - algorithmItem.getOwner().getPortalLogin(), algorithmItem.getPath(), algorithmItem.getType().name()); - codeSource.setPublicLink(algorithmItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - project.getProjectTarget().getProjectCompile().setCodeSource(codeSource); logger.debug("ProjectCompile: " + project.getProjectTarget().getProjectCompile()); @@ -619,31 +523,18 @@ public class ProjectBuilder { infoTXT = integrationInfoGenerator.createInfo(); FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem infoItem; + ItemDescription integrationItemDescription; try { - infoItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), + integrationItemDescription = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), Files.newInputStream(infoTXT, StandardOpenOption.READ), INFO_NAME + INFO_EXTENTION, INFO_DESCRIPTION, INFO_MIMETYPE, project.getProjectTarget().getProjectCompile().getFolder().getId()); } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } - ItemDescription integrationItemDescription; - try { - integrationItemDescription = new ItemDescription(infoItem.getId(), infoItem.getName(), - infoItem.getOwner().getPortalLogin(), infoItem.getPath(), infoItem.getType().name()); - integrationItemDescription.setPublicLink(infoItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - project.getProjectTarget().getProjectCompile().setIntegrationInfo(integrationItemDescription); logger.debug("ProjectCompile: " + project.getProjectTarget().getProjectCompile()); @@ -680,8 +571,7 @@ public class ProjectBuilder { try { Files.copy(algorithmJava, algorithmTempFile); } catch (IOException e) { - logger.error("Error in alogrithm java copy in package directory: " + e.getLocalizedMessage()); - e.printStackTrace(); + logger.error("Error in alogrithm java copy in package directory: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } @@ -689,8 +579,7 @@ public class ProjectBuilder { try { Files.copy(infoTXT, infoTempFile); } catch (IOException e) { - logger.error("Error in info copy in temp directory: " + e.getLocalizedMessage()); - e.printStackTrace(); + logger.error("Error in info copy in temp directory: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } @@ -699,8 +588,7 @@ public class ProjectBuilder { try { Files.delete(algorithmTempFile); } catch (IOException e) { - logger.error("Error in delete java file in package directory: " + e.getLocalizedMessage()); - e.printStackTrace(); + logger.error("Error in delete java file in package directory: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } @@ -711,9 +599,8 @@ public class ProjectBuilder { FileUtils.cleanDirectory(tempDirectory.toFile()); FileUtils.deleteDirectory(tempDirectory.toFile()); } catch (IOException e) { - logger.error("Error in delete temp directory: " + e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); + logger.error("Error in delete temp directory: " + e.getLocalizedMessage(), e); + throw new StatAlgoImporterServiceException("Error deleting temp directory: " + e.getLocalizedMessage(), e); } return; @@ -725,32 +612,20 @@ public class ProjectBuilder { project.getInputData().getProjectInfo().getAlgorithmNameToClassName() + JAR_EXTENTION); FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem codeJarItem; + ItemDescription codeJarItemDescription; + ; try { - codeJarItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), + codeJarItemDescription = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), Files.newInputStream(codeJar, StandardOpenOption.READ), project.getInputData().getProjectInfo().getAlgorithmNameToClassName() + JAR_EXTENTION, CODE_JAR_DESCRIPTION, CODE_JAR_MIMETYPE, project.getProjectTarget().getProjectCompile().getFolder().getId()); } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } - ItemDescription codeJarItemDescription; - try { - codeJarItemDescription = new ItemDescription(codeJarItem.getId(), codeJarItem.getName(), - codeJarItem.getOwner().getPortalLogin(), codeJarItem.getPath(), codeJarItem.getType().name()); - codeJarItemDescription.setPublicLink(codeJarItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - project.getProjectTarget().getProjectCompile().setCodeJar(codeJarItemDescription); logger.debug("ProjectCompile: " + project.getProjectTarget().getProjectCompile()); @@ -791,8 +666,7 @@ public class ProjectBuilder { } } catch (IOException | InterruptedException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } @@ -831,8 +705,7 @@ public class ProjectBuilder { logger.debug("Create Algo Jar: Exit Value is " + exitValue); } catch (IOException | InterruptedException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/CodeSave.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/CodeSave.java index fbb1bbc..2f26e70 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/CodeSave.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/CodeSave.java @@ -5,8 +5,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; @@ -35,8 +33,8 @@ public class CodeSave { filesStorage.saveStringInItem(serviceCredentials.getUserName(), file.getId(), code); } - - public ItemDescription saveNew(ServiceCredentials serviceCredentials, ItemDescription file, String code, String folderId) throws StatAlgoImporterServiceException { + public ItemDescription saveNew(ServiceCredentials serviceCredentials, ItemDescription file, String code, + String folderId) throws StatAlgoImporterServiceException { Path tempFile = createTempFile(file, code); ItemDescription codeItem = saveInWorkspace(tempFile, serviceCredentials, file, folderId); return codeItem; @@ -52,7 +50,7 @@ public class CodeSave { return tempFile; } catch (IOException e) { - logger.error(e.getLocalizedMessage(),e); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } } @@ -60,28 +58,17 @@ public class CodeSave { private ItemDescription saveInWorkspace(Path tempFile, ServiceCredentials serviceCredentials, ItemDescription file, String folderId) throws StatAlgoImporterServiceException { FilesStorage filesStorage = new FilesStorage(); - WorkspaceItem worksapceItem; + ItemDescription item; try { - worksapceItem = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), + item = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(), Files.newInputStream(tempFile, StandardOpenOption.READ), file.getName(), ALGORITHM_DESCRIPTION, ALGORITHM_MIMETYPE, folderId); } catch (IOException e) { - logger.error(e.getLocalizedMessage(),e); + logger.error(e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } - ItemDescription item; - try { - item = new ItemDescription(worksapceItem.getId(), worksapceItem.getName(), - worksapceItem.getOwner().getPortalLogin(), worksapceItem.getPath(), worksapceItem.getType().name()); - item.setPublicLink(worksapceItem.getPublicLink(false)); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage(),e); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - return item; } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/DeploySave.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/DeploySave.java index 6048729..cb3e9f7 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/DeploySave.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/DeploySave.java @@ -9,7 +9,6 @@ import java.nio.file.StandardOpenOption; import java.util.Arrays; import java.util.List; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.info.InfoData; @@ -40,14 +39,13 @@ public class DeploySave { private InfoData infoData; private String infoText; private ItemDescription codeJarAdminCopy; - public DeploySave(ServiceCredentials serviceCredentials, Project project, InfoData infoData) { this.serviceCredentials = serviceCredentials; this.project = project; this.infoData = infoData; this.infoText = null; - this.codeJarAdminCopy=null; + this.codeJarAdminCopy = null; filesStorage = new FilesStorage(); } @@ -58,21 +56,11 @@ public class DeploySave { InputStream codeJarInputStream = filesStorage.retrieveItemOnWorkspace(serviceCredentials.getUserName(), codeJar.getId()); - WorkspaceItem codeJarItem = filesStorage.createItemOnWorkspaceHowAdmin(ADMIN_USER, codeJarInputStream, - codeJar.getName(), CODE_JAR_DESCRIPTION, CODE_JAR_MIMETYPE, DESTINATION_FOLDER); + codeJarAdminCopy = filesStorage.createItemOnWorkspaceHowAdmin(ADMIN_USER, codeJarInputStream, codeJar.getName(), + CODE_JAR_DESCRIPTION, CODE_JAR_MIMETYPE, DESTINATION_FOLDER); - try { - codeJarAdminCopy = new ItemDescription(codeJarItem.getId(), codeJarItem.getName(), - codeJarItem.getOwner().getPortalLogin(), codeJarItem.getPath(), codeJarItem.getType().name()); - codeJarAdminCopy.setPublicLink(codeJarItem.getPublicLink(false)); - } catch (Throwable e) { - logger.error(e.getLocalizedMessage(), e); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - createInfoText(); - + try { int codeJarNamelenght = codeJar.getName().length(); String codeJarName; @@ -88,8 +76,8 @@ public class DeploySave { Files.write(reportInstallTempFile, lines, Charset.defaultCharset(), StandardOpenOption.WRITE); logger.debug(reportInstallTempFile.toString()); InputStream reportInstallInputStream = Files.newInputStream(reportInstallTempFile); - - filesStorage.createItemOnWorkspaceHowAdmin(ADMIN_USER, reportInstallInputStream, + + filesStorage.createItemOnWorkspaceHowAdmin(ADMIN_USER, reportInstallInputStream, codeJarName + "_install.txt", codeJarName + "_install.txt", TXT_MIMETYPE, DESTINATION_FOLDER); } catch (IOException e) { @@ -126,7 +114,4 @@ public class DeploySave { return infoData; } - - - } 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 be96713..7e9624e 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 @@ -19,11 +19,15 @@ import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile; import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspaceSharedFolder; import org.gcube.common.homelibrary.util.zip.ZipUtil; +import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer; +import org.gcube.common.storagehub.client.dsl.ListResolver; import org.gcube.common.storagehub.client.dsl.OpenResolver; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.model.items.Item; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +40,8 @@ import org.slf4j.LoggerFactory; public class FilesStorage { - private static final String STATISTICAL_ALGORITHM_PROJECT_MIMETYPE = "text/xml"; + // 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"; @@ -75,11 +80,11 @@ public class FilesStorage { * Item id * @param folderId * Folder id - * @return workspace item + * @return Item description * @throws StatAlgoImporterServiceException * exception */ - public WorkspaceItem copyItemOnFolder(String user, String itemId, String folderId) + public ItemDescription copyItemOnFolder(String user, String itemId, String folderId) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -94,7 +99,11 @@ public class FilesStorage { WorkspaceItem item = ws.copy(itemId, folderId); - return item; + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), + item.getOwner().getPortalLogin(), item.getPath(), item.getType().name()); + itemDescription.setPublicLink(item.getPublicLink(false)); + + return itemDescription; } catch (Throwable e) { logger.error("Copy item on folder on workspace: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -112,11 +121,11 @@ public class FilesStorage { * Destination folder id * @param newName * New name - * @return workspace item + * @return Item description * @throws StatAlgoImporterServiceException * exception */ - public WorkspaceItem copyItemOnFolderWithNewName(String user, String itemId, String folderId, String newName) + public ItemDescription copyItemOnFolderWithNewName(String user, String itemId, String folderId, String newName) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -132,7 +141,10 @@ public class FilesStorage { WorkspaceItem item = ws.copy(itemId, newName, folderId); - return item; + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), + item.getOwner().getPortalLogin(), item.getPath(), item.getType().name()); + + return itemDescription; } catch (Throwable e) { logger.error("Copy item on folder with new name on workspace: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -151,7 +163,7 @@ public class FilesStorage { */ public void deleteItemOnFolder(String user, String itemId) throws StatAlgoImporterServiceException { try { - logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId+"]"); + logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId + "]"); StorageHubClient shc = new StorageHubClient(); OpenResolver openResolver = shc.open(itemId); @@ -214,11 +226,11 @@ public class FilesStorage { * folder name * @param folderDescription * folder description - * @return workspace folder + * @return Item description * @throws StatAlgoImporterServiceException * exception */ - public WorkspaceFolder createFolder(String user, String parentId, String folderName, String folderDescription) + public ItemDescription createFolder(String user, String parentId, String folderName, String folderDescription) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -234,7 +246,11 @@ public class FilesStorage { WorkspaceFolder projectTargetFolder = ws.createFolder(folderName, folderDescription, parentId); - return projectTargetFolder; + ItemDescription itemDescription = new ItemDescription(projectTargetFolder.getId(), + projectTargetFolder.getName(), projectTargetFolder.getOwner().getPortalLogin(), + projectTargetFolder.getPath(), projectTargetFolder.getType().name()); + + return itemDescription; } catch (Throwable e) { logger.error("Create folder on workspace: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -251,24 +267,35 @@ public class FilesStorage { * Parent id * @param name * Name - * @return workspace item + * @return Item description * @throws StatAlgoImporterServiceException * Exception */ - public WorkspaceItem find(String user, String parentId, String name) throws StatAlgoImporterServiceException { - Workspace ws; + public ItemDescription find(String user, String parentId, String name) throws StatAlgoImporterServiceException { try { logger.info("Find: [user=" + user + ", parentId=" + parentId + ", name=" + name + "]"); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolver = shc.open(parentId); - ws = HomeLibrary.getUserWorkspace(user); + FolderContainer folderContainer = openResolver.asFolder(); + ListResolver listResolver = folderContainer.findByName(name); + List items = listResolver.getItems(); + if (items == null || items.isEmpty()) { + logger.debug("No item found"); + return null; + } else { + Item item = items.get(0); + logger.debug("Item: " + item); + if (item != null) { + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), item.getClass().getSimpleName()); - WorkspaceItem workSpaceItem = ws.getItem(parentId); - if (!workSpaceItem.isFolder()) { - throw new StatAlgoImporterServiceException("No valid project folder!"); + return itemDescription; + } else { + return null; + } } - return ws.find(name, parentId); - } catch (Throwable e) { logger.error("Find: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -277,41 +304,6 @@ public class FilesStorage { } - /** - * - * @param user - * User - * @param parentName - * Parent name - * @param name - * Name - * @return WorkspaceItem - * @throws StatAlgoImporterServiceException - * Exception - */ - public WorkspaceItem findInParentName(String user, String parentName, String name) - throws StatAlgoImporterServiceException { - Workspace ws; - try { - logger.info("Find by parent name: [user=" + user + ", parentName=" + parentName + ", name=" + name + "]"); - - ws = HomeLibrary.getUserWorkspace(user); - - WorkspaceItem parentItem = ws.getItem(parentName); - if (!parentItem.isFolder()) { - throw new StatAlgoImporterServiceException("No valid folder: " + parentName + "!"); - } - - return ws.find(name, parentItem.getId()); - - } catch (Throwable e) { - logger.error("Find by parent name: " + e.getLocalizedMessage(), e); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - - } - /** * * @param user @@ -325,28 +317,27 @@ public class FilesStorage { */ public void saveStatisticalAlgorithmProject(String user, InputStream inputStream, String folderId) throws StatAlgoImporterServiceException { - Workspace ws; try { logger.info("Save project: [user=" + user + ", folderId=" + folderId + "]"); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolver = shc.open(folderId); - ws = HomeLibrary.getUserWorkspace(user); - - WorkspaceItem workSpaceItem = ws.getItem(folderId); - if (!workSpaceItem.isFolder()) { - throw new StatAlgoImporterServiceException("Destination is not a folder!"); - } - - WorkspaceItem projectItem = ws.find(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, folderId); - - if (projectItem == null) { - ws.createExternalFile(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, - STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION, STATISTICAL_ALGORITHM_PROJECT_MIMETYPE, - inputStream, folderId); + FolderContainer folderContainer = openResolver.asFolder(); + ListResolver listResolver = folderContainer.findByName(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME); + List items = listResolver.getItems(); + if (items == null || items.isEmpty()) { + logger.debug("No item found"); + FileContainer fileContainer = folderContainer.uploadFile(inputStream, + STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION); + logger.debug("Item uploaded: " + fileContainer.get().getId()); } else { - ws.updateItem(projectItem.getId(), inputStream); - } + Item item = items.get(0); + logger.debug("Item found: " + item); + FileContainer fileContainer = folderContainer.uploadFile(inputStream, + STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION); + logger.debug("Item updated: " + fileContainer.get().getId()); - return; + } } catch (Throwable e) { logger.error("Save project on workspace: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -419,7 +410,7 @@ public class FilesStorage { * @throws StatAlgoImporterServiceException * Exceptioon */ - public WorkspaceItem createItemOnWorkspace(String user, InputStream inputStream, String name, String description, + public ItemDescription createItemOnWorkspace(String user, InputStream inputStream, String name, String description, String mimeType, String folderId) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -436,7 +427,11 @@ public class FilesStorage { ExternalFile workspaceItem = ws.createExternalFile(name, description, mimeType, inputStream, folderId); - return workspaceItem; + ItemDescription itemDescription = new ItemDescription(workspaceItem.getId(), workspaceItem.getName(), + workspaceItem.getOwner().getPortalLogin(), workspaceItem.getPath(), workspaceItem.getType().name()); + itemDescription.setPublicLink(workspaceItem.getPublicLink(false)); + + return itemDescription; } catch (Throwable e) { logger.error("Create item on workspace: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -458,11 +453,11 @@ public class FilesStorage { * MimeType * @param folderName * Folder Path - * @return WorkspaceItem + * @return Item description * @throws StatAlgoImporterServiceException * Exception */ - public WorkspaceItem createItemOnWorkspaceHowAdmin(String user, InputStream inputStream, String name, + public ItemDescription createItemOnWorkspaceHowAdmin(String user, InputStream inputStream, String name, String description, String mimeType, String folderName) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -478,14 +473,27 @@ public class FilesStorage { } WorkspaceItem codeJar = ws.find(name, folderItem.getId()); - + ItemDescription itemDescription; if (codeJar == null) { - return ws.createExternalFile(name, description, mimeType, inputStream, folderItem.getId()); + WorkspaceItem item = ws.createExternalFile(name, description, mimeType, inputStream, + folderItem.getId()); + + itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner().getPortalLogin(), + item.getPath(), item.getType().name()); + itemDescription.setPublicLink(item.getPublicLink(false)); + } else { + ws.updateItem(codeJar.getId(), inputStream); - return codeJar; + + itemDescription = new ItemDescription(codeJar.getId(), codeJar.getName(), + codeJar.getOwner().getPortalLogin(), codeJar.getPath(), codeJar.getType().name()); + itemDescription.setPublicLink(codeJar.getPublicLink(false)); + } + return itemDescription; + } catch (Throwable e) { logger.error("Create item on workspace how admin: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); @@ -573,11 +581,11 @@ public class FilesStorage { * User * @param itemId * Item id - * @return Workspace Item + * @return Item description * @throws StatAlgoImporterServiceException * Exception */ - public WorkspaceItem retrieveItemInfoOnWorkspace(String user, String itemId) + public ItemDescription retrieveItemInfoOnWorkspace(String user, String itemId) throws StatAlgoImporterServiceException { Workspace ws; try { @@ -585,8 +593,13 @@ public class FilesStorage { ws = HomeLibrary.getUserWorkspace(user); - WorkspaceItem workSpaceItem = ws.getItem(itemId); - return workSpaceItem; + WorkspaceItem item = ws.getItem(itemId); + + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), + item.getOwner().getPortalLogin(), item.getPath(), item.getType().name()); + itemDescription.setPublicLink(item.getPublicLink(false)); + + return itemDescription; } catch (Throwable e) { logger.error("Retrieve item info on workspace: " + e.getLocalizedMessage(), e); @@ -594,6 +607,37 @@ public class FilesStorage { } } + /** + * + * @param user + * User + * @param itemId + * Item id + * @return Item description + * @throws StatAlgoImporterServiceException + * Exception + */ + public ItemDescription retrieveFolderInfoOnWorkspace(String user, String itemId) + throws StatAlgoImporterServiceException { + Workspace ws; + try { + logger.info("Retrieve folder info on workspace: [user=" + user + ", itemId=" + itemId + "]"); + + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem item = ws.getItem(itemId); + + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), + item.getOwner().getPortalLogin(), item.getPath(), item.getType().name()); + + return itemDescription; + + } catch (Throwable e) { + logger.error("Retrieve folder info on workspace: " + e.getLocalizedMessage(), e); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + } + /** * * @param user 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 d101db2..248dd4e 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 @@ -6,8 +6,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.MainCode; @@ -65,23 +63,10 @@ public class ProjectArchiver { Project project = (Project) xmlDecoder.readObject(); xmlDecoder.close(); - WorkspaceItem projectFolderItem = filesStorage - .retrieveItemInfoOnWorkspace(serviceCredentials.getUserName(), + newProjectFolder = filesStorage + .retrieveFolderInfoOnWorkspace(serviceCredentials.getUserName(), newProjectFolder.getId()); - try { - newProjectFolder.setId(projectFolderItem.getId()); - newProjectFolder.setName(projectFolderItem.getName()); - newProjectFolder.setOwner(projectFolderItem.getOwner() - .getPortalLogin()); - newProjectFolder.setPath(projectFolderItem.getPath()); - newProjectFolder.setType(projectFolderItem.getType().name()); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); - - } - + if (project != null && project.getProjectFolder() != null && newProjectFolder.compareInfo(project.getProjectFolder() @@ -94,22 +79,10 @@ public class ProjectArchiver { if (project != null && project.getMainCode() != null && project.getMainCode().getItemDescription() != null) { - WorkspaceItem mainCodeItem = filesStorage + ItemDescription newMainCodeItemDescription = filesStorage .retrieveItemInfoOnWorkspace(serviceCredentials.getUserName(), project.getMainCode().getItemDescription().getId()); - ItemDescription newMainCodeItemDescription; - try { - newMainCodeItemDescription = new ItemDescription( - mainCodeItem.getId(), mainCodeItem.getName(), - mainCodeItem.getOwner().getPortalLogin(), - mainCodeItem.getPath(), mainCodeItem.getType().name()); - } catch (InternalErrorException e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); - throw new StatAlgoImporterServiceException( - e.getLocalizedMessage()); - - } + if (newMainCodeItemDescription.compareInfo(project.getMainCode() .getItemDescription())) { } else {