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 09573cc..0a53e3c 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,8 +1,10 @@ package org.gcube.common.storagehub.client.dsl; import java.io.InputStream; +import java.util.List; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.items.FolderItem; public class FolderContainer extends ItemContainer{ @@ -35,4 +37,8 @@ public class FolderContainer extends ItemContainer{ return new FolderContainer(itemclient, newFolderId); } + public List getAcls() throws Exception { + return itemclient.getACL(this.itemId); + } + } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/GenericItemContainer.java b/src/main/java/org/gcube/common/storagehub/client/dsl/GenericItemContainer.java new file mode 100644 index 0000000..5b15245 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/GenericItemContainer.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.Item; + +public class GenericItemContainer extends ItemContainer { + + protected GenericItemContainer(ItemManagerClient itemclient, Item item) { + super(itemclient, item); + } + + protected GenericItemContainer(ItemManagerClient itemclient, String itemId) { + super(itemclient, itemId); + } + + public ContainerType getType() { + return ContainerType.GENERIC_ITEM; + } + +} diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/ItemContainer.java b/src/main/java/org/gcube/common/storagehub/client/dsl/ItemContainer.java index 26dfa33..292316e 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/ItemContainer.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/ItemContainer.java @@ -7,7 +7,7 @@ import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.model.NodeConstants; import org.gcube.common.storagehub.model.items.Item; -public class ItemContainer { +public abstract class ItemContainer { protected ItemManagerClient itemclient; @@ -21,6 +21,7 @@ public class ItemContainer { protected ItemContainer(ItemManagerClient itemclient, String itemId) { this.itemclient = itemclient; + this.itemId = itemId; } protected void setItem(I item) { @@ -28,9 +29,7 @@ public class ItemContainer { this.itemId = item.getId(); } - public ContainerType getType() { - return ContainerType.GENERIC_ITEM; - } + public abstract ContainerType getType(); 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 7333dcf..e886539 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 @@ -22,10 +22,12 @@ public class OpenResolver { } public ItemContainer asItem() { - return new ItemContainer(itemclient, item); + return new GenericItemContainer(itemclient, item); } public FileContainer asFile() { - return new FileContainer(itemclient, (AbstractFileItem)item); + if (item instanceof AbstractFileItem) + return new FileContainer(itemclient, (AbstractFileItem)item); + else throw new RuntimeException("this item is not a File"); } } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java b/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java index b435d29..35461c9 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java @@ -12,6 +12,6 @@ public class Util { return new FileContainer(itemClient, (AbstractFileItem)item); else if (item instanceof FolderItem) return new FolderContainer(itemClient, (FolderItem)item); - else return new ItemContainer(itemClient, item); + else return new GenericItemContainer(itemClient, item); } } 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 8c4c58f..a828052 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -2,11 +2,19 @@ package org.gcube.data.access.fs; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; +import java.nio.file.StandardCopyOption; +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.dsl.ContainerType; +import org.gcube.common.storagehub.client.dsl.FileContainer; +import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.model.items.Item; import org.junit.BeforeClass; import org.junit.Test; @@ -44,6 +52,34 @@ public class Items { } } + @Test + public void downloadFile() { + StorageHubClient shc = new StorageHubClient(); + + List> containers = shc.getWSRoot().list().getContainers(); + + for (ItemContainer container : containers) { + if (container.getType()==ContainerType.FILE) { + FileContainer file = (FileContainer) container; + StreamDescriptor descr = file.download(); + File targetFile = new File("/tmp/"+descr.getFileName()); + + try { + java.nio.file.Files.copy( + descr.getStream(), + targetFile.toPath(), + StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("file created "+targetFile.getAbsolutePath()); + break; + } + } + + } + /*