diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/GroupHandler.java b/src/main/java/org/gcube/data/access/storagehub/handlers/GroupHandler.java index 7b15df5..600273a 100644 --- a/src/main/java/org/gcube/data/access/storagehub/handlers/GroupHandler.java +++ b/src/main/java/org/gcube/data/access/storagehub/handlers/GroupHandler.java @@ -2,6 +2,7 @@ package org.gcube.data.access.storagehub.handlers; import javax.inject.Inject; import javax.inject.Singleton; +import javax.jcr.ItemNotFoundException; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.PathNotFoundException; @@ -24,10 +25,10 @@ import org.slf4j.LoggerFactory; public class GroupHandler { private static final Logger log = LoggerFactory.getLogger(GroupManager.class); - + @Inject PathUtil pathUtil; - + public boolean removeUserFromGroup(String groupId, String userId, JackrabbitSession session) throws StorageHubException, RepositoryException { org.apache.jackrabbit.api.security.user.UserManager usrManager = session.getUserManager(); @@ -39,7 +40,7 @@ public class GroupHandler { //delete folder on user String folderName = group.getPrincipal().getName(); - Node folder = getVreFolderNode(session, folderName); + Node folder = getFolderNodeRelatedToGroup(session, folderName); NodeIterator ni = folder.getSharedSet(); while (ni.hasNext()) { @@ -53,8 +54,8 @@ public class GroupHandler { return group.removeMember(user); } - - public Node getVreFolderNode(JackrabbitSession session, String name) throws InvalidItemException, RepositoryException { + + public Node getFolderNodeRelatedToGroup(JackrabbitSession session, String name) throws ItemNotFoundException, RepositoryException { Node sharedRootNode = session.getNode(Constants.SHARED_FOLDER_PATH); Node vreFolder = null; @@ -64,16 +65,18 @@ public class GroupHandler { log.debug("is an old HL VRE"); } - NodeIterator nodes = sharedRootNode.getNodes(); - while (nodes.hasNext()) { - Node node = nodes.nextNode(); - if (node.hasProperty(NodeProperty.TITLE.toString()) && node.getProperty(NodeProperty.TITLE.toString()).getString().equals(name)) { - vreFolder= node; - break; + if (vreFolder==null) { + NodeIterator nodes = sharedRootNode.getNodes(); + while (nodes.hasNext()) { + Node node = nodes.nextNode(); + if (node.hasProperty(NodeProperty.TITLE.toString()) && node.getProperty(NodeProperty.TITLE.toString()).getString().equals(name)) { + vreFolder= node; + break; + } } } - if (vreFolder==null) throw new InvalidItemException("vre folder not found"); + if (vreFolder==null) throw new ItemNotFoundException("vre folder not found for group "+name); return vreFolder; } diff --git a/src/main/java/org/gcube/data/access/storagehub/handlers/vres/VREManager.java b/src/main/java/org/gcube/data/access/storagehub/handlers/vres/VREManager.java index 685f724..ebae0d0 100644 --- a/src/main/java/org/gcube/data/access/storagehub/handlers/vres/VREManager.java +++ b/src/main/java/org/gcube/data/access/storagehub/handlers/vres/VREManager.java @@ -12,9 +12,7 @@ import javax.jcr.ItemNotFoundException; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; -import javax.jcr.Session; import javax.jcr.SimpleCredentials; -import javax.jcr.query.Query; import javax.servlet.ServletContext; import org.apache.jackrabbit.api.JackrabbitSession; @@ -30,6 +28,7 @@ import org.gcube.common.storagehub.model.exceptions.StorageHubException; import org.gcube.common.storagehub.model.items.Item; import org.gcube.data.access.storagehub.Constants; import org.gcube.data.access.storagehub.PathUtil; +import org.gcube.data.access.storagehub.handlers.GroupHandler; import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter; import org.gcube.data.access.storagehub.services.RepositoryInitializer; import org.slf4j.Logger; @@ -51,6 +50,9 @@ public class VREManager { @Inject PathUtil pathUtil; + @Inject + GroupHandler groupHandler; + ExecutorService executor = Executors.newFixedThreadPool(5); SimpleCredentials credentials; @@ -98,26 +100,11 @@ public class VREManager { throw new InvalidCallParameters("error getting VRE with user "+userId+" for group "+groupName); - org.gcube.common.storagehub.model.Path vrePath = pathUtil.getVREsPath(userId, ses); VRE vre = this.getVRE(groupName); if (vre!=null) return vre; else { - Node shareNode = ses.getNode(Constants.SHARED_FOLDER_PATH); - - NodeIterator it = shareNode.getNodes(); - - Node vreFolderNode = null; - - while (it.hasNext()) { - Node nextNode = it.nextNode(); - if (nextNode.hasProperty("jcr:title") && nextNode.getProperty("jcr:title").getString().equals(groupName)) { - vreFolderNode = nextNode; - break; - } - } - - if (vreFolderNode==null) throw new ItemNotFoundException("vre folder not found for context "+groupName); + Node vreFolderNode = groupHandler.getFolderNodeRelatedToGroup(ses, groupName); Item vreFolder = node2Item.getItem(vreFolderNode, excludes); return this.putVRE(vreFolder); diff --git a/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java b/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java index d27063e..8a716c7 100644 --- a/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java +++ b/src/main/java/org/gcube/data/access/storagehub/services/GroupManager.java @@ -9,7 +9,6 @@ import java.util.Iterator; import java.util.List; import java.util.Objects; -import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.jcr.Node; import javax.jcr.PathNotFoundException; @@ -40,7 +39,6 @@ import org.apache.jackrabbit.api.security.user.QueryBuilder; import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; import org.gcube.common.authorization.control.annotations.AuthorizationControl; -import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.provider.AuthorizationProvider; import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse; import org.gcube.common.scope.api.ScopeProvider; @@ -200,11 +198,11 @@ public class GroupManager { org.apache.jackrabbit.api.security.user.UserManager usrManager = session.getUserManager(); Authorizable authorizable = usrManager.getAuthorizable(group); - if (authorizable.isGroup()) + if (authorizable!=null && authorizable.isGroup()) authorizable.remove(); try { - Node node = groupHandler.getVreFolderNode(session, group); + Node node = groupHandler.getFolderNodeRelatedToGroup(session, group); List workspaceItems = Utils.getItemList(node, Excludes.GET_ONLY_CONTENT, null, true, null); trashHandler.removeOnlyNodesContent(session, workspaceItems); node.removeSharedSet(); @@ -242,7 +240,7 @@ public class GroupManager { session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context)); - Node vreFolder = groupHandler.getVreFolderNode(session, groupId); + Node vreFolder = groupHandler.getFolderNodeRelatedToGroup(session, groupId); String currentUser = AuthorizationProvider.instance.get().getClient().getId(); if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) )) @@ -296,7 +294,7 @@ public class GroupManager { Objects.nonNull(userId); session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context)); - Node vreFolder = groupHandler.getVreFolderNode(session, groupId); + Node vreFolder = groupHandler.getFolderNodeRelatedToGroup(session, groupId); String currentUser = AuthorizationProvider.instance.get().getClient().getId(); if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) )) @@ -422,7 +420,7 @@ public class GroupManager { boolean success = group.addMember(user); session.save(); String folderName = group.getPrincipal().getName(); - Node folder = groupHandler.getVreFolderNode(session, folderName); + Node folder = groupHandler.getFolderNodeRelatedToGroup(session, folderName); String userPath = Paths.append(pathUtil.getVREsPath(user.getPrincipal().getName(), session), folderName).toPath(); log.debug("creating folder in user path {} from {}", userPath, folder.getPath() ); diff --git a/src/main/java/org/gcube/data/access/storagehub/services/admin/ScriptManager.java b/src/main/java/org/gcube/data/access/storagehub/services/admin/ScriptManager.java index a164b93..3bebb18 100644 --- a/src/main/java/org/gcube/data/access/storagehub/services/admin/ScriptManager.java +++ b/src/main/java/org/gcube/data/access/storagehub/services/admin/ScriptManager.java @@ -168,7 +168,7 @@ public class ScriptManager { .stream(stream).on(parentId).with(ses).author(login); itemHandler.create(builder.build()); } catch (Throwable e) { - log.error("error saving script result {} in the Workspace",name); + log.error("error saving script result {} in the Workspace",name, e); } } finally {