This commit is contained in:
Lucio Lelii 2018-09-20 12:52:23 +00:00
parent b27b10d794
commit 045c149b70
10 changed files with 434 additions and 288 deletions

View File

@ -29,11 +29,11 @@
<dependencies>
<!-- <dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>gxRest</artifactId>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
</dependency> -->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>

View File

@ -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);

View File

@ -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<S,P> implements Plugin<S,P> {
public static ProxyBuilder<ItemManagerClient> item() {
return new ProxyBuilderImpl<WebTarget,ItemManagerClient>(item_plugin);
return new ProxyBuilderImpl<GXWebTargetAdapterRequest,ItemManagerClient>(item_plugin);
}
public static ProxyBuilder<WorkspaceManagerClient> workspace() {
return new ProxyBuilderImpl<WebTarget,WorkspaceManagerClient>(workspace_plugin);
return new ProxyBuilderImpl<GXWebTargetAdapterRequest,WorkspaceManagerClient>(workspace_plugin);
}
public final String name;

View File

@ -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<WebTarget, ItemManagerClient> {
public class ItemManagerPlugin extends AbstractPlugin<GXWebTargetAdapterRequest, ItemManagerClient> {
public ItemManagerPlugin() {
super("storagehub/workspace");
@ -25,18 +25,19 @@ public class ItemManagerPlugin extends AbstractPlugin<WebTarget, ItemManagerClie
}
@Override
public ItemManagerClient newProxy(ProxyDelegate<WebTarget> delegate) {
public ItemManagerClient newProxy(ProxyDelegate<GXWebTargetAdapterRequest> 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);

View File

@ -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<WebTarget, WorkspaceManagerClient> {
public class WorkspaceManagerPlugin extends AbstractPlugin<GXWebTargetAdapterRequest, WorkspaceManagerClient> {
public WorkspaceManagerPlugin() {
super("storagehub/workspace");
@ -25,12 +26,12 @@ public class WorkspaceManagerPlugin extends AbstractPlugin<WebTarget, WorkspaceM
}
@Override
public WorkspaceManagerClient newProxy(ProxyDelegate<WebTarget> delegate) {
public WorkspaceManagerClient newProxy(ProxyDelegate<GXWebTargetAdapterRequest> 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<WebTarget, WorkspaceM
Node child=node.getFirstChild();
String address = child.getTextContent();
GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).useRootPath();
return TargetFactory.stubFor(service).at(address);
return TargetFactory.stubFor(service).at(address);
}
}

View File

@ -2,12 +2,13 @@ package org.gcube.common.storagehub.client.proxies;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
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 javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
@ -15,42 +16,46 @@ import javax.ws.rs.core.Response;
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.client.StreamDescriptor;
import org.gcube.common.storagehub.model.acls.ACL;
import org.gcube.common.storagehub.model.acls.AccessType;
import org.gcube.common.storagehub.model.items.AbstractFileItem;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.service.ItemList;
import org.gcube.common.storagehub.model.service.ItemWrapper;
import org.gcube.common.storagehub.model.types.ACLList;
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
import org.glassfish.jersey.media.multipart.MultiPart;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;
import org.glassfish.jersey.media.multipart.file.StreamDataBodyPart;
public class DefaultItemManager implements ItemManagerClient {
private final ProxyDelegate<WebTarget> delegate;
private final ProxyDelegate<GXWebTargetAdapterRequest> delegate;
public DefaultItemManager(ProxyDelegate<WebTarget> config){
public DefaultItemManager(ProxyDelegate<GXWebTargetAdapterRequest> config){
this.delegate = config;
}
@Override
public List<? extends Item> getChildren(String id, String ... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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<WebTarget, StreamDescriptor> call = new Call<WebTarget, StreamDescriptor>() {
Call<GXWebTargetAdapterRequest, StreamDescriptor> call = new Call<GXWebTargetAdapterRequest, StreamDescriptor>() {
@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<String, Object[]> 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<WebTarget, ItemWrapper<Item>> call = new Call<WebTarget, ItemWrapper<Item>>() {
Call<GXWebTargetAdapterRequest, ItemWrapper<Item>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<Item>>() {
@Override
public ItemWrapper<Item> call(WebTarget manager) throws Exception {
WebTarget myManager = manager.path(id);
public ItemWrapper<Item> call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path(id);
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
myManager = myManager.queryParam("exclude",excludeNodes);
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
ItemWrapper<Item> 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> 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<WebTarget, ItemWrapper<Item>> call = new Call<WebTarget, ItemWrapper<Item>>() {
Call<GXWebTargetAdapterRequest, ItemWrapper<Item>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<Item>>() {
@Override
public ItemWrapper<Item> call(WebTarget manager) throws Exception {
WebTarget myManager = manager.path(id).path("rootSharedFolder");
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
ItemWrapper<Item> response = builder.get(ItemWrapper.class);
return response;
public ItemWrapper<Item> 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> 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<WebTarget, URL> call = new Call<WebTarget, URL>() {
Call<GXWebTargetAdapterRequest, URL> call = new Call<GXWebTargetAdapterRequest, URL>() {
@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<? extends Item> getChildren(String id, int start, int limit, String... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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<? extends Item> findChildrenByNamePattern(String id, String name, String... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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<WebTarget, Integer> call = new Call<WebTarget, Integer>() {
Call<GXWebTargetAdapterRequest, Integer> call = new Call<GXWebTargetAdapterRequest, Integer>() {
@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<WebTarget, String> call = new Call<WebTarget, String>() {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<WebTarget, String> call = new Call<WebTarget, String>() {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<WebTarget, String> call = new Call<WebTarget, String>() {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<String, String> formData = new MultivaluedHashMap<String, String>();
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<String> users, AccessType accessType) {
Call<WebTarget, String> call = new Call<WebTarget, String>() {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<String> users) {
Call<WebTarget, String> call = new Call<WebTarget, String>() {
Call<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<WebTarget, Void> call = new Call<WebTarget, Void>() {
Call<GXWebTargetAdapterRequest, Void> call = new Call<GXWebTargetAdapterRequest, Void>() {
@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<? extends Item> getAnchestors(String id, String... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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<ACL> getACL(String id) {
Call<WebTarget, ACLList> call = new Call<WebTarget, ACLList>() {
Call<GXWebTargetAdapterRequest, ACLList> call = new Call<GXWebTargetAdapterRequest, ACLList>() {
@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 {

View File

@ -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<WebTarget> delegate;
private final ProxyDelegate<GXWebTargetAdapterRequest> delegate;
public DefaultWorkspaceManager(ProxyDelegate<WebTarget> config){
public DefaultWorkspaceManager(ProxyDelegate<GXWebTargetAdapterRequest> config){
this.delegate = config;
}
@Override
public <T extends Item> T getWorkspace(String ... excludeNodes) {
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
Call<GXWebTargetAdapterRequest, ItemWrapper<T>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<T>>() {
@Override
public ItemWrapper<T> call(WebTarget manager) throws Exception {
WebTarget myManager = manager;
public ItemWrapper<T> call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager;
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
myManager = myManager.queryParam("exclude",excludeNodes);
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
ItemWrapper<T> 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 extends Item> T retieveItemByPath(String relativePath, String... excludeNodes) {
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
Call<GXWebTargetAdapterRequest, ItemWrapper<T>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<T>>() {
@Override
public ItemWrapper<T> call(WebTarget manager) throws Exception {
WebTarget myManager = manager;
public ItemWrapper<T> 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<T> response = builder.get(ItemWrapper.class);
@ -70,19 +82,24 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient {
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}*/
@Override
public List<? extends Item> getVreFolders(String ... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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<? extends Item> getVreFolders(int start, int limit, String ... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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<String, Object[]> 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 extends Item> T getVreFolder(String ... excludeNodes) {
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
Call<GXWebTargetAdapterRequest, ItemWrapper<T>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<T>>() {
@Override
public ItemWrapper<T> call(WebTarget manager) throws Exception {
WebTarget myManager = manager.path("vrefolder");
public ItemWrapper<T> call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path("vrefolder");
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
myManager = myManager.queryParam("exclude",excludeNodes);
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
ItemWrapper<T> 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<? extends Item> getRecentModifiedFilePerVre() {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@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 extends Item> T getTrashFolder(String ... excludeNodes) {
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
@Override
public ItemWrapper<T> 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<T> response = builder.get(ItemWrapper.class);
return response;
}
};
try {
ItemWrapper<T> result = delegate.make(call);
return result.getItem();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void emptyTrash(String id) {
Call<WebTarget, Void> call = new Call<WebTarget, Void>() {
@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<WebTarget, String> call = new Call<WebTarget, String>() {
@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<? extends Item> search(Query<SearchableItem<?>> query, String ... excludeNodes) {
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
@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 extends Item> T getTrashFolder(String ... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemWrapper<T>> call = new Call<GXWebTargetAdapterRequest, ItemWrapper<T>>() {
@Override
public ItemWrapper<T> call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path("trash");
Map<String, Object[]> 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<T> result = delegate.make(call);
return result.getItem();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void emptyTrash(String id) {
Call<GXWebTargetAdapterRequest, Void> call = new Call<GXWebTargetAdapterRequest, Void>() {
@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<GXWebTargetAdapterRequest, String> call = new Call<GXWebTargetAdapterRequest, String>() {
@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<? extends Item> search(Query<SearchableItem<?>> query, String ... excludeNodes) {
Call<GXWebTargetAdapterRequest, ItemList> call = new Call<GXWebTargetAdapterRequest, ItemList>() {
@Override
public ItemList call(GXWebTargetAdapterRequest manager) throws Exception {
GXWebTargetAdapterRequest myManager = manager.path("query");
Map<String, Object[]> params = new HashMap<>();
if (excludeNodes !=null && excludeNodes.length>0)
params.put("exclude",excludeNodes);
if (query.getOrderFields() !=null && query.getOrderFields().size() >0) {
List<String> 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);
}
}
}

View File

@ -10,7 +10,7 @@ public interface WorkspaceManagerClient {
<T extends Item> T getWorkspace(String ... excludeNodes);
<T extends Item> T retieveItemByPath(String relativePath, String ... excludeNodes);
//<T extends Item> T retieveItemByPath(String relativePath, String ... excludeNodes);
List<? extends Item> getVreFolders(String ... excludeNodes);

View File

@ -46,6 +46,9 @@ public class Items {
ScopeProvider.instance.set("/gcube");
}
@Test
public void uploadFile() throws Exception {
StorageHubClient shc = new StorageHubClient();

View File

@ -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();