diff --git a/pom.xml b/pom.xml index 57e92a1..fafcb07 100644 --- a/pom.xml +++ b/pom.xml @@ -64,12 +64,10 @@ org.glassfish.jersey.media jersey-media-json-jackson - 2.24.1 org.glassfish.jersey.media jersey-media-multipart - 2.24.1 diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java index 965e52b..5a3ab59 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java @@ -35,8 +35,12 @@ public class StorageHubClient { return new ListResolver((onlyType, includeHidden, excludes) -> wsClient.getVreFolders(excludes), itemclient); } + public VREFolderManager getVreFolderManager(String vreTitle) { + return new VREFolderManager(wsClient, groupClient, vreTitle); + } + public VREFolderManager getVreFolderManager() { - return new VREFolderManager(wsClient, groupClient); + return new VREFolderManager(wsClient, groupClient, null); } public FolderContainer openTrash() { 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 35461c9..127d317 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 @@ -1,6 +1,10 @@ package org.gcube.common.storagehub.client.dsl; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.scope.impl.ScopeBean.Type; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.model.exceptions.BackendGenericError; import org.gcube.common.storagehub.model.items.AbstractFileItem; import org.gcube.common.storagehub.model.items.FolderItem; import org.gcube.common.storagehub.model.items.Item; @@ -14,4 +18,11 @@ public class Util { return new FolderContainer(itemClient, (FolderItem)item); else return new GenericItemContainer(itemClient, item); } + + public static String getVREGroupFromContext(String context) throws BackendGenericError{ + ScopeBean bean = new ScopeBean(context); + if (!bean.is(Type.VRE)) throw new BackendGenericError(context+ " is not a VRE context"); + String entireScopeName= bean.toString().replaceAll("^/(.*)/?$", "$1").replaceAll("/", "-"); + return entireScopeName; + } } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java index 4ac1b82..59506e6 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java @@ -1,5 +1,7 @@ package org.gcube.common.storagehub.client.dsl; +import java.util.List; + import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.Excludes; @@ -11,26 +13,41 @@ public class VREFolderManager { private WorkspaceManagerClient wsClient; private GroupManagerClient groupClient; - public VREFolderManager(WorkspaceManagerClient wsClient, GroupManagerClient groupClient) { + private String vreTitle; + + public VREFolderManager(WorkspaceManagerClient wsClient, GroupManagerClient groupClient, String vreTitle) { super(); this.wsClient = wsClient; this.groupClient = groupClient; + this.vreTitle = vreTitle; } public void removeUser(String userId) throws StorageHubException{ - groupClient.removeUserFromGroup(userId, getVreFolder().getTitle()); + groupClient.removeUserFromGroup(userId, vreTitle); } public void addUser(String userId) throws StorageHubException{ - groupClient.addUserToGroup(userId, getVreFolder().getTitle()); + groupClient.addUserToGroup(userId, vreTitle); } - public void getUsers() throws StorageHubException{ - getVreFolder(); - groupClient.getUsersOfGroup(getVreFolder().getTitle()); + public List getUsers() throws StorageHubException{ + return groupClient.getUsersOfGroup(vreTitle); } - + private Item getVreFolder() { return wsClient.getVreFolder(Excludes.ALL.toArray(new String[0])); } + + public void setAdmin(String userId) throws StorageHubException{ + groupClient.addAdmin(vreTitle, userId); + } + + public void removeAdmin(String userId) throws StorageHubException{ + groupClient.removeAdmin(vreTitle, userId); + } + + public List getAdmins() throws StorageHubException{ + return groupClient.getAdmins(vreTitle); + } + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java index 93dafa0..90fe133 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -33,7 +33,7 @@ private final ProxyDelegate delegate; MultivaluedMap formData = new MultivaluedHashMap(); formData.add("userId", userId); - GXInboundResponse response = myManager.path(groupId).put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + GXInboundResponse response = myManager.path(groupId).path("users").put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); if (response.isErrorResponse()) { if (response.hasException()) @@ -204,4 +204,92 @@ private final ProxyDelegate delegate; } } + + + @Override + public void addAdmin(String groupId, String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("userId", userId); + + GXInboundResponse response = myManager.path(groupId).path("admins").put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void removeAdmin(String groupId, String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("admins").path(userId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } + + } + + @Override + public List getAdmins(String groupId) throws StorageHubException { + Call> call = new Call>() { + @Override + public List call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("admins").get(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(List.class); + } + }; + try { + List users = delegate.make(call); + return users; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + } 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 c94daf8..c595645 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 @@ -1007,9 +1007,8 @@ public class DefaultItemManager implements ItemManagerClient { } -/* @Override - public String removeSharedFolderAdmin(String id, String user) throws StorageHubException { + public String removeAdmin(String id, String user) throws StorageHubException { Call call = new Call() { @Override public String call(GXWebTargetAdapterRequest manager) throws Exception { @@ -1041,7 +1040,7 @@ public class DefaultItemManager implements ItemManagerClient { }catch(Exception e1) { throw new RuntimeException(e1); } - }*/ + } @Override diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java index 751827a..f584769 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java @@ -18,4 +18,11 @@ public interface GroupManagerClient { List getUsersOfGroup(String groupId) throws StorageHubException; List getGroups() throws StorageHubException; + + void addAdmin(String groupId, String userId) throws StorageHubException; + + void removeAdmin(String groupId, String userId) throws StorageHubException; + + List getAdmins(String groupId) 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 0341cde..a27dcda 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 @@ -49,10 +49,8 @@ public interface ItemManagerClient { String changeACL(String id, String user, AccessType accessType) throws StorageHubException; - /* - String removeSharedFolderAdmin(String id, String user) throws StorageHubException; - */ - + String removeAdmin(String id, String user) throws StorageHubException; + @Deprecated void delete(String id) 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 5404275..7dee045 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -7,7 +7,9 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.nio.file.Files; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map.Entry; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; @@ -46,6 +48,27 @@ public class Items { shc.getVreFolderManager().addUser("andrea.rossi"); } + + @Test + public void getAdminsFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + for (String user: shc.getVreFolderManager().getAdmins()) { + System.out.println(user); + } + } + @Test + public void removeAdminsFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().removeAdmin("vfloros"); + + } + + @Test + public void addAdminToVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().setAdmin("vfloros"); + } + @Test public void emptyStatisticaManagerTrash() { StorageHubClient shc = new StorageHubClient(); @@ -56,14 +79,26 @@ public class Items { public void forceDelete() throws Exception{ StorageHubClient shc = new StorageHubClient(); + /* + shc.getWSRoot().newFolder("lucioFolderTestMeta","desclucio" ); + HashMap prop = new HashMap<>(); + prop.put("folderProp", "test2"); + prop.put("folderProp2", "test2"); + */ + FolderContainer fc = shc.open("bfb0548b-92d0-47d4-a973-1253dc4694d1").asFolder(); + + List> children = fc.list().withMetadata().getContainers(); + + for (ItemContainer cont : children) { + Metadata m = cont.get().getMetadata(); + + for (Object v : m.getMap().values()) + System.out.println(v.toString()); + } - long count = shc.getTotalItemCount(); - long volume = shc.getTotalVolume(); - - System.out.println("items are "+count+" volume "+volume); } diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index eb079a7..a0c6dd8 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -25,6 +25,7 @@ import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.Paths; @@ -55,8 +56,8 @@ public class TestCall { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); - ScopeProvider.instance.set("/gcube"); + SecurityTokenProvider.instance.set("490eed48-dee3-478d-a856-cfb1132c1b92-843339462"); + ScopeProvider.instance.set("/d4science.research-infrastructures.eu"); } @Test @@ -325,6 +326,8 @@ public class TestCall { boolean b = m.find(); System.out.println("result: "+!b); } + + /* private InputStream getThumbnailAsPng(ImagePlus img, int thumbWidth, int thumbHeight) throws IOException {