This commit is contained in:
Lucio Lelii 2018-03-29 16:19:01 +00:00
parent 12b0794610
commit 53c629eeb4
6 changed files with 179 additions and 23 deletions

View File

@ -0,0 +1,48 @@
package org.gcube.common.storagehub.client.dls;
import java.io.InputStream;
import java.util.List;
import org.gcube.common.storagehub.client.StreamDescriptor;
import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
import org.gcube.common.storagehub.model.items.AbstractFileItem;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
public class FolderContainer {
private ItemManagerClient itemclient;
private String folderId = null;
// private String folderPath = null;
protected FolderContainer(ItemManagerClient itemclient) {
this.itemclient = itemclient;
}
protected void setId(String folderId) {
this.folderId = folderId;
// this.folderPath = null;
}
/*
protected void setPath(String folderPath) {
this.folderPath = folderPath;
this.folderId = null;
}*/
public FolderItem get() throws Exception {
return (FolderItem)itemclient.get(folderId);
}
public List<? extends Item> list() {
return itemclient.getChildren(folderId);
}
public <T extends AbstractFileItem> T uploadFile(InputStream stream, String filename, String description) {
return itemclient.uploadFile(stream, this.folderId , filename, description);
}
public StreamDescriptor download(InputStream stream) {
return itemclient.download(this.folderId);
}
}

View File

@ -0,0 +1,11 @@
package org.gcube.common.storagehub.client.dls;
public class StorageHubClient {
public WorkspaceContainer get() {
return new WorkspaceContainer();
}
}

View File

@ -0,0 +1,59 @@
package org.gcube.common.storagehub.client.dls;
import java.io.InputStream;
import java.util.List;
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.AbstractFileItem;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
public class WorkspaceContainer {
private WorkspaceManagerClient wsClient = AbstractPlugin.workspace().build();
private ItemManagerClient itemclient = AbstractPlugin.item().build();
protected WorkspaceContainer() {}
FolderItem rootFolder = null;
private void init() {
if (rootFolder == null)
rootFolder = (FolderItem) wsClient.getWorkspace();
}
public FolderItem get(String ... excludes) {
init();
return rootFolder;
}
public List<? extends Item> list() {
init();
return itemclient.getChildren(rootFolder.getId());
}
public FolderContainer open(String id) {
FolderContainer fc = new FolderContainer(itemclient);
fc.setId(id);
return fc;
}
public <T extends AbstractFileItem> T uploadFile(InputStream stream, String filename, String description) {
init();
return itemclient.uploadFile(stream, this.rootFolder.getId(), filename, description);
}
public StreamDescriptor download(InputStream stream) {
init();
return itemclient.download(this.rootFolder.getId());
}
/*public FolderContainer open(Path path) {
FolderContainer fc = new FolderContainer(itemclient);
fc.setId(get("hl:accounting","jcr:content").getId());
return fc;
}*/
}

View File

@ -3,6 +3,7 @@ package org.gcube.common.storagehub.client.proxies;
import java.io.InputStream;
import java.util.List;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
@ -11,9 +12,12 @@ 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.AbstractFileItem;
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.glassfish.jersey.media.multipart.FormDataMultiPart;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
public class DefaultItemManager implements ItemManagerClient {
@ -134,4 +138,25 @@ public class DefaultItemManager implements ItemManagerClient {
}
}
@Override
public AbstractFileItem uploadFile(InputStream stream, String parentId, String fileName, String description) {
Call<WebTarget, ItemWrapper<AbstractFileItem>> call = new Call<WebTarget, ItemWrapper<AbstractFileItem>>() {
@Override
public ItemWrapper<AbstractFileItem> call(WebTarget manager) throws Exception {
WebTarget myManager = manager.register(MultiPartFeature.class).path(parentId)
.path("create").path("FILE").queryParam("name", fileName).queryParam("description", description);
Invocation.Builder builder = myManager.request();
ItemWrapper<AbstractFileItem> response = builder.post(Entity.entity(stream, MediaType.APPLICATION_OCTET_STREAM), ItemWrapper.class);
return response;
}
};
try {
ItemWrapper<AbstractFileItem> result = delegate.make(call);
return result.getItem();
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@ -1,8 +1,10 @@
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.AbstractFileItem;
import org.gcube.common.storagehub.model.items.Item;
@ -21,4 +23,6 @@ public interface ItemManagerClient {
StreamDescriptor download(String id);
<T extends AbstractFileItem> T uploadFile(InputStream stream, String parentId, String fileName, String description);
}

View File

@ -1,37 +1,46 @@
package org.gcube.data.access.fs;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import java.io.InputStream;
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.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.storagehub.client.dls.FolderContainer;
import org.gcube.common.storagehub.client.dls.StorageHubClient;
import org.gcube.common.storagehub.model.items.AbstractFileItem;
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;
import org.junit.BeforeClass;
import org.junit.Test;
public class Items {
@BeforeClass
public static void setUp(){
SecurityTokenProvider.instance.set("52b59669-ccde-46d2-a4da-108b9e941f7c-98187548");
ScopeProvider.instance.set("/gcube/devNext");
}
@Test
public void list() {
StorageHubClient shc = new StorageHubClient();
shc.get().list().stream().forEach(System.out::println);
}
@Test
public void uploadFile() {
StorageHubClient shc = new StorageHubClient();
try (InputStream is = new FileInputStream(new File("/home/lucio/Downloads/domenica.jpeg"))){
AbstractFileItem afi = shc.get().uploadFile(is, "domenica15", "descr");
System.out.println(afi.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
/*
static String baseUrl="http://workspace-repository1-d.d4science.org/storagehub";