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 1019c00..6f7b653 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 @@ -24,7 +24,7 @@ public class FolderContainer extends ItemContainer{ } public ListResolver list() { - return new ListResolver(itemclient, itemId); + return new ListResolver(excludes -> itemclient.getChildren(itemId, excludes), itemclient); } public FileContainer uploadFile(InputStream stream, String filename, String description) { @@ -40,4 +40,9 @@ public class FolderContainer extends ItemContainer{ return itemclient.getACL(this.itemId); } + public ListResolver findByName(String namePattern) { + return new ListResolver(excludes -> itemclient.findChildrenByNamePattern(itemId, namePattern , excludes), itemclient); + } + + } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/ListResolver.java b/src/main/java/org/gcube/common/storagehub/client/dsl/ListResolver.java index e2ac214..b3aba50 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/ListResolver.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/ListResolver.java @@ -12,14 +12,15 @@ import org.gcube.common.storagehub.model.items.Item; public class ListResolver { - private ItemManagerClient itemClient; - private String itemId; - + ListRetriever retriever; + ItemManagerClient itemClient; + + Set excludes = new HashSet<>(Arrays.asList(NodeConstants.ACCOUNTING_NAME, NodeConstants.CONTENT_NAME, NodeConstants.METADATA_NAME)); - protected ListResolver(ItemManagerClient itemclient, String itemId) { - this.itemClient = itemclient; - this.itemId = itemId; + protected ListResolver(ListRetriever retriever, ItemManagerClient itemClient) { + this.retriever = retriever; + this.itemClient = itemClient; } public ListResolver withAccounting(){ @@ -38,11 +39,11 @@ public class ListResolver { } public List getItems(){ - return itemClient.getChildren(itemId, excludes.toArray(new String[excludes.size()])); + return retriever.getList(excludes.toArray(new String[excludes.size()])); } public List> getContainers(){ - List items = itemClient.getChildren(itemId, excludes.toArray(new String[excludes.size()])); + List items = getItems(); List> toReturn = items.stream().map(i -> Util.getContainerFromItem(i, itemClient)).collect(Collectors.toList()); return toReturn; } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/ListRetriever.java b/src/main/java/org/gcube/common/storagehub/client/dsl/ListRetriever.java new file mode 100644 index 0000000..e8ff5f9 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/ListRetriever.java @@ -0,0 +1,10 @@ +package org.gcube.common.storagehub.client.dsl; + +import java.util.List; + +import org.gcube.common.storagehub.model.items.Item; + +public interface ListRetriever { + + List getList(String ... excludes); +} 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 cb5ea2d..b9d6c86 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 @@ -142,6 +142,27 @@ public class DefaultItemManager implements ItemManagerClient { } } + @Override + public List findChildrenByNamePattern(String id, String name, String... excludeNodes) { + Call call = new Call() { + @Override + public ItemList call(WebTarget manager) throws Exception { + WebTarget myManager = manager.path(id).path("items").path(name); + 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 Integer childrenCount(String id) { 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 f7d27f5..b212d3d 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 @@ -35,5 +35,7 @@ public interface ItemManagerClient { void delete(String id); URL getPublickLink(String id); + + List findChildrenByNamePattern(String id, String name, 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 e64a247..f349120 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -34,7 +34,7 @@ public class Items { String afi = null; try (InputStream is = new FileInputStream(new File("/home/lucio/Downloads/rockandroll.jpeg"))){ - shc.getWSRoot().uploadFile(is, "tes-image.jpeg", "descr"); + shc.getWSRoot().uploadFile(is, "test2-image.jpeg", "descr"); System.out.println(afi); } catch (Exception e) { @@ -53,6 +53,15 @@ public class Items { System.out.println(shc.open("c2573eec-3942-47ec-94a7-04869e97bb69").asFile().getPublicLink()); } + @Test + public void findByName() throws Exception{ + StorageHubClient shc = new StorageHubClient(); + List containers = shc.getWSRoot().findByName("DataMiner").getItems(); + for (Item container : containers) { + System.out.println("name is :"+container.getName()); + } + } + @Test public void downloadFile() { StorageHubClient shc = new StorageHubClient();