diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputOutputVariablesPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputOutputVariablesPanel.java index 5743646..19d2784 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputOutputVariablesPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputOutputVariablesPanel.java @@ -268,6 +268,7 @@ public class InputOutputVariablesPanel extends ContentPanel { TextField defaultValueColumnEditing = new TextField(); defaultValueColumnEditing.addValidator(new RegExValidator("^[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*$", "Attention character \" is not allowed")); + defaultValueColumnEditing.setAllowBlank(false); gridInputOutputVariablesEditing = new GridRowEditing( gridInputOutputVariables); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java index bf8a5b7..2e509ce 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/SessionUtil.java @@ -13,6 +13,7 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.authorization.library.provider.UserInfo; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeFileUploadSession; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.social.Recipient; @@ -69,7 +70,8 @@ public class SessionUtil { return aslSession; } - public static String getToken(ASLSession aslSession) { + public static String getToken(ASLSession aslSession) + throws StatAlgoImporterServiceException { String token = null; if (Constants.DEBUG_MODE) { List userRoles = new ArrayList<>(); @@ -78,8 +80,17 @@ public class SessionUtil { * if (aslSession.getUsername().compareTo("lucio.lelii") == 0) * userRoles.add("VRE-Manager"); */ - token = authorizationService().build().generate( - aslSession.getUsername(), userRoles); + try { + token = authorizationService().generateUserToken( + new UserInfo(aslSession.getUsername(), userRoles), + aslSession.getScope()); + } catch (Exception e) { + logger.error("Error generating the token for test: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new StatAlgoImporterServiceException("Error generating the token for test: " + + e.getLocalizedMessage()); + } } else { token = aslSession.getSecurityToken(); @@ -134,8 +145,7 @@ public class SessionUtil { // public static void setCodeFileUploadSession(HttpSession httpSession, - CodeFileUploadSession s) - throws StatAlgoImporterServiceException { + CodeFileUploadSession s) throws StatAlgoImporterServiceException { CodeFileUploadSession session = (CodeFileUploadSession) httpSession .getAttribute(SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION); @@ -144,7 +154,7 @@ public class SessionUtil { .removeAttribute(SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION); httpSession.setAttribute( SessionConstants.IMPORT_CODE_FILE_UPLOAD_SESSION, s); - + } public static CodeFileUploadSession getCodeFileUploadSession( 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 21faf30..b2a3e7b 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 @@ -9,7 +9,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.GregorianCalendar; import java.util.List; import org.apache.commons.io.FileUtils; @@ -40,7 +42,10 @@ public class ProjectBuilder { 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 STATISTICAL_ALGORITHM_BACKUP_FOLDER_NAME = "Backup"; + private static final String STATISTICAL_ALGORITHM_BACKUP_FOLDER_DESCRIPTION = "Project Backup"; + + 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"; @@ -62,13 +67,18 @@ public class ProjectBuilder { private static final String CODE_JAR_DESCRIPTION = "Statistical Algorithm Jar"; private static final String JAR_EXTENTION = ".jar"; + private static final SimpleDateFormat sdf = new SimpleDateFormat( + "yyyyMMdd_HHmmss"); + public static final Logger logger = LoggerFactory .getLogger(ProjectBuilder.class); private Project project; + private String backupFolderId; private ASLSession aslSession; private Path algorithmJava; private Path infoTXT; + public ProjectBuilder(Project project, ASLSession aslSession) { this.project = project; @@ -77,6 +87,7 @@ public class ProjectBuilder { public Project buildTarget() throws StatAlgoImporterServiceException { checkInfoForBuild(); + createBackup(); createTargetFolder(); createDeployFolder(); createProjectPackage(); @@ -102,6 +113,7 @@ public class ProjectBuilder { } + public Project buildDeploy() throws StatAlgoImporterServiceException { checkInfoForDeploy(); copyJarInDeploy(); @@ -110,15 +122,25 @@ public class ProjectBuilder { public Project buildRepackage() throws StatAlgoImporterServiceException { checkInfoForRepackage(); + createBackupOfPackageProject(); repackageProjectPackage(); return project; } + private void createBackup() throws StatAlgoImporterServiceException { + createBackupOfPackageProject(); + } + + private void repackageProjectPackage() throws StatAlgoImporterServiceException { + List idsToExclude = new ArrayList(); + idsToExclude.add(backupFolderId); + + FilesStorage filesStorage = new FilesStorage(); - List idsToExclude = new ArrayList(); + if (project.getProjectTarget() != null && project.getProjectTarget().getFolder() != null && project.getProjectTarget().getFolder().getId() != null @@ -157,7 +179,7 @@ public class ProjectBuilder { packageProject.getOwner().getPortalLogin(), packageProject.getPath(), packageProject.getType().name()); packageProjectItemDescription.setPublicLink(packageProject - .getPublicLink(true)); + .getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -172,6 +194,37 @@ public class ProjectBuilder { } + private void createBackupOfPackageProject() + throws StatAlgoImporterServiceException { + logger.debug("Create Backup of PackageProject"); + if (project.getProjectTarget() != null + && project.getProjectTarget().getProjectDeploy() != null + && project.getProjectTarget().getProjectDeploy() + .getPackageProject() != null + && project.getProjectTarget().getProjectDeploy() + .getPackageProject().getId() != null + && !project.getProjectTarget().getProjectDeploy() + .getPackageProject().getId().isEmpty()) { + + createBackupFolder(); + + FilesStorage filesStorage = new FilesStorage(); + + GregorianCalendar now = new GregorianCalendar(); + + String packageProjectNewName = project.getInputData() + .getProjectInfo().getAlgorithmNameToClassName() + + "_backup_" + + sdf.format(now.getTime()) + + PROJECT_PACKAGE_EXTENTION; + + filesStorage.copyItemOnFolderWithNewName(aslSession.getUsername(), + project.getProjectTarget().getProjectDeploy() + .getPackageProject().getId(), backupFolderId, packageProjectNewName); + } + + } + private void copyJarInDeploy() throws StatAlgoImporterServiceException { FilesStorage filesStorage = new FilesStorage(); if (project.getProjectTarget().getProjectDeploy().getCodeJar() != null @@ -200,7 +253,7 @@ public class ProjectBuilder { .getOwner().getPortalLogin(), deployableCodeJarItem.getPath(), deployableCodeJarItem .getType().name()); - dCodeJar.setPublicLink(deployableCodeJarItem.getPublicLink(true)); + dCodeJar.setPublicLink(deployableCodeJarItem.getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -409,9 +462,12 @@ public class ProjectBuilder { } private void createProjectPackage() throws StatAlgoImporterServiceException { + List idsToExclude = new ArrayList(); + idsToExclude.add(backupFolderId); + FilesStorage filesStorage = new FilesStorage(); - List idsToExclude = new ArrayList(); + if (project.getProjectTarget() != null && project.getProjectTarget().getFolder() != null && project.getProjectTarget().getFolder().getId() != null @@ -452,7 +508,7 @@ public class ProjectBuilder { projectPackageItem.getName(), projectPackageItem.getOwner() .getPortalLogin(), projectPackageItem.getPath(), projectPackageItem.getType().name()); - packageUrl.setPublicLink(projectPackageItem.getPublicLink(true)); + packageUrl.setPublicLink(projectPackageItem.getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -523,6 +579,43 @@ public class ProjectBuilder { project.getProjectTarget().setProjectCompile(projectCompile); } + private void createBackupFolder() throws StatAlgoImporterServiceException { + FilesStorage filesStorage = new FilesStorage(); + + WorkspaceItem backupFolder=filesStorage.find(aslSession.getUsername(), project + .getProjectFolder().getFolder().getId(), STATISTICAL_ALGORITHM_BACKUP_FOLDER_NAME); + + if(backupFolder==null){ + WorkspaceFolder newBackupFolder = filesStorage.createFolder( + aslSession.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); + } + + } 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); + } + } + + + + } + + private void createAlgorithm() throws StatAlgoImporterServiceException { AlgorithmGenerator algorithmGenerator = new AlgorithmGenerator(project); algorithmJava = algorithmGenerator.createAlgorithm(); @@ -551,7 +644,7 @@ public class ProjectBuilder { algorithmItem.getName(), algorithmItem.getOwner() .getPortalLogin(), algorithmItem.getPath(), algorithmItem.getType().name()); - codeSource.setPublicLink(algorithmItem.getPublicLink(true)); + codeSource.setPublicLink(algorithmItem.getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -594,7 +687,7 @@ public class ProjectBuilder { infoItem.getName(), infoItem.getOwner().getPortalLogin(), infoItem.getPath(), infoItem.getType().name()); integrationItemDescription.setPublicLink(infoItem - .getPublicLink(true)); + .getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -729,7 +822,7 @@ public class ProjectBuilder { .getPortalLogin(), codeJarItem.getPath(), codeJarItem.getType().name()); codeJarItemDescription.setPublicLink(codeJarItem - .getPublicLink(true)); + .getPublicLink(false)); } catch (InternalErrorException e) { logger.error(e.getLocalizedMessage()); e.printStackTrace(); @@ -749,9 +842,9 @@ public class ProjectBuilder { try { - ProcessBuilder pb = new ProcessBuilder("javac", "-encoding", "utf-8","-cp", - tempDirectory.toAbsolutePath().toString() + "/*", - packageHome.toAbsolutePath().toString() + ProcessBuilder pb = new ProcessBuilder("javac", "-encoding", + "utf-8", "-cp", tempDirectory.toAbsolutePath().toString() + + "/*", packageHome.toAbsolutePath().toString() + File.separator + project.getInputData().getProjectInfo() .getAlgorithmNameToClassName() 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 125627d..2df6acf 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 @@ -117,6 +117,49 @@ public class FilesStorage { } } + /** + * + * @param user + * User + * @param itemId + * Item id + * @param folderId + * Destination folder id + * @param newName + * New name + * + * @throws StatAlgoImporterServiceException + */ + public WorkspaceItem copyItemOnFolderWithNewName(String user, + String itemId, String folderId, String newName) + 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 item = ws.copy(itemId, newName, folderId); + + return item; + } catch (WrongDestinationException | ItemAlreadyExistException + | InsufficientPrivilegesException + | WorkspaceFolderNotFoundException | InternalErrorException + | HomeNotFoundException | ItemNotFoundException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + } + + + + + /** * * @param user @@ -218,6 +261,39 @@ public class FilesStorage { } + /** + * + * @param user + * User + * @param parentId + * Destination folder id + * @return Folder + * @throws StatAlgoImporterServiceException + */ + public WorkspaceItem find(String user, String parentId, String name) + throws StatAlgoImporterServiceException { + Workspace ws; + try { + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem workSpaceItem = ws.getItem(parentId); + if (!workSpaceItem.isFolder()) { + throw new StatAlgoImporterServiceException( + "No valid project folder!"); + } + + return ws.find(name, parentId); + + } catch (WorkspaceFolderNotFoundException | InternalErrorException + | HomeNotFoundException | ItemNotFoundException + | WrongItemTypeException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + + } + + } + /** * * @param user @@ -503,7 +579,7 @@ public class FilesStorage { org.gcube.common.homelibrary.home.workspace.folder.items.File gcubeItem = ((org.gcube.common.homelibrary.home.workspace.folder.items.File) wi); is = gcubeItem.getData(); return is; - + } catch (Throwable e) { logger.error("Error retrieving file from storage", e); e.printStackTrace();