From ed86e2dc5fbe803fc9f8f6566eaa0924acceaecd Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Thu, 6 Dec 2018 15:58:06 +0000 Subject: [PATCH] ref 12977: SAI - Force the path of the project folder to be updated to a new format https://support.d4science.org/issues/12977 Now, when the project is open the path is forced to be updated git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@174614 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../workspace/BrowserWindowSupport.java | 31 ++++++ .../client/workspace/DownloadWidget.java | 10 +- .../server/storage/ProjectArchiver.java | 38 +++---- .../StatAlgoImporterTest.java | 2 +- .../StorageHubTest.java | 100 ++++++++++++++++++ .../example/FileTemplate.java | 50 --------- 6 files changed, 157 insertions(+), 74 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/BrowserWindowSupport.java create mode 100644 src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StorageHubTest.java delete mode 100644 src/test/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/example/FileTemplate.java diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/BrowserWindowSupport.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/BrowserWindowSupport.java new file mode 100644 index 0000000..6ca9a9e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/BrowserWindowSupport.java @@ -0,0 +1,31 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.client.workspace; + +import com.google.gwt.core.client.JavaScriptObject; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class BrowserWindowSupport extends JavaScriptObject { + // All types that extend JavaScriptObject must have a protected, + // no-args constructor. + protected BrowserWindowSupport() { + } + + public static native BrowserWindowSupport open(String url, String target, + String options) /*-{ + return $wnd.open(url, target, options); + }-*/; + + public native void close() /*-{ + this.close(); + }-*/; + + public native void setUrl(String url) /*-{ + if (this.location) { + this.location = url; + } + }-*/; +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/DownloadWidget.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/DownloadWidget.java index 206538a..8343c77 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/DownloadWidget.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/workspace/DownloadWidget.java @@ -13,7 +13,6 @@ import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.http.client.URL; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; /** @@ -24,9 +23,9 @@ import com.google.gwt.user.client.rpc.AsyncCallback; */ public class DownloadWidget { private EventBus eventBus; - + public DownloadWidget(EventBus eventBus) { - this.eventBus=eventBus; + this.eventBus = eventBus; } public void download(String itemId) { @@ -73,8 +72,9 @@ public class DownloadWidget { url.append(Constants.DOWNLOAD_SERVLET + "/" + itemDescription.getName() + "?itemId=" + itemDescription.getId() + "&" + Constants.CURR_GROUP_ID + "=" + GCubeClientContext.getCurrentContextId()); - Window.open(URL.encode(url.toString()), "_blank", ""); - + // Window.open(URL.encode(url.toString()), "_blank", ""); + BrowserWindowSupport browserWindowSupport = BrowserWindowSupport.open("", "_blank", ""); + browserWindowSupport.setUrl(URL.encode(url.toString())); } } 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 154f7d5..e791fdf 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 @@ -61,29 +61,31 @@ public class ProjectArchiver { newProjectFolder = filesStorage.getFolderInfoOnWorkspace(serviceCredentials.getUserName(), newProjectFolder.getId()); - if (project != null && project.getProjectFolder() != null - && newProjectFolder.compareInfo(project.getProjectFolder().getFolder())) { - - } else { + if (project != null) { + logger.debug("ProjectArchiver set project folder: " + newProjectFolder); project.setProjectFolder(new ProjectFolder(newProjectFolder)); - archive(project, serviceCredentials); - } - if (project != null && project.getMainCode() != null && project.getMainCode().getItemDescription() != null) { - ItemDescription newMainCodeItemDescription = filesStorage.getFileInfoOnWorkspace( - serviceCredentials.getUserName(), project.getMainCode().getItemDescription().getId()); - String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(), - newMainCodeItemDescription.getId()); - newMainCodeItemDescription.setPublicLink(pLink); - if (newMainCodeItemDescription.compareInfo(project.getMainCode().getItemDescription())) { - } else { - project.setMainCode(new MainCode(newMainCodeItemDescription)); - archive(project, serviceCredentials); + if (project.getMainCode() != null && project.getMainCode().getItemDescription() != null) { + try { + ItemDescription newMainCodeItemDescription = filesStorage.getFileInfoOnWorkspace( + serviceCredentials.getUserName(), project.getMainCode().getItemDescription().getId()); + String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(), + newMainCodeItemDescription.getId()); + newMainCodeItemDescription.setPublicLink(pLink); + logger.debug("ProjectArchiver set main code: " + newMainCodeItemDescription); + + project.setMainCode(new MainCode(newMainCodeItemDescription)); + } catch (Throwable e) { + logger.error("ProjectArchiver error reading the main code: " + project.getMainCode().getItemDescription()); + archive(project, serviceCredentials); + throw new StatAlgoImporterServiceException("Error reading the main code of the project!"); + } } + archive(project, serviceCredentials); } else { - project.setProjectFolder(new ProjectFolder(newProjectFolder)); - archive(project, serviceCredentials); + logger.debug("ProjectArchiver project retrieved is null!"); + throw new StatAlgoImporterServiceException("The Project retrieved is not valid!"); } return project; diff --git a/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StatAlgoImporterTest.java b/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StatAlgoImporterTest.java index 247b833..547cf7a 100644 --- a/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StatAlgoImporterTest.java +++ b/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StatAlgoImporterTest.java @@ -25,7 +25,7 @@ public class StatAlgoImporterTest extends TestCase { @Test public void testSpecialCharacters() { - if (true) { + if (Constants.TEST_ENABLE) { try { String patternToMatch = "[\\\\!\"#$%&()*+,/:;<=>?@\\[\\]^{|}~]+"; Pattern p = Pattern.compile(patternToMatch); diff --git a/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StorageHubTest.java b/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StorageHubTest.java new file mode 100644 index 0000000..1026870 --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/statisticalalgorithmsimporter/StorageHubTest.java @@ -0,0 +1,100 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter; + +import static org.gcube.common.authorization.client.Constants.authorizationService; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.authorization.library.provider.UserInfo; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.FolderContainer; +import org.gcube.common.storagehub.client.dsl.OpenResolver; +import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.model.items.AbstractFileItem; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import junit.framework.TestCase; + +/** + * + * @author Giancarlo Panichi + * + * + */ +public class StorageHubTest extends TestCase { + private static Logger logger = LoggerFactory.getLogger(StorageHubTest.class); + + @Test + public void testCopy() { + if (Constants.TEST_ENABLE) { + + try { + + String itemId = "5bd115b1-3235-4256-bf29-14e2f6adcba3"; + String folderId = "08c47365-d534-45ff-a690-882ced63100f"; + + String scope = Constants.DEFAULT_SCOPE; + String user = Constants.DEFAULT_USER; + + logger.info( + "Copy item on folder: [user=" + user + ", itemId=" + itemId + ", folderId=" + folderId + "]"); + + List userRoles = new ArrayList<>(); + userRoles.add(Constants.DEFAULT_ROLE); + /* + * if (aslSession.getUsername().compareTo("lucio.lelii") == 0) + * userRoles.add("VRE-Manager"); + */ + + String token; + try { + token = authorizationService().generateUserToken(new UserInfo(user, userRoles), + scope); + } catch (Exception e) { + logger.error("Error generating the token for test: " + e.getLocalizedMessage(),e); + throw new Exception("Error generating the token for test: " + e.getLocalizedMessage(),e); + } + + logger.debug("Set SecurityToken: " + token); + SecurityTokenProvider.instance.set(token); + logger.debug("Set ScopeProvider: " + scope); + ScopeProvider.instance.set(scope); + + StorageHubClient shc = new StorageHubClient(); + logger.debug("StorageHub client retrieved!"); + logger.debug("Retrieve file: "+itemId); + OpenResolver openResolverForFile = shc.open(itemId); + logger.debug("Retrieve FileContainer"); + FileContainer fileContainer = openResolverForFile.asFile(); + logger.debug("FileContainer retrieved!"); + + OpenResolver openResolverForFolder = shc.open(folderId); + FolderContainer folderContainer = openResolverForFolder.asFolder(); + logger.debug("FolderContainer retrieved!"); + logger.debug("Copy Start"); + FileContainer fileCreatedContainer = fileContainer.copy(folderContainer, fileContainer.get().getName()); + logger.debug("Copy Done"); + AbstractFileItem item = fileCreatedContainer.get(); + logger.debug("File retrieved"); + ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(), + item.getPath(), ""); + logger.debug("Item: " + itemDescription); + assertTrue("Success", true); + } catch (Throwable e) { + logger.error(e.getLocalizedMessage(), e); + fail("Error:" + e.getLocalizedMessage()); + + } + + } else { + assertTrue("Success", true); + } + } + +} diff --git a/src/test/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/example/FileTemplate.java b/src/test/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/example/FileTemplate.java deleted file mode 100644 index 8e0fb3a..0000000 --- a/src/test/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/example/FileTemplate.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.gcube.dataanalysis.executor.rscripts; - -import java.io.File; -import java.util.ArrayList; -import java.util.LinkedHashMap; - -import org.gcube.dataanalysis.ecoengine.datatypes.PrimitiveType; -import org.gcube.dataanalysis.ecoengine.datatypes.StatisticalType; -import org.gcube.dataanalysis.ecoengine.datatypes.enumtypes.PrimitiveTypes; -import org.gcube.dataanalysis.executor.rscripts.generic.GenericRScript; - -public class KnitrCompiler extends GenericRScript { - - public static enum operators { - EQUAL, NOT_EQUAL, CONTAINS, BEGINS_WITH, ENDS_WITH - }; - - - @Override - public String getDescription() { - return "An algorithm to compile Knitr documents. Developed by IRD (reference Julien Bard, julien.barde@ird.fr)"; - } - - protected void initVariables(){ - mainScriptName="IRDTunaAtlas-master/report/knitr/compileKnitR_CNR.R"; - packageURL="http://goo.gl/T7V8LV"; - - environmentalvariables = new ArrayList(); - inputvariables.add("zipfile"); - inputvariables.add("file.inout"); - outputvariables.add("pdfresult"); - } - - @Override - protected void setInputParameters() { - - inputs.add(new PrimitiveType(Enum.class.getName(), operators.values(), PrimitiveTypes.ENUMERATED, name, description, defaultvalue)); - inputs.add(new PrimitiveType(File.class.getName(), null, PrimitiveTypes.FILE, "zipfile", "The file containing R and the markdown (Rnw) files to compile","knitr_wfs.zip")); - inputs.add(new PrimitiveType(String.class.getName(), null, PrimitiveTypes.STRING, "file.inout", "The name of the R file in the zip package", "main.r")); - } - - @Override - public StatisticalType getOutput() { - output.put("pdfresult",new PrimitiveType(File.class.getName(), new File(outputValues.get("pdfresult")), PrimitiveTypes.FILE, "pdfresult", "The compiled PDF file")); - PrimitiveType o = new PrimitiveType(LinkedHashMap.class.getName(), output, PrimitiveTypes.MAP, "Output", ""); - return o; - } - -} - \ No newline at end of file