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 709eace..26e2444 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 @@ -8,6 +8,7 @@ import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.GCubeItem; public class FolderContainer extends ItemContainer{ @@ -42,6 +43,11 @@ public class FolderContainer extends ItemContainer{ return new FolderContainer(itemclient, newFolderId); } + public GenericItemContainer newGcubeItem(GCubeItem item) throws Exception { + String itemId = itemclient.createGcubeItem(this.itemId, item); + return new GenericItemContainer(itemclient, itemId); + } + public List getAcls() throws Exception { return itemclient.getACL(this.itemId); } 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 4244088..bc97a03 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 @@ -23,6 +23,7 @@ import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.annotations.RootNode; import org.gcube.common.storagehub.model.exceptions.BackendGenericError; +import org.gcube.common.storagehub.model.items.GCubeItem; import org.gcube.common.storagehub.model.items.Item; import org.gcube.common.storagehub.model.service.ItemList; import org.gcube.common.storagehub.model.service.ItemWrapper; @@ -496,7 +497,35 @@ public class DefaultItemManager implements ItemManagerClient { throw new RuntimeException(e); } } - + + @Override + public String createGcubeItem(String parentId, GCubeItem item) { + Call call = new Call() { + @Override + public String call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager.path(parentId) + .path("create").path("GCUBEITEM"); + + + GXInboundResponse response = myManager.post(Entity.json(item)); + + 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(Exception e) { + throw new RuntimeException(e); + } + } + @Override public String shareFolder(String id, Set users, AccessType accessType) { Call call = new Call() { 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 de7b900..ba4d2e0 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 @@ -9,6 +9,7 @@ import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.items.GCubeItem; import org.gcube.common.storagehub.model.items.Item; import org.gcube.common.storagehub.model.service.Version; @@ -65,5 +66,7 @@ public interface ItemManagerClient { StreamDescriptor downloadSpecificVersion(String id, String version); String setMetadata(String id,Metadata metadata); + + String createGcubeItem(String parentId, GCubeItem item); }