Merge pull request 'task_23225' (!2) from task_23225 into master

Reviewed-on: #2
This commit is contained in:
Francesco Mangiacrapa 2022-05-03 15:48:03 +02:00
commit 0e168409a2
13 changed files with 679 additions and 496 deletions

View File

@ -13,6 +13,12 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
@ -30,9 +36,9 @@
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="owner.project.facets" value="java"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>

View File

@ -1,7 +1,7 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
@ -9,4 +9,4 @@ org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled org.eclipse.jdt.core.compiler.processAnnotations=enabled
org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.compiler.source=1.8

View File

@ -1,7 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="storagehub-client-wrapper"> <wb-module deploy-name="storagehub-client-wrapper">
<wb-resource deploy-path="/" source-path="/src/main/java"/> <wb-resource deploy-path="/" source-path="/src/main/java"/>
<wb-resource deploy-path="/" source-path="/src/main/resources"/> <wb-resource deploy-path="/" source-path="/src/main/resources"/>
<wb-resource deploy-path="/" source-path="/.apt_generated"/> <wb-resource deploy-path="/" source-path="/.apt_generated"/>
</wb-module> </wb-module>
</project-modules> </project-modules>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<faceted-project> <faceted-project>
<installed facet="jst.utility" version="1.0"/> <installed facet="jst.utility" version="1.0"/>
<installed facet="java" version="11"/> <installed facet="java" version="1.8"/>
</faceted-project> </faceted-project>

View File

@ -3,11 +3,11 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1-1-1-SNAPSHOT] - 2022-03-08 ## [v1.2.0-SNAPSHOT] - 2022-05-02
#### Enhancements #### Enhancements
[#22782] Moved to SHUB(1.x, 3.x) - [#23225] Updated the method to read the members of (VRE or Simple) shared folders
## [v1-1-0] - 2021-05-12 ## [v1-1-0] - 2021-05-12

10
pom.xml
View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
@ -10,7 +11,7 @@
</parent> </parent>
<groupId>org.gcube.common</groupId> <groupId>org.gcube.common</groupId>
<artifactId>storagehub-client-wrapper</artifactId> <artifactId>storagehub-client-wrapper</artifactId>
<version>1.1.1-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<name>storagehub-client-wrapper</name> <name>storagehub-client-wrapper</name>
<description>This is a wrapper of storagehub-client library. It allows to interact with storagehub in a simplified way by exposing several utilities. Moreover, It exposes by another inteface java beans as defined in (the old) HL interfaces</description> <description>This is a wrapper of storagehub-client library. It allows to interact with storagehub in a simplified way by exposing several utilities. Moreover, It exposes by another inteface java beans as defined in (the old) HL interfaces</description>
<scm> <scm>
@ -19,9 +20,12 @@
<url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url> <url>https://code-repo.d4science.org/gCubeSystem/${project.artifactId}</url>
</scm> </scm>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<distroDirectory>distro</distroDirectory> <distroDirectory>distro</distroDirectory>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
@ -88,6 +92,7 @@
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId> <artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version> <version>1.6.4</version>
<scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -96,6 +101,7 @@
<version>4.12</version> <version>4.12</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<resources> <resources>

View File

@ -2,6 +2,7 @@ package org.gcube.common.storagehubwrapper.server;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -9,6 +10,7 @@ import java.util.Set;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.scope.impl.ScopeBean;
import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.StreamDescriptor;
import org.gcube.common.storagehub.client.dsl.FileContainer; import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.FolderContainer;
@ -36,14 +38,14 @@ import org.gcube.common.storagehub.model.items.nodes.Accounting;
import org.gcube.common.storagehub.model.items.nodes.ImageContent; import org.gcube.common.storagehub.model.items.nodes.ImageContent;
import org.gcube.common.storagehub.model.service.Version; import org.gcube.common.storagehub.model.service.Version;
import org.gcube.common.storagehubwrapper.server.converter.HLMapper; import org.gcube.common.storagehubwrapper.server.converter.HLMapper;
import org.gcube.common.storagehubwrapper.server.converter.ObjectMapper;
import org.gcube.common.storagehubwrapper.shared.ACLType; import org.gcube.common.storagehubwrapper.shared.ACLType;
import org.gcube.common.storagehubwrapper.shared.Member;
import org.gcube.common.storagehubwrapper.shared.Member.TYPE;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.ItemNotFoundException; import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.ItemNotFoundException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
// TODO: Auto-generated Javadoc // TODO: Auto-generated Javadoc
/** /**
* The Class StorageHubClientService. * The Class StorageHubClientService.
@ -53,7 +55,6 @@ import org.slf4j.LoggerFactory;
*/ */
public class StorageHubClientService { public class StorageHubClientService {
/** The logger. */ /** The logger. */
private static Logger logger = LoggerFactory.getLogger(StorageHubClientService.class); private static Logger logger = LoggerFactory.getLogger(StorageHubClientService.class);
@ -66,10 +67,8 @@ public class StorageHubClientService {
/** The authorization token. */ /** The authorization token. */
private String authorizationToken; private String authorizationToken;
private StorageHubClient shClient; private StorageHubClient shClient;
/** /**
* Instantiates a new storage hub service util. * Instantiates a new storage hub service util.
* *
@ -83,7 +82,7 @@ public class StorageHubClientService {
this.authorizationToken = authorizationToken; this.authorizationToken = authorizationToken;
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
shClient = new StorageHubClient(); shClient = new StorageHubClient();
logger.info("Instancied the "+StorageHubClientService.class.getSimpleName()+" as: "+this.toString()); logger.info("Instancied the " + StorageHubClientService.class.getSimpleName() + " as: " + this.toString());
} }
/** /**
@ -92,10 +91,11 @@ public class StorageHubClientService {
* @param scope the scope * @param scope the scope
* @param authorizationToken the authorization token * @param authorizationToken the authorization token
*/ */
private void setContextProviders(String scope, String authorizationToken){ private void setContextProviders(String scope, String authorizationToken) {
ScopeProvider.instance.set(scope); ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken); SecurityTokenProvider.instance.set(authorizationToken);
logger.debug("Saved the contexts [scope: "+scope+", token: "+authorizationToken.substring(0,15)+"-MASKED]"); logger.debug(
"Saved the contexts [scope: " + scope + ", token: " + authorizationToken.substring(0, 15) + "-MASKED]");
} }
/** /**
@ -122,7 +122,6 @@ public class StorageHubClientService {
return trash; return trash;
} }
/** /**
* Gets the children. * Gets the children.
* *
@ -132,16 +131,18 @@ public class StorageHubClientService {
* @return the children * @return the children
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<? extends Item> getChildren(String id, boolean withAccounting, boolean withMapProperties) throws Exception{ public List<? extends Item> getChildren(String id, boolean withAccounting, boolean withMapProperties)
throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
logger.trace("Requesting getChildren for id: "+id+" [withAccounting: "+withAccounting+", withMapProperties: "+withMapProperties+"]"); logger.trace("Requesting getChildren for id: " + id + " [withAccounting: " + withAccounting
+ ", withMapProperties: " + withMapProperties + "]");
ListResolverTyped resolverTyped = shClient.open(id).asFolder().list(); ListResolverTyped resolverTyped = shClient.open(id).asFolder().list();
ListResolver theResolver = resolverTyped.withContent(); ListResolver theResolver = resolverTyped.withContent();
if(withAccounting) if (withAccounting)
theResolver = theResolver.withAccounting(); theResolver = theResolver.withAccounting();
if(withMapProperties) if (withMapProperties)
theResolver = theResolver.withMetadata(); theResolver = theResolver.withMetadata();
return theResolver.getItems(); return theResolver.getItems();
@ -154,29 +155,31 @@ public class StorageHubClientService {
* @param id the id * @param id the id
* @param withAccounting the with accounting * @param withAccounting the with accounting
* @param withMapProperties the with map properties * @param withMapProperties the with map properties
* @param includeHidden the include hidden
* @return the children * @return the children
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<? extends Item> getChildren(String id, boolean withAccounting, boolean withMapProperties, boolean includeHidden) throws Exception{ public List<? extends Item> getChildren(String id, boolean withAccounting, boolean withMapProperties,
boolean includeHidden) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
logger.trace("Requesting getChildren for id: "+id+" [withAccounting: "+withAccounting+", withMapProperties: "+withMapProperties+"]"); logger.trace("Requesting getChildren for id: " + id + " [withAccounting: " + withAccounting
+ ", withMapProperties: " + withMapProperties + "]");
if (!includeHidden) { if (!includeHidden) {
return getChildren(id, withAccounting, withMapProperties); return getChildren(id, withAccounting, withMapProperties);
} }
ListResolver theResolver = shClient.open(id).asFolder().list().includeHidden().withContent(); ListResolver theResolver = shClient.open(id).asFolder().list().includeHidden().withContent();
if(withAccounting) if (withAccounting)
theResolver = theResolver.withAccounting(); theResolver = theResolver.withAccounting();
if(withMapProperties) if (withMapProperties)
theResolver = theResolver.withMetadata(); theResolver = theResolver.withMetadata();
return theResolver.getItems(); return theResolver.getItems();
} }
/** /**
* Gets the filtered children. * Gets the filtered children.
* *
@ -187,22 +190,22 @@ public class StorageHubClientService {
* @return the filtered children * @return the filtered children
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<? extends Item> getFilteredChildren(String id, Class<? extends Item> aType, boolean withAccounting, boolean withMapProperties) throws Exception{ public List<? extends Item> getFilteredChildren(String id, Class<? extends Item> aType, boolean withAccounting,
boolean withMapProperties) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ListResolver resolverTyped = shClient.open(id).asFolder().list().ofType(aType); ListResolver resolverTyped = shClient.open(id).asFolder().list().ofType(aType);
ListResolver theResolver = resolverTyped.withContent(); ListResolver theResolver = resolverTyped.withContent();
if(withAccounting) if (withAccounting)
theResolver = theResolver.withAccounting(); theResolver = theResolver.withAccounting();
if(withMapProperties) if (withMapProperties)
theResolver = theResolver.withMetadata(); theResolver = theResolver.withMetadata();
return theResolver.getItems(); return theResolver.getItems();
} }
/** /**
* Gets the item. * Gets the item.
* *
@ -212,28 +215,29 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item getItem(String itemId, boolean withAccounting, boolean withMetadata) throws Exception{ public Item getItem(String itemId, boolean withAccounting, boolean withMetadata) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ItemContainer<Item> itemCont; ItemContainer<Item> itemCont;
//I'M GOING TO REMAIN THESE OPTIONS FOR POSSIBLE FUTURE SUPPORTING ON SHUB // I'M GOING TO REMAIN THESE OPTIONS FOR POSSIBLE FUTURE SUPPORTING ON SHUB
if(withMetadata) { if (withMetadata) {
itemCont = shClient.open(itemId).asItem(); //TODO itemCont = shClient.open(itemId).asItem(); // TODO
}else if(withAccounting){ } else if (withAccounting) {
itemCont = shClient.open(itemId).asItem(); //TODO itemCont = shClient.open(itemId).asItem(); // TODO
} } else {
else {
itemCont = shClient.open(itemId).asItem(); itemCont = shClient.open(itemId).asItem();
} }
return itemCont.get(); return itemCont.get();
} }
/** /**
* Gets the item by path.
* *
* @param folderId * @param folderId the folder id
* @param relativePath * @param relativePath the relative path
* @return * @return the item by path
* @throws Exception * @throws Exception the exception
*/ */
public Item getItemByPath(String folderId, String relativePath) throws Exception { public Item getItemByPath(String folderId, String relativePath) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
@ -256,12 +260,10 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item getItem(String itemId) throws Exception{ public Item getItem(String itemId) throws Exception {
return getItem(itemId,false,true); return getItem(itemId, false, true);
} }
/** /**
* Sets the metadata and returns the Item with metadata updated. * Sets the metadata and returns the Item with metadata updated.
* *
@ -270,15 +272,13 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item setMetadata(String itemId, Metadata metadata) throws Exception{ public Item setMetadata(String itemId, Metadata metadata) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ItemContainer<Item> itemCont = shClient.open(itemId).asItem(); ItemContainer<Item> itemCont = shClient.open(itemId).asItem();
itemCont.setMetadata(metadata); itemCont.setMetadata(metadata);
return itemCont.get(); return itemCont.get();
} }
/** /**
* Gets the metadata. * Gets the metadata.
* *
@ -286,17 +286,16 @@ public class StorageHubClientService {
* @return the metadata * @return the metadata
* @throws Exception the exception * @throws Exception the exception
*/ */
public Map<String, Object> getMetadata(String itemId) throws Exception{ public Map<String, Object> getMetadata(String itemId) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ItemContainer<Item> itemCont = shClient.open(itemId).asItem(); ItemContainer<Item> itemCont = shClient.open(itemId).asItem();
Metadata metadata = shClient.open(itemId).asItem().get().getMetadata(); Metadata metadata = shClient.open(itemId).asItem().get().getMetadata();
if(metadata!=null) if (metadata != null)
return metadata.getMap(); return metadata.getMap();
return null; return null;
} }
/** /**
* Gets the folder container. * Gets the folder container.
* *
@ -304,12 +303,11 @@ public class StorageHubClientService {
* @return the folder container * @return the folder container
* @throws Exception the exception * @throws Exception the exception
*/ */
public FolderContainer getFolderContainer(String itemId) throws Exception{ public FolderContainer getFolderContainer(String itemId) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
return shClient.open(itemId).asFolder(); return shClient.open(itemId).asFolder();
} }
/** /**
* Gets the parents. * Gets the parents.
* *
@ -320,15 +318,14 @@ public class StorageHubClientService {
public List<? extends Item> getParents(String itemId) throws Exception { public List<? extends Item> getParents(String itemId) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ListResolver toReturn = shClient.open(itemId).asItem().getAnchestors(); ListResolver toReturn = shClient.open(itemId).asItem().getAnchestors();
if(toReturn==null || toReturn.getItems()==null){ if (toReturn == null || toReturn.getItems() == null) {
logger.warn("Parent List of item id "+itemId+" is null"); logger.warn("Parent List of item id " + itemId + " is null");
return null; return null;
} }
return toReturn.getItems(); return toReturn.getItems();
} }
//TODO MAP OF SHARED ROOT ID // TODO MAP OF SHARED ROOT ID
/** /**
* Gets the id shared folder. * Gets the id shared folder.
@ -342,7 +339,6 @@ public class StorageHubClientService {
return getRootSharedFolder(itemId).getId(); return getRootSharedFolder(itemId).getId();
} }
/** /**
* Gets the root shared folder. * Gets the root shared folder.
* *
@ -356,7 +352,6 @@ public class StorageHubClientService {
} }
/** /**
* Checks if is item shared. * Checks if is item shared.
* *
@ -370,7 +365,6 @@ public class StorageHubClientService {
} }
/** /**
* Can write. * Can write.
* *
@ -383,7 +377,6 @@ public class StorageHubClientService {
return shClient.open(folderContainerId).asFolder().canWrite(); return shClient.open(folderContainerId).asFolder().canWrite();
} }
/** /**
* Gets the root shared folder. * Gets the root shared folder.
* *
@ -395,12 +388,13 @@ public class StorageHubClientService {
FolderContainer rootSharedFolder = null; FolderContainer rootSharedFolder = null;
Item item = itemContainer.get(); Item item = itemContainer.get();
if(item.isShared()){ if (item.isShared()) {
rootSharedFolder = itemContainer.getRootSharedFolder(); rootSharedFolder = itemContainer.getRootSharedFolder();
}else } else
throw new Exception("The item with id: "+item.getId() +" is not shared"); throw new Exception("The item with id: " + item.getId() + " is not shared");
Validate.notNull(rootSharedFolder, "The root shared folder with children id "+item.getId()+" does not exist"); Validate.notNull(rootSharedFolder,
"The root shared folder with children id " + item.getId() + " does not exist");
return rootSharedFolder.get(); return rootSharedFolder.get();
} }
@ -419,7 +413,6 @@ public class StorageHubClientService {
return getItem(folderContainer.get().getId(), false, true); return getItem(folderContainer.get().getId(), false, true);
} }
/** /**
* Gets the VRE folders id. * Gets the VRE folders id.
* *
@ -433,21 +426,18 @@ public class StorageHubClientService {
WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build();
try { try {
List<? extends Item> list = wsclient.getVreFolders(ACCOUNTING_HL_NODE_NAME); List<? extends Item> list = wsclient.getVreFolders(ACCOUNTING_HL_NODE_NAME);
toReturn =list.iterator().next().getParentId(); toReturn = list.iterator().next().getParentId();
} catch (Exception e) { } catch (Exception e) {
logger.info("This user has no VRE Folders", e); logger.info("This user has no VRE Folders", e);
return null; return null;
} }
}catch (Exception e) { } catch (Exception e) {
logger.error("Get VRE Folders Id ",e); logger.error("Get VRE Folders Id ", e);
//e.printStackTrace(); // e.printStackTrace();
} }
return toReturn; return toReturn;
} }
/** /**
* Gets the user acl for folder id. * Gets the user acl for folder id.
* *
@ -468,7 +458,8 @@ public class StorageHubClientService {
List<ACL> acls = client.getACL(folderId); List<ACL> acls = client.getACL(folderId);
SharedFolder sharedFolder = (SharedFolder) theFolder; SharedFolder sharedFolder = (SharedFolder) theFolder;
boolean found = false; //this is needed because in case o VRE Foder the permission is assigned to the group and not to the user. boolean found = false; // this is needed because in case o VRE Foder the permission is assigned to the
// group and not to the user.
for (ACL acl : acls) { for (ACL acl : acls) {
if (acl.getPricipal().compareTo(userName) == 0) { if (acl.getPricipal().compareTo(userName) == 0) {
found = true; found = true;
@ -477,7 +468,8 @@ public class StorageHubClientService {
} }
if (!found && sharedFolder.isVreFolder()) { if (!found && sharedFolder.isVreFolder()) {
for (ACL acl : acls) { for (ACL acl : acls) {
if (acl.getPricipal().startsWith(infrastructureName)); if (acl.getPricipal().startsWith(infrastructureName))
;
return acl.getAccessTypes().get(0).toString(); return acl.getAccessTypes().get(0).toString();
} }
} }
@ -485,7 +477,6 @@ public class StorageHubClientService {
return "UNDEFINED"; return "UNDEFINED";
} }
/** /**
* Gets the item children count. * Gets the item children count.
* *
@ -510,38 +501,38 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item uploadFile(String folderId, InputStream is, String fileName, String fileDescription) throws Exception{ public Item uploadFile(String folderId, InputStream is, String fileName, String fileDescription) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
FileContainer fileCont = shClient.open(folderId).asFolder().uploadFile(is, fileName, fileDescription); FileContainer fileCont = shClient.open(folderId).asFolder().uploadFile(is, fileName, fileDescription);
return fileCont.get(); return fileCont.get();
} }
/** /**
* Download file. * Download file.
* *
* @param itemId the item id * @param itemId the item id
* @param versionName the version name. If is null or empty returns the latest version of file * @param versionName the version name. If is null or empty returns the
* latest version of file
* @param nodeIdsToExclude the node ids to exclude * @param nodeIdsToExclude the node ids to exclude
* @return the stream descriptor * @return the stream descriptor
* @throws Exception the exception * @throws Exception the exception
*/ */
public StreamDescriptor downloadFile(String itemId, String versionName, String... nodeIdsToExclude) throws Exception{ public StreamDescriptor downloadFile(String itemId, String versionName, String... nodeIdsToExclude)
throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
StreamDescriptor streamDesc; StreamDescriptor streamDesc;
if(versionName!=null && !versionName.isEmpty()){ if (versionName != null && !versionName.isEmpty()) {
streamDesc = shClient.open(itemId).asFile().downloadSpecificVersion(versionName); streamDesc = shClient.open(itemId).asFile().downloadSpecificVersion(versionName);
}else{ } else {
streamDesc = shClient.open(itemId).asFile().download(nodeIdsToExclude); streamDesc = shClient.open(itemId).asFile().download(nodeIdsToExclude);
} }
return new StreamDescriptor(streamDesc.getStream(), streamDesc.getFileName(), streamDesc.getContentType(), streamDesc.getContentLenght()); return new StreamDescriptor(streamDesc.getStream(), streamDesc.getFileName(), streamDesc.getContentType(),
streamDesc.getContentLenght());
} }
/** /**
* Download folder. * Download folder.
* *
@ -550,16 +541,15 @@ public class StorageHubClientService {
* @return the stream descriptor * @return the stream descriptor
* @throws Exception the exception * @throws Exception the exception
*/ */
public StreamDescriptor downloadFolder(String folderId, String nodeIdsToExclude) throws Exception{ public StreamDescriptor downloadFolder(String folderId, String nodeIdsToExclude) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
StreamDescriptor streamDesc = shClient.open(folderId).asFolder().download(nodeIdsToExclude); StreamDescriptor streamDesc = shClient.open(folderId).asFolder().download(nodeIdsToExclude);
return new StreamDescriptor(streamDesc.getStream(), streamDesc.getFileName(), streamDesc.getContentType(), streamDesc.getContentLenght()); return new StreamDescriptor(streamDesc.getStream(), streamDesc.getFileName(), streamDesc.getContentType(),
streamDesc.getContentLenght());
} }
/** /**
* Upload archive. * Upload archive.
* *
@ -569,15 +559,13 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item uploadArchive(String folderId, InputStream is, String extractionFolderName) throws Exception{ public Item uploadArchive(String folderId, InputStream is, String extractionFolderName) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
FolderContainer folderCont = shClient.open(folderId).asFolder().uploadArchive(is, extractionFolderName); FolderContainer folderCont = shClient.open(folderId).asFolder().uploadArchive(is, extractionFolderName);
return folderCont.get(); return folderCont.get();
} }
/** /**
* Gets the shared folder members. * Gets the shared folder members.
* *
@ -585,17 +573,75 @@ public class StorageHubClientService {
* @return the shared folder members * @return the shared folder members
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<String> getSharedFolderMembers(String folderId) throws Exception { public List<Member> getSharedFolderMembers(String folderId) throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
Item item = getItem(folderId, false, true); Item item = getItem(folderId, false, true);
if(item instanceof SharedFolder){ List<Member> members = new ArrayList<Member>();
return ObjectMapper.toListLogins((SharedFolder)item);
}else if (item instanceof SharedFolder) {
throw new Exception("The item with "+folderId+ " is not a Shared Folder"); List<ACL> listACL = shClient.open(folderId).asFolder().getAcls();
logger.info("Reading users from ACLs");
for (ACL acl : listACL) {
logger.trace("acl princial is: " + acl.getPricipal());
Member member = new Member(acl.getPricipal(), acl.getPricipal(), Member.TYPE.USER);
if (isGroupName(acl.getPricipal())) {
logger.info("pricipal: " + acl.getPricipal() + " is a group");
member.setMemberType(TYPE.GROUP);
// gcube-devsec-devVRE -> devVRE that is the groupName
member.setName(acl.getPricipal().substring(acl.getPricipal().lastIndexOf("-") + 1,
acl.getPricipal().length()));
}
members.add(member);
logger.debug("added member: " + member);
}
} else {
throw new Exception("The item with " + folderId + " is not a Shared Folder");
}
logger.info("Returning " + members.size() + " member/s");
return members;
} }
/**
* Checks if is group name.
*
* @param pricipal the pricipal
* @return true, if is group name E.g. with the input 'gcube-devNext-NextNext'
* returns true
*/
private boolean isGroupName(String pricipal) {
if (pricipal == null || pricipal.isEmpty())
return false;
String theScope = getScopeFromVREGroupName(pricipal);
ScopeBean scope = null;
try {
scope = new ScopeBean(theScope);
logger.info("pricipal '" + pricipal + "' is a valid scope");
} catch (IllegalArgumentException e) {
logger.trace("principal '" + pricipal + "' is not a scope");
return false;
}
return scope != null;
}
/**
* Gets the scope from VRE group name.
*
* @param context the context
* @return the scope from VRE group name. Eg. with the input
* 'gcube-devNext-NextNext' returns '/gcube/devNext/NextNext'
*/
public static String getScopeFromVREGroupName(String context) {
String entireScopeName = context.replaceAll("^/(.*)/?$", "$1").replaceAll("-", "/");
return entireScopeName;
}
/** /**
* Find by name. * Find by name.
@ -610,19 +656,17 @@ public class StorageHubClientService {
Item item; Item item;
try { try {
item = getItem(folderId, false, true); item = getItem(folderId, false, true);
}catch (Exception e) { } catch (Exception e) {
logger.error("Error during get item with id: "+folderId,e); logger.error("Error during get item with id: " + folderId, e);
throw new ItemNotFoundException(e.getMessage()); throw new ItemNotFoundException(e.getMessage());
} }
if(item instanceof FolderItem || item instanceof SharedFolder || item instanceof VreFolder){ if (item instanceof FolderItem || item instanceof SharedFolder || item instanceof VreFolder) {
return shClient.open(folderId).asFolder().findByName(name).withContent().getItems(); return shClient.open(folderId).asFolder().findByName(name).withContent().getItems();
}else } else
throw new Exception("The input folder id is not a folder"); throw new Exception("The input folder id is not a folder");
} }
/** /**
* Search for text. * Search for text.
* *
@ -636,27 +680,25 @@ public class StorageHubClientService {
Item item; Item item;
try { try {
item = getItem(folderId, false, true); item = getItem(folderId, false, true);
}catch (Exception e) { } catch (Exception e) {
logger.error("Error during get item with id: "+folderId,e); logger.error("Error during get item with id: " + folderId, e);
throw new ItemNotFoundException(e.getMessage()); throw new ItemNotFoundException(e.getMessage());
} }
if(item instanceof FolderItem || item instanceof SharedFolder || item instanceof VreFolder){ if (item instanceof FolderItem || item instanceof SharedFolder || item instanceof VreFolder) {
//this does not return the trashed items // this does not return the trashed items
return shClient.open(folderId).asFolder().search(text,true).withContent().getItems(); return shClient.open(folderId).asFolder().search(text, true).withContent().getItems();
}else } else
throw new Exception("The input folder id is not a folder"); throw new Exception("The input folder id is not a folder");
} }
/** /**
* Delete item by id. * Delete item by id.
* *
* @param itemId the item id * @param itemId the item id
* @throws Exception the exception * @throws Exception the exception
*/ */
public void deleteItemById(String itemId) throws Exception{ public void deleteItemById(String itemId) throws Exception {
Validate.notNull(itemId, "Bad request to deleteItemById, the itemId is null"); Validate.notNull(itemId, "Bad request to deleteItemById, the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
@ -664,36 +706,31 @@ public class StorageHubClientService {
} }
/** /**
* Open trash. * Open trash.
* *
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item openTrash() throws Exception{ public Item openTrash() throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
return shClient.openTrash().get(); return shClient.openTrash().get();
} }
/** /**
* Empty trash. * Empty trash.
* *
* @throws Exception the exception * @throws Exception the exception
*/ */
public void emptyTrash() throws Exception{ public void emptyTrash() throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
shClient.emptyTrash(); shClient.emptyTrash();
} }
/** /**
* Restore thrash item. * Restore thrash item.
* *
@ -702,29 +739,28 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item restoreThrashItem(String itemId, String destinationFolderId) throws Exception{ public Item restoreThrashItem(String itemId, String destinationFolderId) throws Exception {
Validate.notNull(itemId, "Bad request to restoreThrashItem, the itemId is null"); Validate.notNull(itemId, "Bad request to restoreThrashItem, the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
GenericItemContainer container = null; GenericItemContainer container = null;
if(destinationFolderId==null) if (destinationFolderId == null)
container = shClient.restoreThrashItem(itemId); container = shClient.restoreThrashItem(itemId);
else else
container = shClient.restoreThrashItem(itemId, destinationFolderId); container = shClient.restoreThrashItem(itemId, destinationFolderId);
if(container!=null){ if (container != null) {
Item item = container.get(); Item item = container.get();
if(item!=null){ if (item != null) {
return item; return item;
}else } else
throw new Exception("Restoring failed, FolderItem is null"); throw new Exception("Restoring failed, FolderItem is null");
}else } else
throw new Exception("Restoring failed, contanier is null"); throw new Exception("Restoring failed, contanier is null");
} }
/** /**
* Move item. * Move item.
* *
@ -733,7 +769,7 @@ public class StorageHubClientService {
* @return the abstract file item * @return the abstract file item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item moveItem(String itemId, FolderContainer destFolderContainer) throws Exception{ public Item moveItem(String itemId, FolderContainer destFolderContainer) throws Exception {
Validate.notNull(itemId, "Bad request to moveItem, the itemId is null"); Validate.notNull(itemId, "Bad request to moveItem, the itemId is null");
Validate.notNull(destFolderContainer, "Bad request to moveItem, the itemId is null"); Validate.notNull(destFolderContainer, "Bad request to moveItem, the itemId is null");
@ -743,7 +779,6 @@ public class StorageHubClientService {
} }
/** /**
* Copy item. * Copy item.
* *
@ -753,18 +788,19 @@ public class StorageHubClientService {
* @return the abstract file item * @return the abstract file item
* @throws Exception the exception * @throws Exception the exception
*/ */
public AbstractFileItem copyFileItem(String fileItemId, FolderContainer destFolderContainer, String newFileName) throws Exception{ public AbstractFileItem copyFileItem(String fileItemId, FolderContainer destFolderContainer, String newFileName)
throws Exception {
Validate.notNull(fileItemId, "Bad request to copyFileItem, the fileItemId is null"); Validate.notNull(fileItemId, "Bad request to copyFileItem, the fileItemId is null");
Validate.notNull(destFolderContainer, "Bad request to copyFileItem, the destFolderContainer is null"); Validate.notNull(destFolderContainer, "Bad request to copyFileItem, the destFolderContainer is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
FileContainer copyingItem = shClient.open(fileItemId).asFile(); FileContainer copyingItem = shClient.open(fileItemId).asFile();
String newName = newFileName!=null && !newFileName.isEmpty()?newFileName:"Copy of "+copyingItem.get().getName(); String newName = newFileName != null && !newFileName.isEmpty() ? newFileName
: "Copy of " + copyingItem.get().getName();
FileContainer newItem = copyingItem.copy(destFolderContainer, newName); FileContainer newItem = copyingItem.copy(destFolderContainer, newName);
return newItem.get(); return newItem.get();
} }
/** /**
* Rename item. * Rename item.
* *
@ -773,7 +809,7 @@ public class StorageHubClientService {
* @return the item * @return the item
* @throws Exception the exception * @throws Exception the exception
*/ */
public Item renameItem(String itemId, String newName) throws Exception{ public Item renameItem(String itemId, String newName) throws Exception {
Validate.notNull(itemId, "Bad request to renameItem, the itemId is null"); Validate.notNull(itemId, "Bad request to renameItem, the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
@ -782,7 +818,6 @@ public class StorageHubClientService {
} }
/** /**
* Gets the file public link. * Gets the file public link.
* *
@ -790,7 +825,7 @@ public class StorageHubClientService {
* @return the file public link * @return the file public link
* @throws Exception the exception * @throws Exception the exception
*/ */
public URL getPublicLinkForFile(String fileItemId) throws Exception{ public URL getPublicLinkForFile(String fileItemId) throws Exception {
Validate.notNull(fileItemId, "Bad request to getPublicLinkForFile, the fileItemId is null"); Validate.notNull(fileItemId, "Bad request to getPublicLinkForFile, the fileItemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
@ -798,7 +833,6 @@ public class StorageHubClientService {
} }
/** /**
* Gets the public link for file version. * Gets the public link for file version.
* *
@ -807,7 +841,7 @@ public class StorageHubClientService {
* @return the public link for file version * @return the public link for file version
* @throws Exception the exception * @throws Exception the exception
*/ */
public URL getPublicLinkForFileVersion(String fileItemId, String version) throws Exception{ public URL getPublicLinkForFileVersion(String fileItemId, String version) throws Exception {
Validate.notNull(fileItemId, "Bad request to getPublicLinkForFile, the fileItemId is null"); Validate.notNull(fileItemId, "Bad request to getPublicLinkForFile, the fileItemId is null");
Validate.notNull(version, "Bad request to getPublicLinkForFileVersion, the version is null"); Validate.notNull(version, "Bad request to getPublicLinkForFileVersion, the version is null");
@ -817,7 +851,6 @@ public class StorageHubClientService {
} }
/** /**
* Gets the list versions. * Gets the list versions.
* *
@ -825,7 +858,7 @@ public class StorageHubClientService {
* @return the list versions * @return the list versions
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<Version> getListVersions(String fileItemId) throws Exception{ public List<Version> getListVersions(String fileItemId) throws Exception {
Validate.notNull(fileItemId, "Bad request to getListVersions, the fileItemId is null"); Validate.notNull(fileItemId, "Bad request to getListVersions, the fileItemId is null");
@ -840,40 +873,38 @@ public class StorageHubClientService {
* @return the image content * @return the image content
* @throws Exception the exception * @throws Exception the exception
*/ */
public ImageContent getImageContent(String itemId) throws Exception{ public ImageContent getImageContent(String itemId) throws Exception {
Validate.notNull(itemId, "Bad request to getImageContent, the itemId is null"); Validate.notNull(itemId, "Bad request to getImageContent, the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
ItemContainer<Item> itemCont = shClient.open(itemId).asItem(); ItemContainer<Item> itemCont = shClient.open(itemId).asItem();
Item item = itemCont.get(); Item item = itemCont.get();
if(item instanceof org.gcube.common.storagehub.model.items.ImageFile){ if (item instanceof org.gcube.common.storagehub.model.items.ImageFile) {
org.gcube.common.storagehub.model.items.ImageFile imgFI = (org.gcube.common.storagehub.model.items.ImageFile) item; //?? org.gcube.common.storagehub.model.items.ImageFile imgFI = (org.gcube.common.storagehub.model.items.ImageFile) item; // ??
return imgFI.getContent(); return imgFI.getContent();
}else } else
throw new Exception("Thumbnail Data is not available for type: "+item.getClass().getSimpleName()); throw new Exception("Thumbnail Data is not available for type: " + item.getClass().getSimpleName());
} }
/** /**
* Gets the total items. * Gets the total items.
* *
* @return the total items * @return the total items
* @throws Exception the exception * @throws Exception the exception
*/ */
public long getTotalItems() throws Exception{ public long getTotalItems() throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
return shClient.getTotalItemCount(); return shClient.getTotalItemCount();
} }
/** /**
* Gets the disk usage. * Gets the disk usage.
* *
* @return the disk usage * @return the disk usage
* @throws Exception the exception * @throws Exception the exception
*/ */
public long getDiskUsage() throws Exception{ public long getDiskUsage() throws Exception {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
return shClient.getTotalVolume(); return shClient.getTotalVolume();
} }
@ -885,7 +916,7 @@ public class StorageHubClientService {
* @return the accounting * @return the accounting
* @throws Exception the exception * @throws Exception the exception
*/ */
public Accounting getAccounting(String itemId) throws Exception{ public Accounting getAccounting(String itemId) throws Exception {
Validate.notNull(itemId, "Bad request to getAccounting, the itemId is null"); Validate.notNull(itemId, "Bad request to getAccounting, the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
@ -894,7 +925,6 @@ public class StorageHubClientService {
return item.getAccounting(); return item.getAccounting();
} }
/** /**
* Gets the gcube item properties. * Gets the gcube item properties.
* *
@ -908,15 +938,14 @@ public class StorageHubClientService {
ItemContainer<Item> itemCont = shClient.open(gcubeItemId).asItem(); ItemContainer<Item> itemCont = shClient.open(gcubeItemId).asItem();
Item item = itemCont.get(); Item item = itemCont.get();
if(item instanceof GCubeItem) { if (item instanceof GCubeItem) {
GCubeItem theGcubeItem = (GCubeItem) item; GCubeItem theGcubeItem = (GCubeItem) item;
return theGcubeItem.getMetadata(); return theGcubeItem.getMetadata();
}else } else
throw new Exception("The item with id "+gcubeItemId+" is not an istance of "+GCubeItem.class.getSimpleName()); throw new Exception(
"The item with id " + gcubeItemId + " is not an istance of " + GCubeItem.class.getSimpleName());
} }
/** /**
* Sets the metadata. * Sets the metadata.
* *
@ -927,17 +956,16 @@ public class StorageHubClientService {
public void setMetadata(String itemId, Map<String, Object> mapProperties) throws Exception { public void setMetadata(String itemId, Map<String, Object> mapProperties) throws Exception {
Validate.notNull(itemId, "Bad request to setMetadata the itemId is null"); Validate.notNull(itemId, "Bad request to setMetadata the itemId is null");
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
//ItemContainer<Item> itemCont = shcClient.open(itemId).asItem(); // ItemContainer<Item> itemCont = shcClient.open(itemId).asItem();
//itemCont.get().setMetadata(new Metadata(mapProperties)); // itemCont.get().setMetadata(new Metadata(mapProperties));
//item.setMetadata(new Metadata(mapProperties)); // item.setMetadata(new Metadata(mapProperties));
shClient.open(itemId).asItem().setMetadata(new Metadata(mapProperties)); shClient.open(itemId).asItem().setMetadata(new Metadata(mapProperties));
} }
/** /**
* Sets the Folder As Hidden or visible . * Sets the Folder As Hidden or visible .
* *
* @param itemId the folder id * @param folderId the folder id
* @param hide true to set hide, false to set visible * @param hide true to set hide, false to set visible
* @throws Exception the exception * @throws Exception the exception
*/ */
@ -946,17 +974,19 @@ public class StorageHubClientService {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
FolderContainer folderContainer = shClient.open(folderId).asFolder(); FolderContainer folderContainer = shClient.open(folderId).asFolder();
if (hide) if (hide)
folderContainer.setHidden(); //will not appear in the workspace GUI folderContainer.setHidden(); // will not appear in the workspace GUI
else else
folderContainer.setVisible(); //will appear in the workspace GUI folderContainer.setVisible(); // will appear in the workspace GUI
} }
/** /**
* Share folder.
* *
* @param folderId the folder id to share * @param folderId the folder id to share
* @param users the users to share * @param users the users to share
* @param type the permission * @param type the permission
* @return the workspace shared folder
* @throws Exception the exception
*/ */
public WorkspaceSharedFolder shareFolder(String folderId, Set<String> users, ACLType type) throws Exception { public WorkspaceSharedFolder shareFolder(String folderId, Set<String> users, ACLType type) throws Exception {
Validate.notNull(folderId, "Bad request to setFolderAsHidden the folderId is null"); Validate.notNull(folderId, "Bad request to setFolderAsHidden the folderId is null");
@ -987,9 +1017,12 @@ public class StorageHubClientService {
} }
/** /**
* Unshare folder.
* *
* @param folderId the folder id to share * @param folderId the folder id to share
* @param users the users to share * @param users the users to share
* @return the workspace shared folder
* @throws Exception the exception
*/ */
public WorkspaceSharedFolder unshareFolder(String folderId, Set<String> users) throws Exception { public WorkspaceSharedFolder unshareFolder(String folderId, Set<String> users) throws Exception {
Validate.notNull(folderId, "Bad request to setFolderAsHidden the folderId is null"); Validate.notNull(folderId, "Bad request to setFolderAsHidden the folderId is null");
@ -1016,7 +1049,6 @@ public class StorageHubClientService {
return folder.addUrl(URL, name, description).get(); return folder.addUrl(URL, name, description).get();
} }
/** /**
* Sets the folder as public. * Sets the folder as public.
* *
@ -1030,18 +1062,17 @@ public class StorageHubClientService {
setContextProviders(scope, authorizationToken); setContextProviders(scope, authorizationToken);
FolderContainer folderCont = shClient.open(folderId).asFolder(); FolderContainer folderCont = shClient.open(folderId).asFolder();
if(setPublic) { if (setPublic) {
folderCont.publish(); folderCont.publish();
logger.debug("Published the folder id: "+folderId); logger.debug("Published the folder id: " + folderId);
}else { } else {
folderCont.unpublish(); folderCont.unpublish();
logger.debug("Unpublished the folder id: "+folderId); logger.debug("Unpublished the folder id: " + folderId);
} }
return shClient.open(folderId).asFolder().get().isPublicItem(); return shClient.open(folderId).asFolder().get().isPublicItem();
} }
/** /**
* Update description for item. * Update description for item.
* *
@ -1059,13 +1090,14 @@ public class StorageHubClientService {
} }
/** /**
* To string. * To string.
* *
* @return the string * @return the string
*/ */
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see java.lang.Object#toString() * @see java.lang.Object#toString()
*/ */
@Override @Override
@ -1075,13 +1107,11 @@ public class StorageHubClientService {
builder.append("StorageHubClientService [scope="); builder.append("StorageHubClientService [scope=");
builder.append(scope); builder.append(scope);
builder.append(", authorizationToken="); builder.append(", authorizationToken=");
builder.append(authorizationToken.substring(0, authorizationToken.length()-5)+"XXXXX"); builder.append(authorizationToken.substring(0, authorizationToken.length() - 8) + "XXXXXXXX");
builder.append(", itemManagerClient="); builder.append(", itemManagerClient=");
builder.append(shClient); builder.append(shClient);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }
} }

View File

@ -27,6 +27,7 @@ import org.gcube.common.storagehub.model.service.Version;
import org.gcube.common.storagehubwrapper.server.converter.HLMapper; import org.gcube.common.storagehubwrapper.server.converter.HLMapper;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace; import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
import org.gcube.common.storagehubwrapper.shared.ACLType; import org.gcube.common.storagehubwrapper.shared.ACLType;
import org.gcube.common.storagehubwrapper.shared.Member;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InsufficientPrivilegesException; import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InsufficientPrivilegesException;
@ -684,7 +685,7 @@ public final class WorkspaceStorageHubClientService implements Workspace{
* @see org.gcube.portal.storagehubwrapper.server.tohl.Workspace#getSharedFolderMembers(java.lang.String) * @see org.gcube.portal.storagehubwrapper.server.tohl.Workspace#getSharedFolderMembers(java.lang.String)
*/ */
@Override @Override
public List<String> getSharedFolderMembers(String folderId) throws Exception { public List<Member> getSharedFolderMembers(String folderId) throws Exception {
try{ try{
LOGGER.debug("called Shared Folder Members"); LOGGER.debug("called Shared Folder Members");

View File

@ -39,7 +39,6 @@ import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItemType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
/** /**
* The Class HLMapper. * The Class HLMapper.
* *
@ -50,19 +49,6 @@ public class HLMapper {
private static Logger logger = LoggerFactory.getLogger(HLMapper.class); private static Logger logger = LoggerFactory.getLogger(HLMapper.class);
// public static Function<org.gcube.common.storagehub.model.items.nodes.accounting.AccountEntry, AccountingEntry> toAccountingEntry = new Function<org.gcube.common.storagehub.model.items.nodes.accounting.AccountEntry, AccountingEntry>() {
//
// public AccountingEntry apply(org.gcube.common.storagehub.model.items.nodes.accounting.AccountEntry accountingEntry) {
//
// return new AccountingEntry(
// accountingEntry.getUser(),
// accountingEntry.getDate(),
// accountingEntry.getType(),
// accountingEntry.getVersion(),
// accountingEntry.getPrimaryType());
// }
// }
/** /**
* To URL file. * To URL file.
* *
@ -74,7 +60,6 @@ public class HLMapper {
return (URLFile) toWorkspaceItem(extLink, false, false, false); return (URLFile) toWorkspaceItem(extLink, false, false, false);
} }
/** /**
* To workspace item. * To workspace item.
* *
@ -83,69 +68,61 @@ public class HLMapper {
* @return the t * @return the t
* @throws Exception the exception * @throws Exception the exception
*/ */
public static<T extends WorkspaceItem> T toWorkspaceItem(Item item) throws Exception{ public static <T extends WorkspaceItem> T toWorkspaceItem(Item item) throws Exception {
return toWorkspaceItem(item, false, false, false); return toWorkspaceItem(item, false, false, false);
} }
/** /**
* To accounting entries. * To accounting entries.
* *
* @param item the item * @param item the item
* @return the list * @return the list
*/ */
public static List<AccountEntry> toAccountingEntries(Item item){ public static List<AccountEntry> toAccountingEntries(Item item) {
List<AccountEntry> accountingEntries = null; List<AccountEntry> accountingEntries = null;
Accounting accounting = item.getAccounting(); Accounting accounting = item.getAccounting();
if(accounting!=null){ if (accounting != null) {
accountingEntries = accounting.getEntries(); accountingEntries = accounting.getEntries();
// for (AccountEntry ae : accounting.getEntries()) {
// accountingEntries.add(toAccountingEntry.apply(ae));
// }
} }
return accountingEntries; return accountingEntries;
} }
/** /**
* To property map. * To property map.
* *
* @param metadata the metadata * @param metadata the metadata
* @return the property map * @return the property map
*/ */
public static PropertyMap toPropertyMap(Metadata metadata){ public static PropertyMap toPropertyMap(Metadata metadata) {
PropertyMap pm = null; PropertyMap pm = null;
if(metadata!=null) if (metadata != null)
pm = new PropertyMap(metadata.getMap()); pm = new PropertyMap(metadata.getMap());
//IN CASE OF EMPTY MAP RETURNS NULL // IN CASE OF EMPTY MAP RETURNS NULL
if(pm!=null && pm.getValues()!=null && pm.getValues().isEmpty()) if (pm != null && pm.getValues() != null && pm.getValues().isEmpty())
pm = null; pm = null;
return pm; return pm;
} }
/** /**
* To workspace file version. * To workspace file version.
* *
* @param fileVersion the file version * @param fileVersion the file version
* @return the workspace file version * @return the workspace file version
*/ */
public static WorkspaceFileVersion toWorkspaceFileVersion(Version fileVersion){ public static WorkspaceFileVersion toWorkspaceFileVersion(Version fileVersion) {
WorkspaceFileVersion wsFileVersion = new WorkspaceFileVersion(); WorkspaceFileVersion wsFileVersion = new WorkspaceFileVersion();
wsFileVersion.setId(fileVersion.getId()); wsFileVersion.setId(fileVersion.getId());
wsFileVersion.setName(fileVersion.getName()); wsFileVersion.setName(fileVersion.getName());
wsFileVersion.setCreated(fileVersion.getCreated()); wsFileVersion.setCreated(fileVersion.getCreated());
wsFileVersion.setCurrentVersion(fileVersion.isCurrent()); wsFileVersion.setCurrentVersion(fileVersion.isCurrent());
//TODO MUST BE TERMINATED // TODO MUST BE TERMINATED
return wsFileVersion; return wsFileVersion;
} }
@ -160,12 +137,13 @@ public class HLMapper {
* @return the t * @return the t
* @throws Exception the exception * @throws Exception the exception
*/ */
public static<T extends WorkspaceItem> T toWorkspaceItem(Item item, boolean withAccounting, boolean withFileDetails, boolean withMapProperties) throws Exception{ public static <T extends WorkspaceItem> T toWorkspaceItem(Item item, boolean withAccounting,
boolean withFileDetails, boolean withMapProperties) throws Exception {
try{ try {
List<AccountEntry> accountingEntries = null; List<AccountEntry> accountingEntries = null;
if(withAccounting) if (withAccounting)
accountingEntries = toAccountingEntries(item); accountingEntries = toAccountingEntries(item);
org.gcube.common.storagehubwrapper.shared.tohl.impl.WorkspaceItem theItem = null; org.gcube.common.storagehubwrapper.shared.tohl.impl.WorkspaceItem theItem = null;
@ -175,48 +153,51 @@ public class HLMapper {
String itemName = item.getName(); String itemName = item.getName();
boolean isRoot = false; boolean isRoot = false;
logger.trace("The item: "+item); logger.trace("The item: " + item);
logger.trace("Converting Item: "+item.getName() + " with id: "+item.getId()); logger.trace("Converting Item: " + item.getName() + " with id: " + item.getId());
//THE ITEM IS A KIND OF FOLDER // THE ITEM IS A KIND OF FOLDER
if (item instanceof FolderItem){ if (item instanceof FolderItem) {
isFolder = true; isFolder = true;
FolderItem folderItem = (FolderItem) item; //?? FolderItem folderItem = (FolderItem) item; // ??
theItem = new WorkspaceFolder(); theItem = new WorkspaceFolder();
type = WorkspaceItemType.FOLDER; type = WorkspaceItemType.FOLDER;
if (item instanceof SharedFolder || item instanceof VreFolder) { if (item instanceof SharedFolder || item instanceof VreFolder) {
SharedFolder sharedfolder = (SharedFolder) item; //?? SharedFolder sharedfolder = (SharedFolder) item; // ??
theItem = new WorkspaceSharedFolder(); theItem = new WorkspaceSharedFolder();
type = WorkspaceItemType.SHARED_FOLDER; type = WorkspaceItemType.SHARED_FOLDER;
itemName = sharedfolder.getTitle(); //IN CASE OF SHARED FOLDER THE NAME IS AN UUID, I'M USING THE TITLE itemName = sharedfolder.getTitle(); // IN CASE OF SHARED FOLDER THE NAME IS AN UUID, I'M USING THE
// TITLE
if (sharedfolder.isVreFolder()){ if (sharedfolder.isVreFolder()) {
//logger.debug("Converting shared folder: "+theItem.getClass()); // logger.debug("Converting shared folder: "+theItem.getClass());
//VreFolder vreFolder = (VreFolder) item; // VreFolder vreFolder = (VreFolder) item;
//theItem = new WorkspaceVREFolder(); //NEVER INSTANCE THE WorkspaceVREFolder because VreFolder is never used by HL/StorageHub // theItem = new WorkspaceVREFolder(); //NEVER INSTANCE THE WorkspaceVREFolder
itemName = sharedfolder.getDisplayName(); //IN CASE OF VRE FOLDER I'M USING THE DISPLAYNAME // because VreFolder is never used by HL/StorageHub
itemName = sharedfolder.getDisplayName(); // IN CASE OF VRE FOLDER I'M USING THE DISPLAYNAME
((WorkspaceSharedFolder) theItem).setVreFolder(true); ((WorkspaceSharedFolder) theItem).setVreFolder(true);
type = WorkspaceItemType.VRE_FOLDER; type = WorkspaceItemType.VRE_FOLDER;
} }
} }
boolean isPublicItem = folderItem.isPublicItem(); boolean isPublicItem = folderItem.isPublicItem();
//((WorkspaceFolder) theItem).setPublicFolder(folderItem.isPublicItem()); // ((WorkspaceFolder) theItem).setPublicFolder(folderItem.isPublicItem());
//logger.debug("Wrapped as Folder"); // logger.debug("Wrapped as Folder");
//TODO THIS MUST BE REMOVED. Checking the old property isPublic added as "<boolean>true</boolean>" by HL // TODO THIS MUST BE REMOVED. Checking the old property isPublic added as
if(!isPublicItem){ // "<boolean>true</boolean>" by HL
try{ if (!isPublicItem) {
//Map<String, Object> map = item.getPropertyMap().getValues(); try {
// Map<String, Object> map = item.getPropertyMap().getValues();
// logger.debug("Property Map size: "+map.size()); // logger.debug("Property Map size: "+map.size());
// for (String key : map.keySet()) { // for (String key : map.keySet()) {
// logger.debug("Key: "+key+ "value: "+map.get(key)); // logger.debug("Key: "+key+ "value: "+map.get(key));
// } // }
String isPublic = (String) item.getMetadata().getMap().get("isPublic"); String isPublic = (String) item.getMetadata().getMap().get("isPublic");
logger.debug("The item name: "+item.getName()+ " has isPublic property like: "+isPublic); logger.debug("The item name: " + item.getName() + " has isPublic property like: " + isPublic);
isPublicItem = isPublic!=null?isPublic.toLowerCase().contains("true"):false; isPublicItem = isPublic != null ? isPublic.toLowerCase().contains("true") : false;
}catch(Exception e){ } catch (Exception e) {
//silent // silent
} }
} }
@ -224,21 +205,21 @@ public class HLMapper {
} }
//THE ITEM IS A KIND OF FILE // THE ITEM IS A KIND OF FILE
if(item instanceof AbstractFileItem){ if (item instanceof AbstractFileItem) {
theItem = new FileItem(); theItem = new FileItem();
type = WorkspaceItemType.FILE_ITEM; type = WorkspaceItemType.FILE_ITEM;
FileItemType fileItemType = null; FileItemType fileItemType = null;
if(item instanceof ExternalURL){ if (item instanceof ExternalURL) {
theItem = new URLFileItem(); theItem = new URLFileItem();
fileItemType = FileItemType.URL_DOCUMENT; fileItemType = FileItemType.URL_DOCUMENT;
}else if(item instanceof GenericFileItem){ } else if (item instanceof GenericFileItem) {
GenericFileItem gFI = (GenericFileItem) item; //?? GenericFileItem gFI = (GenericFileItem) item; // ??
fileItemType = FileItemType.DOCUMENT; fileItemType = FileItemType.DOCUMENT;
}else if(item instanceof PDFFileItem){ } else if (item instanceof PDFFileItem) {
theItem = new PDFFile(); theItem = new PDFFile();
fileItemType = FileItemType.PDF_DOCUMENT; fileItemType = FileItemType.PDF_DOCUMENT;
if(withFileDetails){ if (withFileDetails) {
PDFFileItem pdfFI = (PDFFileItem) item; PDFFileItem pdfFI = (PDFFileItem) item;
PDFContent pdfContent = pdfFI.getContent(); PDFContent pdfContent = pdfFI.getContent();
PDFFile thePDFFileItem = (PDFFile) theItem; PDFFile thePDFFileItem = (PDFFile) theItem;
@ -248,11 +229,11 @@ public class HLMapper {
thePDFFileItem.setTitle(pdfContent.getTitle()); thePDFFileItem.setTitle(pdfContent.getTitle());
thePDFFileItem.setAuthor(pdfContent.getAuthor()); thePDFFileItem.setAuthor(pdfContent.getAuthor());
} }
}else if(item instanceof org.gcube.common.storagehub.model.items.ImageFile){ } else if (item instanceof org.gcube.common.storagehub.model.items.ImageFile) {
theItem = new ImageFile(); theItem = new ImageFile();
fileItemType = FileItemType.IMAGE_DOCUMENT; fileItemType = FileItemType.IMAGE_DOCUMENT;
if(withFileDetails){ if (withFileDetails) {
org.gcube.common.storagehub.model.items.ImageFile imgFI = (org.gcube.common.storagehub.model.items.ImageFile) item; //?? org.gcube.common.storagehub.model.items.ImageFile imgFI = (org.gcube.common.storagehub.model.items.ImageFile) item; // ??
ImageFile theImageFileItem = (ImageFile) theItem; ImageFile theImageFileItem = (ImageFile) theItem;
ImageContent content = imgFI.getContent(); ImageContent content = imgFI.getContent();
theImageFileItem.setHeight(content.getHeight()); theImageFileItem.setHeight(content.getHeight());
@ -267,26 +248,26 @@ public class HLMapper {
FileItem theFileItem = (FileItem) theItem; FileItem theFileItem = (FileItem) theItem;
theFileItem.setFileItemType(fileItemType); theFileItem.setFileItemType(fileItemType);
if(aC!=null){ if (aC != null) {
logger.debug("The content is not null for item: "+itemAb.getId()); logger.debug("The content is not null for item: " + itemAb.getId());
theFileItem.setMimeType(aC.getMimeType()); theFileItem.setMimeType(aC.getMimeType());
theFileItem.setSize(aC.getSize()); theFileItem.setSize(aC.getSize());
}else } else
logger.warn("The content is null for item: "+itemAb.getId()); logger.warn("The content is null for item: " + itemAb.getId());
//TODO ADD VERSION NAME // TODO ADD VERSION NAME
} }
//ADDING (GCUBE) PROPERTIES // ADDING (GCUBE) PROPERTIES
PropertyMap pm = null; PropertyMap pm = null;
if(withMapProperties || isFolder){ if (withMapProperties || isFolder) {
//System.out.println("Setting map: "+item.getPropertyMap().getValues()); // System.out.println("Setting map: "+item.getPropertyMap().getValues());
pm = toPropertyMap(item.getMetadata()); pm = toPropertyMap(item.getMetadata());
} }
//CONVERTING EXTERNALLINK // CONVERTING EXTERNALLINK
if(item instanceof ExternalLink) { if (item instanceof ExternalLink) {
logger.trace("FOUND an ExternalLink..."); logger.trace("FOUND an ExternalLink...");
type = WorkspaceItemType.URL_ITEM; type = WorkspaceItemType.URL_ITEM;
ExternalLink extLink = (ExternalLink) item; ExternalLink extLink = (ExternalLink) item;
@ -295,11 +276,11 @@ public class HLMapper {
theURLFile.setValue(extLink.getValue()); theURLFile.setValue(extLink.getValue());
} }
//CONVERTING TRASH ITEM // CONVERTING TRASH ITEM
if(item.isTrashed() && item instanceof TrashItem){ if (item.isTrashed() && item instanceof TrashItem) {
type = WorkspaceItemType.TRASH_ITEM; type = WorkspaceItemType.TRASH_ITEM;
TrashItem trashItem = (TrashItem) item; TrashItem trashItem = (TrashItem) item;
itemName = trashItem.getTitle(); //IN CASE OF TRASHED ITEM THE NAME IS THE ID, SO I'M USING THE TITLE itemName = trashItem.getTitle(); // IN CASE OF TRASHED ITEM THE NAME IS THE ID, SO I'M USING THE TITLE
theItem = new org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem(); theItem = new org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem();
org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem theTrashItem = (org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem) theItem; org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem theTrashItem = (org.gcube.common.storagehubwrapper.shared.tohl.impl.TrashItem) theItem;
theTrashItem.setDeletedBy(trashItem.getDeletedBy()); theTrashItem.setDeletedBy(trashItem.getDeletedBy());
@ -309,16 +290,16 @@ public class HLMapper {
theTrashItem.setLenght(trashItem.getLenght()); theTrashItem.setLenght(trashItem.getLenght());
theTrashItem.setMimeType(trashItem.getMimeType()); theTrashItem.setMimeType(trashItem.getMimeType());
isFolder = trashItem.isFolder(); //DO NOT MOVE THIS SET isFolder = trashItem.isFolder(); // DO NOT MOVE THIS SET
if(isFolder) //Avoiding null exception on if (isFolder) // Avoiding null exception on
type = WorkspaceItemType.TRASH_FOLDER; type = WorkspaceItemType.TRASH_FOLDER;
logger.debug("Wrapped as TrashItem"); logger.debug("Wrapped as TrashItem");
} }
if(item instanceof GCubeItem){ if (item instanceof GCubeItem) {
type = WorkspaceItemType.FILE_ITEM; type = WorkspaceItemType.FILE_ITEM;
GCubeItem gcubeItem = (GCubeItem) item; //?? GCubeItem gcubeItem = (GCubeItem) item; // ??
theItem = new GcubeItem(); theItem = new GcubeItem();
GcubeItem theGcubeItem = (GcubeItem) theItem; GcubeItem theGcubeItem = (GcubeItem) theItem;
theGcubeItem.setFileItemType(FileItemType.GCUBE_ITEM); theGcubeItem.setFileItemType(FileItemType.GCUBE_ITEM);
@ -326,7 +307,7 @@ public class HLMapper {
theGcubeItem.setCreator(gcubeItem.getCreator()); theGcubeItem.setCreator(gcubeItem.getCreator());
theGcubeItem.setItemType(gcubeItem.getItemType()); theGcubeItem.setItemType(gcubeItem.getItemType());
theGcubeItem.setShared(gcubeItem.isShared()); theGcubeItem.setShared(gcubeItem.isShared());
if(withMapProperties){ if (withMapProperties) {
PropertyMap property = toPropertyMap(gcubeItem.getProperty()); PropertyMap property = toPropertyMap(gcubeItem.getProperty());
theGcubeItem.setProperty(property); theGcubeItem.setProperty(property);
} }
@ -334,7 +315,7 @@ public class HLMapper {
logger.debug("Wrapped as GcubeItem"); logger.debug("Wrapped as GcubeItem");
} }
if(theItem==null){ if (theItem == null) {
logger.info("Mapping unknown object as simple FileItem"); logger.info("Mapping unknown object as simple FileItem");
theItem = new FileItem(); theItem = new FileItem();
type = WorkspaceItemType.FILE_ITEM; type = WorkspaceItemType.FILE_ITEM;
@ -359,23 +340,19 @@ public class HLMapper {
theItem.setAccounting(accountingEntries); theItem.setAccounting(accountingEntries);
theItem.setType(type); theItem.setType(type);
theItem.setFolder(isFolder); theItem.setFolder(isFolder);
theItem.setRoot(isRoot); //THIS IS ALWAYS FALSE. SHUB DOES NOT RETURN THIS INFORMATION theItem.setRoot(isRoot); // THIS IS ALWAYS FALSE. SHUB DOES NOT RETURN THIS INFORMATION
theItem.setPropertyMap(pm); theItem.setPropertyMap(pm);
logger.debug("Wrapped WsItem: "+theItem); logger.debug("Wrapped WsItem: " + theItem);
logger.debug("Wrapped WsItem has type: "+theItem.getClass().getName()); logger.debug("Wrapped WsItem has type: " + theItem.getClass().getName());
return (T) theItem; return (T) theItem;
}catch (Exception e){ } catch (Exception e) {
logger.error("Error on converting the item with id: "+item.getId(), e); logger.error("Error on converting the item with id: " + item.getId(), e);
throw e; throw e;
} }
} }
} }

View File

@ -13,6 +13,7 @@ import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.items.nodes.accounting.AccountEntry; import org.gcube.common.storagehub.model.items.nodes.accounting.AccountEntry;
import org.gcube.common.storagehubwrapper.server.WorkspaceStorageHubClientService; import org.gcube.common.storagehubwrapper.server.WorkspaceStorageHubClientService;
import org.gcube.common.storagehubwrapper.shared.ACLType; import org.gcube.common.storagehubwrapper.shared.ACLType;
import org.gcube.common.storagehubwrapper.shared.Member;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceSharedFolder;
@ -193,7 +194,7 @@ public interface Workspace {
* @return the shared folder members * @return the shared folder members
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<String> getSharedFolderMembers(String folderid) throws Exception; public List<Member> getSharedFolderMembers(String folderid) throws Exception;
/** /**
* Check if an item with the specified name exists in the specified folder. * Check if an item with the specified name exists in the specified folder.

View File

@ -0,0 +1,125 @@
package org.gcube.common.storagehubwrapper.shared;
import java.io.Serializable;
/**
* The Class Member.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Apr 29, 2022
*/
public class Member implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1454948336452658186L;
/**
* The Enum TYPE.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Apr 29, 2022
*/
public static enum TYPE {
USER, GROUP
}
private String identity;
private String name;
private TYPE memberType = TYPE.USER;
/**
* Instantiates a new member.
*/
public Member() {
}
/**
* Instantiates a new member.
*
* @param identity the identity is the username of a User or the name of a
* Group. In general is key to identify he/she/it in the in
* the infrastructure
* @param name the name is the name of a User or the name of a Group
* @param memberType the member type
*/
public Member(String identity, String name, TYPE memberType) {
super();
this.identity = identity;
this.name = name;
this.memberType = memberType;
}
/**
* Gets the identity.
*
* @return the login in case of user and the groupName stored in SHUB (e.g.
* gcube-devsec-devVRE) in case of group
*/
public String getIdentity() {
return identity;
}
/**
* Gets the name.
*
* @return the login in case of user and the groupName in case of group
*/
public String getName() {
return name;
}
/**
* Gets the member type.
*
* @return the member type
*/
public TYPE getMemberType() {
return memberType;
}
/**
* Sets the identity.
*
* @param identity the new identity
*/
public void setIdentity(String identity) {
this.identity = identity;
}
/**
* Sets the name.
*
* @param name the new name
*/
public void setName(String name) {
this.name = name;
}
/**
* Sets the member type.
*
* @param memberType the new member type
*/
public void setMemberType(TYPE memberType) {
this.memberType = memberType;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Member [identity=");
builder.append(identity);
builder.append(", name=");
builder.append(name);
builder.append(", memberType=");
builder.append(memberType);
builder.append("]");
return builder.toString();
}
}

1
src/test/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/resources/

View File

@ -6,6 +6,7 @@ import java.util.Map;
import org.gcube.common.storagehubwrapper.server.StorageHubWrapper; import org.gcube.common.storagehubwrapper.server.StorageHubWrapper;
import org.gcube.common.storagehubwrapper.server.WorkspaceStorageHubClientService; import org.gcube.common.storagehubwrapper.server.WorkspaceStorageHubClientService;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace; import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
import org.gcube.common.storagehubwrapper.shared.Member;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem; import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException; import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException;
@ -14,29 +15,24 @@ import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.WrongItemTypeEx
import org.gcube.common.storagehubwrapper.shared.tohl.impl.FileItem; import org.gcube.common.storagehubwrapper.shared.tohl.impl.FileItem;
import org.gcube.common.storagehubwrapper.shared.tohl.impl.ImageFile; import org.gcube.common.storagehubwrapper.shared.tohl.impl.ImageFile;
import org.gcube.common.storagehubwrapper.shared.tohl.impl.PDFFile; import org.gcube.common.storagehubwrapper.shared.tohl.impl.PDFFile;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
/** /**
* *
*/ */
/** /**
* *
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jun 20, 2018
* Jun 20, 2018
*/ */
public class WorkspaceInstance { public class WorkspaceInstance {
public static String SCOPE = "/gcube"; // public static String SCOPE = "/gcube";
//public static String SCOPE = "/d4science.research-infrastructures.eu"; public static String SCOPE = "/d4science.research-infrastructures.eu";
// public static String USERNAME = "massimiliano.assante";
//public static String USERNAME = "massimiliano.assante";
public static String USERNAME = "francesco.mangiacrapa"; public static String USERNAME = "francesco.mangiacrapa";
public static String TOKEN = System.getenv("TOKEN_gcube"); //YOU MUST SET THIS AS Environment variable public static String TOKEN = System.getenv("TOKEN_gcube"); // YOU MUST SET THIS AS Environment variable
public static String FIND_FILE_NAME = "francesco"; public static String FIND_FILE_NAME = "francesco";
public static String rootId = null; public static String rootId = null;
@ -44,21 +40,20 @@ public class WorkspaceInstance {
private WorkspaceStorageHubClientService workspace; private WorkspaceStorageHubClientService workspace;
//@Before // @Before
public void init(){ public void init() {
if(TOKEN==null) { if (TOKEN == null) {
System.err.println("You must set the token as Environment variable"); System.err.println("You must set the token as Environment variable");
return;
} }
System.out.println("Read TOKEN_gcube: "+TOKEN); System.out.println("Read TOKEN_gcube: " + TOKEN);
//METHOD 1 // METHOD 1
storageHubWrapper = new StorageHubWrapper(SCOPE, TOKEN, false, false, true); storageHubWrapper = new StorageHubWrapper(SCOPE, TOKEN, false, false, true);
//workspace = storageHubWrapper.getWorkspace(); // workspace = storageHubWrapper.getWorkspace();
//METHOD 2 // METHOD 2
// StorageHubClientService storageHubClientService = new StorageHubClientService(SCOPE, TOKEN); // StorageHubClientService storageHubClientService = new StorageHubClientService(SCOPE, TOKEN);
// workspace = new WorkspaceStorageHubClientService.WorkspaceStorageHubClientServiceBuilder(storageHubClientService). // workspace = new WorkspaceStorageHubClientService.WorkspaceStorageHubClientServiceBuilder(storageHubClientService).
// withAccounting(false). // withAccounting(false).
@ -66,41 +61,41 @@ public class WorkspaceInstance {
// build(); // build();
} }
//@Test // @Test
public void getRoot() { public void getRoot() {
System.out.println("Get Root test"); System.out.println("Get Root test");
WorkspaceFolder root; WorkspaceFolder root;
try { try {
root = storageHubWrapper.getWorkspace().getRoot(); root = storageHubWrapper.getWorkspace().getRoot();
rootId = root.getId(); rootId = root.getId();
System.out.println("The root is:"+root); System.out.println("The root is:" + root);
} } catch (Exception e) {
catch (Exception e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
} }
//@Test // @Test
public void getChildren() throws Exception{ public void getChildren() throws Exception {
System.out.println("Get children test"); System.out.println("Get children test");
WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot(); WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot();
List<? extends WorkspaceItem> children = storageHubWrapper.getWorkspace().getChildren(root.getId()); List<? extends WorkspaceItem> children = storageHubWrapper.getWorkspace().getChildren(root.getId());
//WorkspaceFolder root = workspace.getRoot(); // WorkspaceFolder root = workspace.getRoot();
//List<? extends WorkspaceItem> children = workspace.getChildren(root.getId()); // List<? extends WorkspaceItem> children = workspace.getChildren(root.getId());
int i = 0; int i = 0;
for (WorkspaceItem workspaceItem : children) { for (WorkspaceItem workspaceItem : children) {
System.out.println(++i+")"+workspaceItem.getId() + " name: "+workspaceItem.getName() + " type: "+workspaceItem.getType() +" class: "+workspaceItem.getClass()); System.out.println(++i + ")" + workspaceItem.getId() + " name: " + workspaceItem.getName() + " type: "
+ workspaceItem.getType() + " class: " + workspaceItem.getClass());
} }
} }
//@Test // @Test
public void getPathOnShared() throws Exception{ public void getPathOnShared() throws Exception {
System.out.println("Get Path on Shared"); System.out.println("Get Path on Shared");
WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot(); WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot();
@ -108,30 +103,30 @@ public class WorkspaceInstance {
int i = 0; int i = 0;
for (WorkspaceItem workspaceItem : children) { for (WorkspaceItem workspaceItem : children) {
if(workspaceItem.isShared()) { if (workspaceItem.isShared()) {
System.out.println(++i+")"+workspaceItem.getId() + " name: "+workspaceItem.getName() + " type: "+workspaceItem.getPath()); System.out.println(++i + ")" + workspaceItem.getId() + " name: " + workspaceItem.getName() + " type: "
+ workspaceItem.getPath());
} }
} }
} }
// @Test
//@Test public void getFilteredChildren() throws Exception {
public void getFilteredChildren() throws Exception{
System.out.println("Get children test"); System.out.println("Get children test");
WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot(); WorkspaceFolder root = storageHubWrapper.getWorkspace().getRoot();
Class filterClass = org.gcube.common.storagehub.model.items.FolderItem.class; Class filterClass = org.gcube.common.storagehub.model.items.FolderItem.class;
List<? extends WorkspaceItem> children = storageHubWrapper.getWorkspace().getFilteredChildren(root.getId(), filterClass); List<? extends WorkspaceItem> children = storageHubWrapper.getWorkspace().getFilteredChildren(root.getId(),
filterClass);
//WorkspaceFolder root = workspace.getRoot(); // WorkspaceFolder root = workspace.getRoot();
//List<? extends WorkspaceItem> children = workspace.getChildren(root.getId()); // List<? extends WorkspaceItem> children = workspace.getChildren(root.getId());
int i = 0; int i = 0;
for (WorkspaceItem workspaceItem : children) { for (WorkspaceItem workspaceItem : children) {
System.out.println(++i+")"+workspaceItem); System.out.println(++i + ")" + workspaceItem);
System.out.println(workspaceItem.getType() +" "+workspaceItem.getClass()); System.out.println(workspaceItem.getType() + " " + workspaceItem.getClass());
// System.out.println(++i+")"); // System.out.println(++i+")");
// if(workspaceItem.isFolder()){ // if(workspaceItem.isFolder()){
@ -145,25 +140,26 @@ public class WorkspaceInstance {
} }
public static void printMap(WorkspaceItem workspaceItem){ public static void printMap(WorkspaceItem workspaceItem) {
if(workspaceItem.getPropertyMap()!=null){ if (workspaceItem.getPropertyMap() != null) {
System.out.println(workspaceItem.getId() + " name: "+workspaceItem.getName() + " isFolder: "+workspaceItem.isFolder()); System.out.println(workspaceItem.getId() + " name: " + workspaceItem.getName() + " isFolder: "
System.out.println("Property Map: "+workspaceItem.getPropertyMap().getValues().toString()); + workspaceItem.isFolder());
System.out.println("Property Map: " + workspaceItem.getPropertyMap().getValues().toString());
} }
} }
//@Test // @Test
public void getWorkspaceId() { public void getWorkspaceId() {
System.out.println("Getting the workspaceId test"); System.out.println("Getting the workspaceId test");
try { try {
Workspace ws = storageHubWrapper.getWorkspace(); Workspace ws = storageHubWrapper.getWorkspace();
//Workspace ws = workspace; // Workspace ws = workspace;
if(ws!=null){ if (ws != null) {
WorkspaceFolder root = ws.getRoot(); WorkspaceFolder root = ws.getRoot();
System.out.println("Retrieve the root "+root.getId()+" correctly"); System.out.println("Retrieve the root " + root.getId() + " correctly");
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -171,7 +167,30 @@ public class WorkspaceInstance {
} }
//@Test //@Test
public void getChildrenPerWorkspaceItem() throws InternalErrorException{ public void getSharedFolderMembers() {
System.out.println("Getting getSharedFolderMembers");
try {
String sharedFolderId = "7e3c6636-927c-4139-9fcc-64986ea70cbf"; // devNext
sharedFolderId = "c141d53d-4cae-4bfc-a6f7-9b8bbd8c0e2b"; //NextNext
SCOPE = "/gcube";
TOKEN = "";
storageHubWrapper = new StorageHubWrapper(SCOPE, TOKEN);
List<Member> listMembers = storageHubWrapper.getWorkspace().getSharedFolderMembers(sharedFolderId);
System.out.println("Foud " + listMembers.size() + " member/s");
for (Member member : listMembers) {
System.out.println(member);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void getChildrenPerWorkspaceItem() throws InternalErrorException {
System.out.println("Get children test per workspace item"); System.out.println("Get children test per workspace item");
try { try {
@ -183,11 +202,11 @@ public class WorkspaceInstance {
// List<? extends WorkspaceItem> children = workspace.getChildren(root.getId()); // List<? extends WorkspaceItem> children = workspace.getChildren(root.getId());
int i = 0; int i = 0;
Map<String, List<WorkspaceItem>> map = new HashMap<String,List<WorkspaceItem>>(); Map<String, List<WorkspaceItem>> map = new HashMap<String, List<WorkspaceItem>>();
for (WorkspaceItem workspaceItem : children) { for (WorkspaceItem workspaceItem : children) {
String key = workspaceItem.getType().name(); String key = workspaceItem.getType().name();
List<WorkspaceItem> list = map.get(key); List<WorkspaceItem> list = map.get(key);
if(list==null){ if (list == null) {
list = new ArrayList<WorkspaceItem>(); list = new ArrayList<WorkspaceItem>();
} }
@ -204,20 +223,20 @@ public class WorkspaceInstance {
switch (fileItem.getFileItemType()) { switch (fileItem.getFileItemType()) {
case PDF_DOCUMENT: case PDF_DOCUMENT:
PDFFile pdfFile = (PDFFile) fileItem; PDFFile pdfFile = (PDFFile) fileItem;
System.out.println("PDF_DOCUMENT "+pdfFile); System.out.println("PDF_DOCUMENT " + pdfFile);
PDFFile completeItem = (PDFFile) storageHubWrapper.getWorkspace().getItem(fileItem.getId(), true, true, true); PDFFile completeItem = (PDFFile) storageHubWrapper.getWorkspace().getItem(fileItem.getId(),
true, true, true);
System.out.println(completeItem); System.out.println(completeItem);
break; break;
case IMAGE_DOCUMENT: case IMAGE_DOCUMENT:
ImageFile imageFile = (ImageFile) fileItem; ImageFile imageFile = (ImageFile) fileItem;
System.out.println("IMAGE_DOCUMENT "+imageFile); System.out.println("IMAGE_DOCUMENT " + imageFile);
break; break;
default: default:
break; break;
} }
System.out.println(fileItem.getFileItemType() +" "+workspaceItem.getClass()); System.out.println(fileItem.getFileItemType() + " " + workspaceItem.getClass());
break; break;
default: default:
@ -225,33 +244,32 @@ public class WorkspaceInstance {
} }
} }
} }
} } catch (Exception e) {
catch (Exception e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
} }
//@Test // @Test
public void findFileName() throws InternalErrorException{ public void findFileName() throws InternalErrorException {
System.out.println("Find file name test"); System.out.println("Find file name test");
getRoot(); getRoot();
try { try {
//List<WorkspaceItem> foundItems = storageHubWrapper.getWorkspace().find(FIND_FILE_NAME,rootId); // List<WorkspaceItem> foundItems =
List<? extends WorkspaceItem> foundItems = workspace.find(FIND_FILE_NAME,rootId); // storageHubWrapper.getWorkspace().find(FIND_FILE_NAME,rootId);
List<? extends WorkspaceItem> foundItems = workspace.find(FIND_FILE_NAME, rootId);
if(foundItems==null || foundItems.size()==0){ if (foundItems == null || foundItems.size() == 0) {
System.out.println("No Items found with name: "+FIND_FILE_NAME+ " in the parent: "+rootId); System.out.println("No Items found with name: " + FIND_FILE_NAME + " in the parent: " + rootId);
return; return;
} }
System.out.println("Items found with name: "+FIND_FILE_NAME+ " in the parent: "+rootId +" are:"); System.out.println("Items found with name: " + FIND_FILE_NAME + " in the parent: " + rootId + " are:");
for (WorkspaceItem workspaceItem : foundItems) { for (WorkspaceItem workspaceItem : foundItems) {
System.out.println(workspaceItem); System.out.println(workspaceItem);
} }
} } catch (ItemNotFoundException | WrongItemTypeException e) {
catch (ItemNotFoundException | WrongItemTypeException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }