From 045c149b70efb08d8eb6c2b7cf8702151dd161e8 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Thu, 20 Sep 2018 12:52:23 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/Common/storagehub-client@171537 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 4 +- .../client/dsl/StorageHubClient.java | 4 +- .../client/plugins/AbstractPlugin.java | 5 +- .../client/plugins/ItemManagerPlugin.java | 9 +- .../plugins/WorkspaceManagerPlugin.java | 10 +- .../client/proxies/DefaultItemManager.java | 324 ++++++++++------ .../proxies/DefaultWorkspaceManager.java | 350 ++++++++++-------- .../proxies/WorkspaceManagerClient.java | 2 +- .../java/org/gcube/data/access/fs/Items.java | 3 + .../org/gcube/data/access/fs/TestCall.java | 11 +- 10 files changed, 434 insertions(+), 288 deletions(-) diff --git a/pom.xml b/pom.xml index 61366df..f58425d 100644 --- a/pom.xml +++ b/pom.xml @@ -29,11 +29,11 @@ - + junit junit diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java index 19b1ec8..f273482 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java @@ -15,10 +15,10 @@ public class StorageHubClient { return new FolderContainer(itemclient, wsClient.getWorkspace()); } - public OpenResolver open(Path relativePath) { +/* public OpenResolver open(Path relativePath) { Item item = wsClient.retieveItemByPath(relativePath.toPath()); return new OpenResolver(item, itemclient); - } + }*/ public OpenResolver open(String id) { Item item = itemclient.get(id); 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 930217a..93c757a 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 @@ -5,6 +5,7 @@ import javax.ws.rs.client.WebTarget; import org.gcube.common.clients.Plugin; import org.gcube.common.clients.ProxyBuilder; import org.gcube.common.clients.ProxyBuilderImpl; +import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; import org.gcube.common.storagehub.client.Constants; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; @@ -20,11 +21,11 @@ public abstract class AbstractPlugin implements Plugin { public static ProxyBuilder item() { - return new ProxyBuilderImpl(item_plugin); + return new ProxyBuilderImpl(item_plugin); } public static ProxyBuilder workspace() { - return new ProxyBuilderImpl(workspace_plugin); + return new ProxyBuilderImpl(workspace_plugin); } public final String name; diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/ItemManagerPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/ItemManagerPlugin.java index 206fec6..6b89767 100644 --- a/src/main/java/org/gcube/common/storagehub/client/plugins/ItemManagerPlugin.java +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/ItemManagerPlugin.java @@ -1,6 +1,5 @@ package org.gcube.common.storagehub.client.plugins; -import javax.ws.rs.client.WebTarget; import javax.xml.transform.dom.DOMResult; import javax.xml.ws.EndpointReference; @@ -8,12 +7,13 @@ 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.storagehub.client.Constants; import org.gcube.common.storagehub.client.proxies.DefaultItemManager; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.w3c.dom.Node; -public class ItemManagerPlugin extends AbstractPlugin { +public class ItemManagerPlugin extends AbstractPlugin { public ItemManagerPlugin() { super("storagehub/workspace"); @@ -25,18 +25,19 @@ public class ItemManagerPlugin extends AbstractPlugin delegate) { + public ItemManagerClient newProxy(ProxyDelegate delegate) { return new DefaultItemManager(delegate); } @Override - public WebTarget resolve(EndpointReference epr, ProxyConfig config) + 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("items"); return TargetFactory.stubFor(service).at(address); diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/WorkspaceManagerPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/WorkspaceManagerPlugin.java index c4fcc72..085cbca 100644 --- a/src/main/java/org/gcube/common/storagehub/client/plugins/WorkspaceManagerPlugin.java +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/WorkspaceManagerPlugin.java @@ -8,12 +8,13 @@ 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.storagehub.client.Constants; import org.gcube.common.storagehub.client.proxies.DefaultWorkspaceManager; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.w3c.dom.Node; -public class WorkspaceManagerPlugin extends AbstractPlugin { +public class WorkspaceManagerPlugin extends AbstractPlugin { public WorkspaceManagerPlugin() { super("storagehub/workspace"); @@ -25,12 +26,12 @@ public class WorkspaceManagerPlugin extends AbstractPlugin delegate) { + public WorkspaceManagerClient newProxy(ProxyDelegate delegate) { return new DefaultWorkspaceManager(delegate); } @Override - public WebTarget resolve(EndpointReference epr, ProxyConfig config) + public GXWebTargetAdapterRequest resolve(EndpointReference epr, ProxyConfig config) throws Exception { DOMResult result = new DOMResult(); epr.writeTo(result); @@ -38,7 +39,6 @@ public class WorkspaceManagerPlugin extends AbstractPlugin delegate; + private final ProxyDelegate delegate; - public DefaultItemManager(ProxyDelegate config){ + public DefaultItemManager(ProxyDelegate config){ this.delegate = config; } @Override public List getChildren(String id, String ... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("children"); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("children"); + Map params = new HashMap<>(); if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + ItemList items = response.getSource().readEntity(ItemList.class); + + return items; } }; try { @@ -64,14 +69,22 @@ public class DefaultItemManager implements ItemManagerClient { @Override public StreamDescriptor download(String id, String... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public StreamDescriptor call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("download"); + public StreamDescriptor call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("download"); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_OCTET_STREAM); - Response resp = builder.get(); + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_OCTET_STREAM_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + Response resp = response.getSource(); + InputStream stream = resp.readEntity(InputStream.class); String disposition = resp.getHeaderString("Content-Disposition"); String fileName = disposition.replaceFirst("attachment; filename = ([^/s]+)?", "$1"); @@ -89,15 +102,24 @@ public class DefaultItemManager implements ItemManagerClient { @Override public Item get(String id, String... excludeNodes) { - Call> call = new Call>() { + Call> call = new Call>() { @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id); + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemWrapper response = builder.get(ItemWrapper.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + ItemWrapper item = response.getSource().readEntity(ItemWrapper.class); + + + return item; } }; try { @@ -110,13 +132,19 @@ public class DefaultItemManager implements ItemManagerClient { @Override public Item getRootSharedFolder(String id) { - Call> call = new Call>() { + Call> call = new Call>() { @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("rootSharedFolder"); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemWrapper response = builder.get(ItemWrapper.class); - return response; + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("rootSharedFolder"); + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + + ItemWrapper item = response.getSource().readEntity(ItemWrapper.class); + + + return item; } }; try { @@ -130,13 +158,18 @@ public class DefaultItemManager implements ItemManagerClient { @Override public URL getPublickLink(String id) { - Call call = new Call() { + Call call = new Call() { @Override - public URL call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("publiclink"); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - URL response = builder.get(URL.class); - return response; + public URL call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("publiclink"); + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + + URL item = response.getSource().readEntity(URL.class); + + return item; } }; try { @@ -149,16 +182,28 @@ public class DefaultItemManager implements ItemManagerClient { @Override public List getChildren(String id, int start, int limit, String... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("children").path("paged"); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("paged"); + Map params = new HashMap<>(); + + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - myManager = myManager.queryParam("start", start).queryParam("limit", limit); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + params.put("start", new Object[] {start}); + params.put("limit", new Object[] {limit}); + + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + ItemList items = response.getSource().readEntity(ItemList.class); + + return items; } }; try { @@ -171,15 +216,23 @@ public class DefaultItemManager implements ItemManagerClient { @Override public List findChildrenByNamePattern(String id, String name, String... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("items").path(name); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("items").path(name); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.queryParams(params).setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + + ItemList items = response.getSource().readEntity(ItemList.class); + + return items; } }; try { @@ -193,13 +246,17 @@ public class DefaultItemManager implements ItemManagerClient { @Override public Integer childrenCount(String id) { - Call call = new Call() { + Call call = new Call() { @Override - public Integer call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("children").path("count"); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - Integer response = builder.get(Integer.class); - return response; + public Integer call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("children").path("count"); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(Integer.class); } }; try { @@ -213,21 +270,24 @@ public class DefaultItemManager implements ItemManagerClient { @Override public String uploadFile(InputStream stream, String parentId, String fileName, String description) { - Call call = new Call() { + Call call = new Call() { @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.register(MultiPartFeature.class).path(parentId) + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(parentId) .path("create").path("FILE"); - Invocation.Builder builder = myManager.request(); - + FormDataMultiPart multipart = new FormDataMultiPart(); multipart.field("name", fileName); multipart.field("description", description); multipart.field("file", stream, MediaType.APPLICATION_OCTET_STREAM_TYPE); - String response = builder.post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE),String.class); - return response; - + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE)); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); } }; try { @@ -239,19 +299,22 @@ public class DefaultItemManager implements ItemManagerClient { @Override public String uploadArchive(InputStream stream, String parentId, String extractionFolderName) { - Call call = new Call() { + Call call = new Call() { @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.register(MultiPartFeature.class).path(parentId) + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(parentId) .path("create").path("ARCHIVE"); - Invocation.Builder builder = myManager.request(); - + FormDataMultiPart multipart = new FormDataMultiPart(); - multipart.field("parentFolderName", extractionFolderName); multipart.field("file", stream, MediaType.APPLICATION_OCTET_STREAM_TYPE); - String response = builder.post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE),String.class); - return response; + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE)); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); } }; @@ -262,20 +325,27 @@ public class DefaultItemManager implements ItemManagerClient { } } + + @Override public String createFolder(String parentId, String name, String description) { - Call call = new Call() { + Call call = new Call() { @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(parentId) - .path("create").path("FOLDER").queryParam("name", name).queryParam("description", description); - Invocation.Builder builder = myManager.request(); - + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(parentId) + .path("create").path("FOLDER"); + MultivaluedMap formData = new MultivaluedHashMap(); formData.add("name", name); formData.add("description", description); - String response = builder.post(Entity.form(formData),String.class); - return response; + + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).post(Entity.form(formData)); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); } }; try { @@ -287,18 +357,24 @@ public class DefaultItemManager implements ItemManagerClient { @Override public String shareFolder(String id, Set users, AccessType accessType) { - Call call = new Call() { + Call call = new Call() { @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.register(MultiPartFeature.class).path(id) + public String call(GXWebTargetAdapterRequest manager) throws Exception { + System.out.println("id is: "+id); + + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(id) .path("share"); - Invocation.Builder builder = myManager.request(); - + try (FormDataMultiPart multipart = new FormDataMultiPart()){ multipart.field("defaultAccessType", accessType, MediaType.APPLICATION_JSON_TYPE); multipart.field("users", users, MediaType.APPLICATION_JSON_TYPE); - String response = builder.put(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE),String.class); - return response; + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).put(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE)); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); } } }; @@ -311,17 +387,20 @@ public class DefaultItemManager implements ItemManagerClient { @Override public String unshareFolder(String id, Set users) { - Call call = new Call() { + Call call = new Call() { @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.register(MultiPartFeature.class).path(id) + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.register(MultiPartFeature.class).path(id) .path("unshare"); - Invocation.Builder builder = myManager.request(); - + try (FormDataMultiPart multipart = new FormDataMultiPart()){ multipart.field("users", users, MediaType.APPLICATION_JSON_TYPE); - String response = builder.put(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE),String.class); - return response; + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).put(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE)); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); } } }; @@ -334,12 +413,14 @@ public class DefaultItemManager implements ItemManagerClient { @Override public void delete(String id) { - Call call = new Call() { + Call call = new Call() { @Override - public Void call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id); - Invocation.Builder builder = myManager.request(); - builder.delete(String.class); + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id); + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).delete(); + + if (response.hasGXError()) + throw response.getException(); return null; } }; @@ -352,15 +433,21 @@ public class DefaultItemManager implements ItemManagerClient { @Override public List getAnchestors(String id, String... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("anchestors"); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("anchestors"); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(ItemList.class); } }; try { @@ -373,13 +460,16 @@ public class DefaultItemManager implements ItemManagerClient { @Override public List getACL(String id) { - Call call = new Call() { + Call call = new Call() { @Override - public ACLList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path(id).path("acls"); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ACLList response = builder.get(ACLList.class); - return response; + public ACLList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(id).path("acls"); + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(ACLList.class); } }; try { diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java index fe062a6..aab1b77 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java @@ -1,15 +1,19 @@ package org.gcube.common.storagehub.client.proxies; import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; -import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; 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.expressions.OrderField; import org.gcube.common.storagehub.model.expressions.SearchableItem; import org.gcube.common.storagehub.model.items.Item; @@ -21,24 +25,31 @@ import com.fasterxml.jackson.databind.ObjectMapper; public class DefaultWorkspaceManager implements WorkspaceManagerClient { - private final ProxyDelegate delegate; + private final ProxyDelegate delegate; - - public DefaultWorkspaceManager(ProxyDelegate config){ + + public DefaultWorkspaceManager(ProxyDelegate config){ this.delegate = config; } @Override public T getWorkspace(String ... excludeNodes) { - Call> call = new Call>() { + Call> call = new Call>() { @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager; + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemWrapper response = builder.get(ItemWrapper.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(ItemWrapper.class); } }; try { @@ -48,16 +59,17 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { throw new RuntimeException(e); } } - + + /* @Override public T retieveItemByPath(String relativePath, String... excludeNodes) { - Call> call = new Call>() { + Call> call = new Call>() { @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager; + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; if (excludeNodes !=null && excludeNodes.length>0) myManager = myManager.queryParam("exclude",excludeNodes); - + myManager = manager.queryParam("relPath", relativePath); Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); ItemWrapper response = builder.get(ItemWrapper.class); @@ -70,19 +82,24 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { }catch(Exception e) { throw new RuntimeException(e); } - } - + }*/ + @Override public List getVreFolders(String ... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("vrefolders"); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("vrefolders"); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemList.class); } }; try { @@ -92,21 +109,27 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { throw new RuntimeException(e); } } - + @Override public List getVreFolders(int start, int limit, String ... excludeNodes) { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("vrefolders"); + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("vrefolders").path("paged"); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - - myManager = myManager.queryParam("start", start).queryParam("limit", limit); - - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + params.put("exclude",excludeNodes); + + params.put("start", new Object[] {start}); + params.put("limit", new Object[] {limit}); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemList.class); + } }; try { @@ -119,16 +142,19 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { @Override public T getVreFolder(String ... excludeNodes) { - Call> call = new Call>() { + Call> call = new Call>() { @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("vrefolder"); + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("vrefolder"); + Map params = new HashMap<>(); + if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemWrapper response = builder.get(ItemWrapper.class); - return response; + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemWrapper.class); } }; try { @@ -138,116 +164,19 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { throw new RuntimeException(e); } } - + @Override public List getRecentModifiedFilePerVre() { - Call call = new Call() { + Call call = new Call() { @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("vrefolder").path("recents"); - - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; - } - }; - try { - ItemList result = delegate.make(call); - return result.getItemlist(); - }catch(Exception e) { - throw new RuntimeException(e); - } - } - - @Override - public T getTrashFolder(String ... excludeNodes) { - Call> call = new Call>() { - @Override - public ItemWrapper call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("trash"); - if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemWrapper response = builder.get(ItemWrapper.class); - return response; - } - }; - try { - ItemWrapper result = delegate.make(call); - return result.getItem(); - }catch(Exception e) { - throw new RuntimeException(e); - } - } - - @Override - public void emptyTrash(String id) { - Call call = new Call() { - @Override - public Void call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("trash").path("empty"); - Invocation.Builder builder = myManager.request(); - builder.delete(); - return null; - } - }; - try { - delegate.make(call); - }catch(Exception e) { - throw new RuntimeException(e); - } - } - - @Override - public String restoreFromTrash(final String id) { - Call call = new Call() { - @Override - public String call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("trash").path("restore"); - Invocation.Builder builder = myManager.request(); - return builder.put(Entity.text(id)).readEntity(String.class); - } - }; - try { - return delegate.make(call); - }catch(Exception e) { - throw new RuntimeException(e); - } - } - - @Override - public List search(Query> query, String ... excludeNodes) { - Call call = new Call() { - @Override - public ItemList call(WebTarget manager) throws Exception { - WebTarget myManager = manager.path("query"); - if (excludeNodes !=null && excludeNodes.length>0) - myManager = myManager.queryParam("exclude",excludeNodes); - - if (query.getOrderFields() !=null && query.getOrderFields().size() >0) { - for (OrderField field :query.getOrderFields()) - myManager = myManager.queryParam("o","["+field.getField().getName()+"] "+field.getMode().toString()); - } - - myManager = myManager.queryParam("n", query.getSearchableItem().getNodeValue()); - - if (query.getLimit()!=-1) - myManager = myManager.queryParam("l", query.getLimit()); - - if (query.getOffset()!=-1) - myManager = myManager.queryParam("f", query.getOffset()); - - - - ObjectMapper mapper = new ObjectMapper(); - String serializedJson = mapper.writeValueAsString(query.getExpression()); - - myManager = myManager.queryParam("e", URLEncoder.encode(serializedJson)); - - Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); - ItemList response = builder.get(ItemList.class); - return response; + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("vrefolder").path("recents"); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).get(); + + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemList.class); } }; try { @@ -258,6 +187,121 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { } } - - + + @Override + public T getTrashFolder(String ... excludeNodes) { + Call> call = new Call>() { + @Override + public ItemWrapper call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("trash"); + Map params = new HashMap<>(); + + if (excludeNodes !=null && excludeNodes.length>0) + params.put("exclude",excludeNodes); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemWrapper.class); + } + }; + try { + ItemWrapper result = delegate.make(call); + return result.getItem(); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void emptyTrash(String id) { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("trash").path("empty"); + + GXInboundResponse response = myManager.delete(); + if (response.hasGXError()) + throw response.getException(); + + return null; + } + }; + try { + delegate.make(call); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public String restoreFromTrash(final String id) { + Call call = new Call() { + @Override + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("trash").path("restore"); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.TEXT_PLAIN_TYPE).put(Entity.text(id)); + if (response.hasGXError()) + throw response.getException(); + + return response.getSource().readEntity(String.class); + } + }; + try { + return delegate.make(call); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public List search(Query> query, String ... excludeNodes) { + Call call = new Call() { + @Override + public ItemList call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path("query"); + Map params = new HashMap<>(); + + if (excludeNodes !=null && excludeNodes.length>0) + params.put("exclude",excludeNodes); + + if (query.getOrderFields() !=null && query.getOrderFields().size() >0) { + List orders = new ArrayList<>(); + for (OrderField field :query.getOrderFields()) + orders.add(String.format("[%s]%s",field.getField().getName(),field.getMode().toString())); + params.put("o", orders.toArray(new Object[orders.size()])); + } + + params.put("n", new Object[] {query.getSearchableItem().getNodeValue()}); + + if (query.getLimit()!=-1) + params.put("l", new Object[] { query.getLimit()}); + + if (query.getOffset()!=-1) + params.put("f", new Object[] { query.getOffset()}); + + + + ObjectMapper mapper = new ObjectMapper(); + String serializedJson = mapper.writeValueAsString(query.getExpression()); + + params.put("e", new Object[] { URLEncoder.encode(serializedJson)}); + + GXInboundResponse response = myManager.setAcceptedResponseType(MediaType.APPLICATION_JSON_TYPE).queryParams(params).get(); + if (response.hasGXError()) + throw response.getException(); + return response.getSource().readEntity(ItemList.class); + } + }; + try { + ItemList result = delegate.make(call); + return result.getItemlist(); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java index 547f9c3..c3be4f4 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java @@ -10,7 +10,7 @@ public interface WorkspaceManagerClient { T getWorkspace(String ... excludeNodes); - T retieveItemByPath(String relativePath, String ... excludeNodes); + // T retieveItemByPath(String relativePath, String ... excludeNodes); List getVreFolders(String ... excludeNodes); 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 0631631..659cac9 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -46,6 +46,9 @@ public class Items { ScopeProvider.instance.set("/gcube"); } + + + @Test public void uploadFile() throws Exception { StorageHubClient shc = new StorageHubClient(); diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index 6dfbf04..467c4e6 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -48,9 +48,9 @@ public class TestCall { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("0e2c7963-8d3e-4ea6-a56d-ffda530dd0fa-98187548"); + //SecurityTokenProvider.instance.set("0e2c7963-8d3e-4ea6-a56d-ffda530dd0fa-98187548"); //token costantino 9ca79556-54b0-4bbf-ab0f-151ae326f4cf-98187548 - //SecurityTokenProvider.instance.set("9ca79556-54b0-4bbf-ab0f-151ae326f4cf-98187548"); + SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); ScopeProvider.instance.set("/gcube"); } @@ -91,6 +91,13 @@ public class TestCall { itemclient.shareFolder("86e8472a-6f66-4608-9d70-20102c9172ce", new HashSet<>(Arrays.asList("costantino.perciante")), AccessType.READ_ONLY); } + @Test + public void restore() { + + WorkspaceManagerClient client = AbstractPlugin.workspace().build(); + client.restoreFromTrash("82af9e1c-6cc7-4e16-bba5-9bec6545015a"); + } + @Test public void unshareFolder() throws Exception{ ItemManagerClient itemclient = AbstractPlugin.item().build();