diff --git a/pom.xml b/pom.xml
index 8457d70..64db6ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
org.gcube.common
storagehub-client-library
- 1.2.2
+ 1.3.0-SNAPSHOT
storagehub-client-library
@@ -26,7 +26,7 @@
org.gcube.distribution
gcube-bom
- 1.3.1
+ 2.0.1
pom
import
@@ -54,13 +54,9 @@
org.gcube.common
storagehub-model
- [1.0.0,2.0.0-SNAPSHOT)
-
-
- com.fasterxml.jackson.jaxrs
- jackson-jaxrs-json-provider
- 2.3.0
+ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
+
org.glassfish.jersey.media
jersey-media-json-jackson
@@ -99,7 +95,6 @@
ch.qos.logback
logback-classic
- 1.0.13
test
@@ -108,7 +103,12 @@
2.4
test
-
+
+ com.opencsv
+ opencsv
+ 5.3
+ test
+
diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java
index 3235496..009a1cc 100644
--- a/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java
+++ b/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java
@@ -7,6 +7,7 @@ import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest;
import org.gcube.common.storagehub.client.Constants;
import org.gcube.common.storagehub.client.proxies.GroupManagerClient;
import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
+import org.gcube.common.storagehub.client.proxies.MessageManagerClient;
import org.gcube.common.storagehub.client.proxies.UserManagerClient;
import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient;
@@ -20,6 +21,7 @@ public abstract class AbstractPlugin implements Plugin {
private static final WorkspaceManagerPlugin workspace_plugin = new WorkspaceManagerPlugin();
private static final UserManagerPlugin user_plugin = new UserManagerPlugin();
private static final GroupManagerPlugin group_plugin = new GroupManagerPlugin();
+ private static final MessageManagerPlugin messages_plugin = new MessageManagerPlugin();
public static ProxyBuilder item() {
@@ -37,6 +39,10 @@ public abstract class AbstractPlugin implements Plugin {
public static ProxyBuilder workspace() {
return new ProxyBuilderImpl(workspace_plugin);
}
+
+ public static ProxyBuilder messages() {
+ return new ProxyBuilderImpl(messages_plugin);
+ }
public final String name;
diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/MessageManagerPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/MessageManagerPlugin.java
new file mode 100644
index 0000000..ec03afa
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/client/plugins/MessageManagerPlugin.java
@@ -0,0 +1,53 @@
+package org.gcube.common.storagehub.client.plugins;
+
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.ws.EndpointReference;
+
+import org.gcube.common.calls.jaxrs.GcubeService;
+import org.gcube.common.calls.jaxrs.TargetFactory;
+import org.gcube.common.clients.config.ProxyConfig;
+import org.gcube.common.clients.delegates.ProxyDelegate;
+import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest;
+import org.gcube.common.gxrest.response.entity.SerializableErrorEntityTextReader;
+import org.gcube.common.storagehub.client.Constants;
+import org.gcube.common.storagehub.client.MyInputStreamProvider;
+import org.gcube.common.storagehub.client.proxies.DefaultMessageManager;
+import org.gcube.common.storagehub.client.proxies.MessageManagerClient;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.w3c.dom.Node;
+
+public class MessageManagerPlugin extends AbstractPlugin {
+
+ public MessageManagerPlugin() {
+ super("storagehub/workspace");
+ }
+
+ @Override
+ public Exception convert(Exception e, ProxyConfig, ?> arg1) {
+ return e;
+ }
+
+ @Override
+ public MessageManagerClient newProxy(ProxyDelegate delegate) {
+ return new DefaultMessageManager(delegate);
+ }
+
+ @Override
+ public GXWebTargetAdapterRequest resolve(EndpointReference epr, ProxyConfig, ?> config)
+ throws Exception {
+ DOMResult result = new DOMResult();
+ epr.writeTo(result);
+ Node node =result.getNode();
+ Node child=node.getFirstChild();
+ String address = child.getTextContent();
+ //GXWebTargetAdapterRequest request = GXWebTargetAdapterRequest.newRequest(address).path(this.name).path("items");
+ GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).andPath("messages");
+ GXWebTargetAdapterRequest requestAdapter = TargetFactory.stubFor(service).getAsGxRest(address);
+ requestAdapter.register(SerializableErrorEntityTextReader.class);
+ requestAdapter.register(MyInputStreamProvider.class);
+ requestAdapter.register(MultiPartFeature.class);
+ return requestAdapter;
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java
index 01a65f6..6f76b97 100644
--- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java
+++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java
@@ -587,12 +587,13 @@ public class DefaultItemManager implements ItemManagerClient {
Objects.requireNonNull(id, "id cannot be null");
Objects.requireNonNull(id, "name cannot be null");
- GXWebTargetAdapterRequest myManager = manager.path(id).path("items").path(name);
+ GXWebTargetAdapterRequest myManager = manager.path(id).path("items");
Map params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
params.put("exclude",excludeNodes);
-
+ params.put("name", new Object[] {name});
+
GXInboundResponse response = myManager.queryParams(params).get();
if (response.isErrorResponse()) {
diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java
new file mode 100644
index 0000000..6fe70e8
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultMessageManager.java
@@ -0,0 +1,257 @@
+package org.gcube.common.storagehub.client.proxies;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.gcube.common.clients.Call;
+import org.gcube.common.clients.delegates.ProxyDelegate;
+import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest;
+import org.gcube.common.gxrest.response.inbound.GXInboundResponse;
+import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
+import org.gcube.common.storagehub.model.exceptions.StorageHubException;
+import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException;
+import org.gcube.common.storagehub.model.items.Item;
+import org.gcube.common.storagehub.model.messages.Message;
+import org.gcube.common.storagehub.model.service.ItemList;
+import org.gcube.common.storagehub.model.types.MessageList;
+
+public class DefaultMessageManager implements MessageManagerClient {
+
+ private final ProxyDelegate delegate;
+
+
+ public DefaultMessageManager(ProxyDelegate config){
+ this.delegate = config;
+ }
+
+
+ @Override
+ public Message get(String id) throws StorageHubException {
+ Call call = new Call() {
+ @Override
+ public Message call(GXWebTargetAdapterRequest manager) throws Exception {
+ Objects.requireNonNull(id, "id cannot be null");
+ GXWebTargetAdapterRequest myManager = manager.path(id);
+
+ GXInboundResponse response = myManager.get();
+
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else
+ throw new BackendGenericError("HTTP error code is "+response.getHTTPCode());
+ }
+
+ Message item = response.getSource().readEntity(Message.class);
+
+
+ return item;
+ }
+ };
+ try {
+ return delegate.make(call);
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+ }
+
+ @Override
+ public List getReceivedMessages(int reduceBody) throws StorageHubException {
+ return getMessages("inbox", reduceBody);
+ }
+
+ @Override
+ public List getSentMessages(int reduceBody) throws StorageHubException {
+ return getMessages("sent", reduceBody);
+ }
+
+ @Override
+ public List getReceivedMessages() throws StorageHubException {
+ return getMessages("inbox", -1);
+ }
+
+
+ @Override
+ public List getSentMessages() throws StorageHubException {
+ return getMessages("sent", -1);
+ }
+
+ @Override
+ public void setRead(String id, Boolean value) throws StorageHubException {
+ setBooleanProp("hl:read", value, id);
+ }
+
+ @Override
+ public void setOpened(String id, Boolean value) throws StorageHubException {
+ setBooleanProp("hl:open", value, id);
+ }
+
+
+ private void setBooleanProp(String prop, Boolean bool, String id) throws StorageHubException {
+ Call call = new Call() {
+ @Override
+ public Void call(GXWebTargetAdapterRequest manager) throws Exception {
+ GXWebTargetAdapterRequest myManager = manager.path(id).path(prop);
+
+ GXInboundResponse response = myManager.put(Entity.json(Boolean.TRUE));
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else
+ throw new BackendGenericError("HTTP error code is "+response.getHTTPCode());
+ }
+
+ return null;
+ }
+ };
+ try {
+ delegate.make(call);
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+
+ }
+
+ @Override
+ public String sendMessage(List recipients, String subject, String body, List attachments) throws StorageHubException {
+ Call call = new Call() {
+ @Override
+ public String call(GXWebTargetAdapterRequest manager) throws Exception {
+ Objects.requireNonNull(recipients, "recipients cannot be null");
+ Objects.requireNonNull(subject, "subject cannot be null");
+ Objects.requireNonNull(body, "body cannot be null");
+ GXWebTargetAdapterRequest myManager = manager.path("send");
+ MultivaluedMap formData = new MultivaluedHashMap();
+
+ recipients.forEach(r-> formData.add("to[]", r));
+ formData.add("subject", subject);
+ formData.add("body", body);
+ if (attachments!=null)
+ attachments.forEach(a -> formData.add("attachemnts[]", a));
+
+ System.out.println(formData.toString());
+ GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED));
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else
+ throw new BackendGenericError("HTTP error code is "+response.getHTTPCode());
+ }
+
+ return response.getSource().readEntity(String.class);
+ }
+ };
+ try {
+ return delegate.make(call);
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+
+ }
+
+
+ @Override
+ public void delete(String id) throws StorageHubException {
+ Call call = new Call() {
+ @Override
+ public Void call(GXWebTargetAdapterRequest manager) throws Exception {
+ Objects.requireNonNull(id, "id cannot be null");
+ GXWebTargetAdapterRequest myManager = manager.path(id);
+
+ GXInboundResponse response = myManager.delete();
+
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else
+ throw new BackendGenericError("HTTP error code is "+response.getHTTPCode());
+ }
+
+ return null;
+ }
+ };
+ try {
+ delegate.make(call);
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+
+ }
+
+
+ public List extends Item> getAttachments(String messageId) throws StorageHubException{
+ Call call = new Call() {
+ @Override
+ public ItemList call(GXWebTargetAdapterRequest manager) throws Exception {
+ GXWebTargetAdapterRequest myManager = manager.path(messageId).path("attachments");
+ GXInboundResponse response = myManager.get();
+
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else if (response.getHTTPCode()==403)
+ throw new UserNotAuthorizedException("the call to this method is not allowed for the user");
+ else
+ throw new BackendGenericError();
+ }
+
+
+ return response.getSource().readEntity(ItemList.class);
+ }
+ };
+ try {
+ return delegate.make(call).getItemlist();
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+ }
+
+
+ private List getMessages(final String path, int reduceBody ) throws StorageHubException{
+ Call> call = new Call>() {
+ @Override
+ public List call(GXWebTargetAdapterRequest manager) throws Exception {
+ GXWebTargetAdapterRequest myManager = manager.path(path);
+ if (reduceBody>0)
+ myManager.queryParams(Collections.singletonMap("reduceBody", new Object[]{reduceBody}));
+ GXInboundResponse response = myManager.get();
+
+ if (response.isErrorResponse()) {
+ if (response.hasException())
+ throw response.getException();
+ else if (response.getHTTPCode()==403)
+ throw new UserNotAuthorizedException("the call to this method is not allowed for the user");
+ else
+ throw new BackendGenericError();
+ }
+
+
+ return response.getSource().readEntity(MessageList.class).getMessages();
+ }
+ };
+ try {
+ return delegate.make(call);
+ }catch(StorageHubException e) {
+ throw e;
+ }catch(Exception e1) {
+ throw new RuntimeException(e1);
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/MessageManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/MessageManagerClient.java
new file mode 100644
index 0000000..67a6ab7
--- /dev/null
+++ b/src/main/java/org/gcube/common/storagehub/client/proxies/MessageManagerClient.java
@@ -0,0 +1,32 @@
+package org.gcube.common.storagehub.client.proxies;
+
+import java.util.List;
+
+import org.gcube.common.storagehub.model.exceptions.StorageHubException;
+import org.gcube.common.storagehub.model.items.Item;
+import org.gcube.common.storagehub.model.messages.Message;
+
+public interface MessageManagerClient {
+
+ Message get(String id) throws StorageHubException;
+
+ List extends Item> getAttachments(String id) throws StorageHubException;
+
+ List getReceivedMessages(int reduceBody) throws StorageHubException;
+
+ List getSentMessages(int reduceBody) throws StorageHubException;
+
+ List getReceivedMessages() throws StorageHubException;
+
+ List getSentMessages() throws StorageHubException;
+
+
+ void delete(String id) throws StorageHubException;
+
+ String sendMessage(List recipients, String subject, String body, List attachments)
+ throws StorageHubException;
+
+ void setRead(String id, Boolean value) throws StorageHubException;
+
+ void setOpened(String id, Boolean value) throws StorageHubException;
+}
diff --git a/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java b/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java
deleted file mode 100644
index 3eab5b0..0000000
--- a/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.gcube.data.access.fs;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-public class AddUserToVRes {
-
-
- List DORNE_VRE = Arrays.asList("mister.brown",
- "jesus.santamariafernandez",
- "noah.matovu",
- "andrea.rossi",
- "francesco.mangiacrapa",
- "mister.pink",
- "kostas.kakaletris",
- "massimiliano.assante",
- "mister.white",
- "mister.blonde",
- "aureliano.gentile",
- "mister.blue",
- "mister.orange",
- "lucio.lelii");
-
- List PARTHENOS_VRE = Arrays.asList("francesco.mangiacrapa",
- "massimiliano.assante",
- "costantino.perciante",
- "luca.frosini",
- "pasquale.pagano",
- "alessia.bardi",
- "roberto.cirillo");
-
- List PRE_VRE = Arrays.asList("fabio.sinibaldi",
- "valentina.marioli",
- "statistical.manager",
- "roberto.cirillo",
- "francesco.mangiacrapa",
- "leonardo.candela",
- "costantino.perciante",
- "mariaantonietta.digirolamo",
- "gantzoulatos",
- "massimiliano.assante",
- "lucio.lelii",
- "panagiota.koltsida",
- "ngalante",
- "efthymios",
- "nikolas.laskaris",
- "andrea.dellamico",
- "gianpaolo.coro",
- "giancarlo.panichi",
- "kostas.kakaletris",
- "scarponi",
- "andrea.rossi",
- "pasquale.pagano",
- "mister.blue",
- "m.assante",
- "yannis.marketakis",
- "grsf.publisher",
- "kgiannakelos",
- "mister.pink",
- "luca.frosini",
- "dkatris",
- "paolo.fabriani",
- "mister.brown",
- "mister.white",
- "mister.orange",
- "gabriele.giammatteo");
-
- @Test
- public void add() throws Exception{
- String group = "pred4s-preprod-preVRE";
- URL addGroupUrl = new URL("http://storagehub.pre.d4science.net/storagehub/workspace/groups/"+group+"?gcube-token=");
-
- for (String user : PRE_VRE) {
- try {
- HttpURLConnection connection =(HttpURLConnection)addGroupUrl.openConnection();
- connection.setRequestMethod("PUT");
- StringBuilder postData = new StringBuilder();
- postData.append("userId");
- postData.append("=");
- postData.append(user);
- /*postData.append("&");
- postData.append("password");
- postData.append("=");
- postData.append("pwd"+user.hashCode());*/
- byte[] postDataBytes = postData.toString().getBytes("UTF-8");
- connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- connection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
- connection.setDoOutput(true);
- connection.getOutputStream().write(postDataBytes);
- Reader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
-
- for (int c; (c = in.read()) >= 0;)
- System.out.print((char)c);
- }catch (Exception e) {
- System.out.println("error for user "+user);
- e.printStackTrace();
- }
- }
- }
-}
diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java
index 8d0b76e..a7e35dd 100644
--- a/src/test/java/org/gcube/data/access/fs/Items.java
+++ b/src/test/java/org/gcube/data/access/fs/Items.java
@@ -7,10 +7,11 @@ import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Arrays;
+import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
-import java.util.Set;
+import java.util.Properties;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.scope.api.ScopeProvider;
@@ -24,6 +25,7 @@ import org.gcube.common.storagehub.client.proxies.UserManagerClient;
import org.gcube.common.storagehub.model.Metadata;
import org.gcube.common.storagehub.model.acls.AccessType;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
+import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -32,61 +34,127 @@ import org.junit.Test;
public class Items {
+ private static final String propFile = "C:\\Users\\tilli\\Documents\\eclipse\\tokens.properties";
+
+ private static final String tokens = "dev-root";
+ //private static final String tokens = "prod-root";
+
@BeforeClass
public static void setUp(){
- SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548");
- ScopeProvider.instance.set("/gcube");
+
+ try(InputStream is = new FileInputStream(new File(propFile))){
+ Properties prop = new Properties();
+ prop.load(is);
+ String value =(String)prop.get(tokens);
+ String[] splitValue = value.split(",");
+ String context = splitValue[0];
+ String token = splitValue[1];
+ SecurityTokenProvider.instance.set(token);
+ ScopeProvider.instance.set(context);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
}
-
-
+
@Test
- public void search() throws Exception{
+ public void addUserToVRe() throws StorageHubException {
StorageHubClient shc = new StorageHubClient();
- /*List extends Item> s = shc.getWSRoot().search("WD%",false).getItems();
- s.forEach(i -> System.out.println(i.getName()+" "+i.getId()));*/
- Item item = shc.restoreThrashItem("b7ad6691-ae43-4b61-9538-0961b0b98c5d").get();
- System.out.println("item id "+item.getId()+" path "+item.getPath()+" parent "+item.getParentId());
+
+ String vresFile = "C:\\Users\\tilli\\Downloads\\vresToAddGCat.txt";
+
+ try(InputStream is = new FileInputStream(new File(vresFile))){
+ Properties prop = new Properties();
+ prop.load(is);
+ Enumeration