From d2baa2dda74c1b24b75a6c03d9a6edafdbc425c0 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Mon, 29 Jul 2019 14:25:52 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/Common/storagehub-client@181340 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../storagehub/client/dsl/ContainerType.java | 3 +- .../client/dsl/FolderContainer.java | 16 +++++++ .../storagehub/client/dsl/OpenResolver.java | 7 ++++ .../storagehub/client/dsl/URLContainer.java | 20 +++++++++ .../client/proxies/DefaultItemManager.java | 42 +++++++++++++++++++ .../client/proxies/ItemManagerClient.java | 2 + .../java/org/gcube/data/access/fs/Items.java | 8 ++-- 7 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/gcube/common/storagehub/client/dsl/URLContainer.java diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/ContainerType.java b/src/main/java/org/gcube/common/storagehub/client/dsl/ContainerType.java index b4f4669..36fcace 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/ContainerType.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/ContainerType.java @@ -4,6 +4,7 @@ public enum ContainerType { FOLDER, FILE, - GENERIC_ITEM + GENERIC_ITEM, + URL } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java b/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java index 6a73179..f59e77c 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java @@ -1,6 +1,7 @@ package org.gcube.common.storagehub.client.dsl; import java.io.InputStream; +import java.net.URL; import java.util.List; import java.util.Set; @@ -57,6 +58,21 @@ public class FolderContainer extends ItemContainer{ return new FileContainer(itemclient, itemclient.uploadFile(stream, this.itemId , filename, description)); } + /** + * + * creates a {@ExternalLink} inside the folder represented by this FolderContainer + * + * @param url the url + * @param name the name of the item in the workspace + * @param description the description of the item in the workspace + * @return {@URLContainer} of the Item created + * @throws {@InvalidItemException} + * @throws {@UserNotAuthorizedException} if user is not authorized to write in this folder + */ + public URLContainer addUrl(URL url, String name, String description) throws StorageHubException { + return new URLContainer(itemclient, itemclient.createURL(this.itemId, name, description, url)); + } + /** * * creates a set of {@Item} in the workspace extracting the Archive diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/OpenResolver.java b/src/main/java/org/gcube/common/storagehub/client/dsl/OpenResolver.java index e886539..0a47e07 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/OpenResolver.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/OpenResolver.java @@ -2,6 +2,7 @@ package org.gcube.common.storagehub.client.dsl; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.model.items.AbstractFileItem; +import org.gcube.common.storagehub.model.items.ExternalLink; import org.gcube.common.storagehub.model.items.FolderItem; import org.gcube.common.storagehub.model.items.Item; @@ -30,4 +31,10 @@ public class OpenResolver { return new FileContainer(itemclient, (AbstractFileItem)item); else throw new RuntimeException("this item is not a File"); } + + public URLContainer asURL() { + if (item instanceof ExternalLink) + return new URLContainer(itemclient, (ExternalLink)item); + else throw new RuntimeException("this item is not a File"); + } } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/URLContainer.java b/src/main/java/org/gcube/common/storagehub/client/dsl/URLContainer.java new file mode 100644 index 0000000..3489cd5 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/URLContainer.java @@ -0,0 +1,20 @@ +package org.gcube.common.storagehub.client.dsl; + +import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.model.items.ExternalLink; + +public class URLContainer extends ItemContainer { + + protected URLContainer(ItemManagerClient itemclient, ExternalLink item) { + super(itemclient, item); + } + + protected URLContainer(ItemManagerClient itemclient, String itemId) { + super(itemclient, itemId); + } + + public ContainerType getType() { + return ContainerType.URL; + } + +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java index 9cc53c7..8ea2ae0 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java @@ -675,6 +675,48 @@ public class DefaultItemManager implements ItemManagerClient { throw new RuntimeException(e1); } } + + + @Override + public String createURL(String parentId, String name, String description,URL url) throws StorageHubException { + Call call = new Call() { + @Override + public String call(GXWebTargetAdapterRequest manager) throws Exception { + Objects.requireNonNull(parentId, "parentId cannot be null"); + Objects.requireNonNull(name, "folder name cannot be null"); + Objects.requireNonNull(description, "parentId cannot be null"); + + + GXWebTargetAdapterRequest myManager = manager.path(parentId) + .path("create").path("URL"); + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("name", name); + formData.add("description", description); + formData.add("value", url.toString()); + + + GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(String.class); + } + }; + try { + return delegate.make(call); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } + } + @Override public String createGcubeItem(String parentId, GCubeItem item) throws StorageHubException { 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 index 2f441d6..498b812 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java @@ -40,6 +40,8 @@ public interface ItemManagerClient { String createFolder(String parentId, String name, String description, boolean hidden) throws StorageHubException; + String createURL(String parentId, String name, String description, URL url) throws StorageHubException; + @Deprecated String createFolder(String parentId, String name, String description) throws StorageHubException; 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 3a4d94b..a3dda48 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -4,6 +4,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.net.URI; +import java.net.URL; import java.nio.file.Files; import java.util.Arrays; import java.util.Collections; @@ -54,9 +56,9 @@ public class Items { StorageHubClient shc = new StorageHubClient(); - FolderContainer fc = shc.open("7343dd7d-0f2b-4dc7-968e-b856e7073ea8").asFolder(); - - fc.newFolder("testLucio","testLucio"); + + + shc.getWSRoot().addUrl(new URI("https://www.youtube.com/watch?v=bGef_U0S7Uo").toURL(), "video test 3", "video test descr 3"); }