diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..ace8266 --- /dev/null +++ b/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..11d6da0 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + storagehub-client + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..672496e --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..53ed5a2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,96 @@ + + 4.0.0 + + + maven-parent + org.gcube.tools + 1.0.0 + + + + org.gcube.common + storagehub-client-library + 1.0.0-SNAPSHOT + toragehub-client-library + + + + + org.gcube.distribution + gcube-bom + LATEST + pom + import + + + + + + + junit + junit + 4.10 + test + + + org.gcube.common + storagehub-model + 1.0.0-SNAPSHOT + + + org.glassfish.jersey.core + jersey-client + 2.24.1 + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + 2.3.0 + + + org.glassfish.jersey.media + jersey-media-json-jackson + 2.24.1 + + + org.glassfish.jersey.media + jersey-media-multipart + 2.24.1 + + + javax.ws.rs + javax.ws.rs-api + 2.0 + + + + org.gcube.core + common-gcube-calls + + + org.gcube.common + common-jaxrs-client + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + org.gcube.core + common-generic-clients + + + + + + + + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/common/storagehub/client/Constants.java b/src/main/java/org/gcube/common/storagehub/client/Constants.java new file mode 100644 index 0000000..dfe3dd2 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/Constants.java @@ -0,0 +1,36 @@ +package org.gcube.common.storagehub.client; + +import java.util.concurrent.TimeUnit; + +import javax.xml.namespace.QName; + +public class Constants { + + /** Service name. */ + public static final String SERVICE_NAME = "StorageHub"; + + /** Service class. */ + public static final String SERVICE_CLASS = "DataAccess"; + + public static final int DEFAULT_TIMEOUT= (int) TimeUnit.SECONDS.toMillis(10); + + public static final String NAMESPACE = "http://gcube-system.org/namespaces/common/storagehub"; + + public static final QName MANAGER_QNAME = new QName(NAMESPACE, "itemmanager"); + + +/* + public static final GcubeService manager = service().withName(org.gcube.data.spd.model.service.Constants.manager_name).andInterface(ManagerStubs.class); + + public static final GcubeService classification = service().withName(org.gcube.data.spd.model.service.Constants.classification_name).andInterface(ClassificationStubs.class); + + public static final GcubeService executor = service().withName(org.gcube.data.spd.model.service.Constants.executor_name).andInterface(ExecutorStubs.class); + + public static final GcubeService occurrence = service().withName(org.gcube.data.spd.model.service.Constants.occurrence_name).andInterface(OccurrenceStubs.class); + + private static final GcubeService remoteDispatcher = service().withName(org.gcube.data.spd.model.service.Constants.remoteDispatcher_name).andInterface(RemoteDispatcher.class); + + public static final RemoteDispatcher getRemoteDispatcherService(String address){ + return stubFor(remoteDispatcher).at(address); + }*/ +} diff --git a/src/main/java/org/gcube/common/storagehub/client/StreamDescriptor.java b/src/main/java/org/gcube/common/storagehub/client/StreamDescriptor.java new file mode 100644 index 0000000..46ffbd8 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/StreamDescriptor.java @@ -0,0 +1,24 @@ +package org.gcube.common.storagehub.client; + +import java.io.InputStream; + +public class StreamDescriptor { + + private InputStream stream; + private String fileName; + + public StreamDescriptor(InputStream stream, String fileName) { + super(); + this.stream = stream; + this.fileName = fileName; + } + + public InputStream getStream() { + return stream; + } + + public String getFileName() { + return fileName; + } + +} 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 new file mode 100644 index 0000000..930217a --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java @@ -0,0 +1,56 @@ +package org.gcube.common.storagehub.client.plugins; + +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.storagehub.client.Constants; +import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; + + + +public abstract class AbstractPlugin implements Plugin { + + + + private static final ItemManagerPlugin item_plugin = new ItemManagerPlugin(); + private static final WorkspaceManagerPlugin workspace_plugin = new WorkspaceManagerPlugin(); + + + public static ProxyBuilder item() { + return new ProxyBuilderImpl(item_plugin); + } + + public static ProxyBuilder workspace() { + return new ProxyBuilderImpl(workspace_plugin); + } + + public final String name; + + public AbstractPlugin(String name) { + this.name=name; + } + + @Override + public String serviceClass() { + return Constants.SERVICE_CLASS; + } + + @Override + public String serviceName() { + return Constants.SERVICE_NAME; + } + + @Override + public String namespace() { + return Constants.NAMESPACE; + } + + @Override + public String name() { + return name; + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..83780f8 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/ItemManagerPlugin.java @@ -0,0 +1,45 @@ +package org.gcube.common.storagehub.client.plugins; + +import javax.ws.rs.client.WebTarget; +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.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 ItemManagerPlugin() { + super("storagehub/workspace"); + } + + @Override + public Exception convert(Exception e, ProxyConfig arg1) { + return e; + } + + @Override + public ItemManagerClient newProxy(ProxyDelegate delegate) { + return new DefaultItemManager(delegate); + } + + @Override + public WebTarget 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(); + GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).andPath("item"); + 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 new file mode 100644 index 0000000..c4fcc72 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/WorkspaceManagerPlugin.java @@ -0,0 +1,44 @@ +package org.gcube.common.storagehub.client.plugins; + +import javax.ws.rs.client.WebTarget; +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.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 WorkspaceManagerPlugin() { + super("storagehub/workspace"); + } + + @Override + public Exception convert(Exception e, ProxyConfig arg1) { + return e; + } + + @Override + public WorkspaceManagerClient newProxy(ProxyDelegate delegate) { + return new DefaultWorkspaceManager(delegate); + } + + @Override + public WebTarget 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(); + GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).useRootPath(); + return TargetFactory.stubFor(service).at(address); + + } +} 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 new file mode 100644 index 0000000..9d86aad --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java @@ -0,0 +1,71 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.io.InputStream; +import java.util.List; + +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.gcube.common.clients.Call; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.storagehub.client.StreamDescriptor; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.service.ItemList; + +public class DefaultItemManager implements ItemManagerClient { + + private final ProxyDelegate delegate; + + + public DefaultItemManager(ProxyDelegate config){ + this.delegate = config; + } + + + @Override + public List getChildren(String id, String ... excludeNodes) { + Call call = new Call() { + @Override + public ItemList call(WebTarget manager) throws Exception { + WebTarget myManager = manager.path(id).path("children"); + 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; + } + }; + try { + ItemList result = delegate.make(call); + return result.getItemlist(); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + + @Override + public StreamDescriptor download(String id) { + Call call = new Call() { + @Override + public StreamDescriptor call(WebTarget manager) throws Exception { + WebTarget myManager = manager.path(id).path("download"); + Invocation.Builder builder = myManager.request(MediaType.APPLICATION_OCTET_STREAM); + Response resp = builder.get(); + InputStream stream = resp.readEntity(InputStream.class); + String disposition = resp.getHeaderString("Content-Disposition"); + String fileName = disposition.replaceFirst("attachment; filename = ([^/s]+)?", "$1"); + return new StreamDescriptor(stream, fileName); + } + }; + try { + StreamDescriptor result = delegate.make(call); + return result; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + +} 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 new file mode 100644 index 0000000..b83a424 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java @@ -0,0 +1,46 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +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.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.service.ItemList; + +public class DefaultWorkspaceManager implements WorkspaceManagerClient { + + private final ProxyDelegate delegate; + + + public DefaultWorkspaceManager(ProxyDelegate config){ + this.delegate = config; + } + + + @Override + public List getWorkspace(String... excludeNodes) { + Call call = new Call() { + @Override + public ItemList call(WebTarget manager) throws Exception { + WebTarget myManager = manager; + 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); + System.out.println(myManager.getUri().toString()); + return response; + } + }; + 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/ItemManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java new file mode 100644 index 0000000..ab86457 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java @@ -0,0 +1,19 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.io.InputStream; +import java.util.List; + +import org.gcube.common.storagehub.client.StreamDescriptor; +import org.gcube.common.storagehub.model.items.Item; + + + +public interface ItemManagerClient { + + //List listByPath(String path, String ... excludeNodes); + + List getChildren(String id, String ... excludeNodes); + + StreamDescriptor download(String id); + +} 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 new file mode 100644 index 0000000..2811841 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java @@ -0,0 +1,11 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +import org.gcube.common.storagehub.model.items.Item; + +public interface WorkspaceManagerClient { + + List getWorkspace(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 new file mode 100644 index 0000000..6a313e3 --- /dev/null +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -0,0 +1,127 @@ +package org.gcube.data.access.fs; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.List; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +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.Response; + +import org.gcube.common.storagehub.model.Path; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.GenericFileItem; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.query.ItemFilter; +import org.gcube.common.storagehub.model.query.OrderBy; +import org.gcube.common.storagehub.model.service.ItemList; +import org.gcube.common.storagehub.model.service.ItemWrapper; +import org.glassfish.jersey.client.ClientConfig; +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 Items { + + /* + + static String baseUrl="http://workspace-repository1-d.d4science.org/storagehub"; + + + + public static List list(OrderBy order, Path path, ItemFilter ... filters){ + Client client = ClientBuilder.newClient(); + WebTarget webTarget = client.target(baseUrl+"/list/byPath?gcube-token=595ca591-9921-423c-bfca-f8be19f05882-98187548"); + Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); + List r = invocationBuilder.get(ItemList.class).getItemlist(); + return r; + + } + + public static void createFolder(){ + //Client client = ClientBuilder.newClient(); + Client client = ClientBuilder.newBuilder() + .register(MultiPartFeature.class).build(); + WebTarget webTarget = client.target(baseUrl+"/item/create?gcube-token=595ca591-9921-423c-bfca-f8be19f05882-98187548"); + + FolderItem folder= new FolderItem(); + folder.setName("My third folder"); + folder.setTitle("My third title"); + final MultiPart multiPart = new FormDataMultiPart() + .field("item", new ItemWrapper(folder), MediaType.APPLICATION_JSON_TYPE) + /* .field("characterProfile", jsonToSend, MediaType.APPLICATION_JSON_TYPE) + .field("filename", fileToUpload.getName(), MediaType.TEXT_PLAIN_TYPE) + .bodyPart(fileDataBodyPart)*/; +/* + Response res = webTarget.request().post(Entity.entity(multiPart, multiPart.getMediaType())); + System.out.println("status is "+res.getStatus()); + + } + + public static void create() throws Exception{ + + + ClientConfig clientConfig = new ClientConfig(); + clientConfig.property("DEFAULT_CHUNK_SIZE", 2048); + + Clie + + //Client client = ClientBuilder.newClient(); + Client client = ClientBuilder.newClient(clientConfig) + .register(MultiPartFeature.class); + + WebTarget webTarget = client.target(baseUrl+"/item/create?gcube-token=595ca591-9921-423c-bfca-f8be19f05882-98187548"); + + GenericFileItem folder= new GenericFileItem(); + folder.setName("testUpload.tar.gz"); + folder.setTitle("testUpload.tar.gz"); + + FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file", new File("/home/lucio/Downloads/testUpload.tar.gz")); + final MultiPart multiPart = new FormDataMultiPart().field("item", new ItemWrapper(folder), MediaType.APPLICATION_JSON_TYPE) + .bodyPart(fileDataBodyPart, MediaType.APPLICATION_OCTET_STREAM_TYPE); + multiPart.close(); + + Response res = webTarget.request().post(Entity.entity(multiPart, multiPart.getMediaType())); + System.out.println("status is "+res.getStatus()); + + } + + public static void get() throws Exception{ + Client client = ClientBuilder.newClient(); + WebTarget webTarget = client.target(baseUrl+"/item/6e9b8350-4854-4c22-8aa1-ba2d8135ad6d/download?gcube-token=950a0702-6ada-40e9-92dc-d243d1b45206-98187548"); + Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_OCTET_STREAM); + Response res = invocationBuilder.get(); + + + byte[] buf = new byte[1024]; + /*while (is.read(buf)!=-1) + System.out.println("reading the buffer"); + */ + +/* + } + + + public static T copy(T item, Path path){ + return null; + } + + public static T move(T item, Path path){ + return null; + } + + public static T unshareAll(T item){ + return null; + } +*/ + + } diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java new file mode 100644 index 0000000..3e72867 --- /dev/null +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -0,0 +1,75 @@ +package org.gcube.data.access.fs; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; + +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehub.client.StreamDescriptor; +import org.gcube.common.storagehub.client.plugins.AbstractPlugin; +import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; +import org.gcube.common.storagehub.model.items.Item; +import org.junit.BeforeClass; +import org.junit.Test; + +public class TestCall { + + @BeforeClass + public static void setUp(){ + SecurityTokenProvider.instance.set("94a3b80a-c66f-4000-ae2f-230f5dfad793-98187548"); + ScopeProvider.instance.set("/gcube/devNext"); + } + + @Test + public void getListByPath(){ + long start = System.currentTimeMillis(); + WorkspaceManagerClient client = AbstractPlugin.workspace().build(); + List items =client.getWorkspace("hl:accounting"); + System.out.println("took: "+(System.currentTimeMillis()-start)+" for items "+items.size()); + items.forEach(i -> System.out.println(i.getTitle()+" "+i.getId()+" "+i.isLocked())); + } + + @Test + public void getById() throws Exception{ + long start = System.currentTimeMillis(); + ItemManagerClient client = AbstractPlugin.item().build(); + client.getChildren("07cd8d55-a35b-4445-9680-c98f158c55de", "hl:accounting", "jcr:content").forEach(i -> System.out.println(i.getName()+" "+i.getId())); + System.out.println("took: "+(System.currentTimeMillis()-start) ); + + } + + @Test + public void download() throws Exception{ + ItemManagerClient client = AbstractPlugin.item().build(); + StreamDescriptor streamDescr = client.download("07cd8d55-a35b-4445-9680-c98f158c55de"); + File output = Files.createTempFile("down", streamDescr.getFileName()).toFile(); + try (BufferedInputStream bi = new BufferedInputStream(streamDescr.getStream()); FileOutputStream fo = new FileOutputStream(output)){ + byte[] buf = new byte[2048]; + int read = -1; + while ((read=bi.read(buf))!=-1) { + fo.write(buf, 0, read); + } + } + + System.out.println("file written "+output.getAbsolutePath()); + + + } + +/* + @Test + public void createFolder() throws Exception{ + Items.createFolder(); + } + + @Test + public void createFile() throws Exception{ + Items.create(); + }*/ +}