diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java index d51fa31..d9bfdde 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/ItemBuilder.java @@ -20,7 +20,7 @@ import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.common.storagehub.model.items.VreFolder; import org.gcube.portlets.widgets.wsexplorer.client.Util; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; -import org.gcube.portlets.widgets.wsexplorer.server.stohub.Whorespace; +import org.gcube.portlets.widgets.wsexplorer.server.stohub.StorageHubServiceUtil; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.slf4j.Logger; @@ -92,7 +92,7 @@ public class ItemBuilder { String itemId = item.getId(); ItemManagerClient client = AbstractPlugin.item().build(); List theChildren = null; - theChildren = client.getChildren(itemId, Whorespace.ACCOUNTING_HL_NODE_NAME); + theChildren = client.getChildren(itemId, StorageHubServiceUtil.ACCOUNTING_HL_NODE_NAME); for (Item child : theChildren) { String itemPath = workspaceItemPath+"/"+child.getName(); org.gcube.portlets.widgets.wsexplorer.shared.Item itemChild = getItem(item, child, itemPath, showableTypes, filterCriteria, false, loadGcubeProperties); @@ -168,7 +168,7 @@ public class ItemBuilder { String itemId = item.getId(); ItemManagerClient client = AbstractPlugin.item().build(); List theChildren = null; - theChildren = client.getChildren(itemId, startIdx, limit, Whorespace.ACCOUNTING_HL_NODE_NAME); + theChildren = client.getChildren(itemId, startIdx, limit, StorageHubServiceUtil.ACCOUNTING_HL_NODE_NAME); for (Item child : theChildren) { String itemPath = workspaceItemPath+"/"+child.getName(); org.gcube.portlets.widgets.wsexplorer.shared.Item itemChild = getItem(item, child, itemPath, showableTypes, filterCriteria, false, loadGcubeProperties); diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java index 014cdfb..8a5baa1 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImpl.java @@ -13,7 +13,7 @@ import org.gcube.common.storagehub.model.items.Item; import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; -import org.gcube.portlets.widgets.wsexplorer.server.stohub.Whorespace; +import org.gcube.portlets.widgets.wsexplorer.server.stohub.StorageHubServiceUtil; import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria; import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemInterface; @@ -54,7 +54,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement SecurityTokenProvider.instance.set(authorizationToken); _log.trace("Start getRoot..."); - Item root = Whorespace.getRoot(getThreadLocalRequest()); + Item root = StorageHubServiceUtil.getRoot(getThreadLocalRequest()); org.gcube.portlets.widgets.wsexplorer.shared.Item rootItem = ItemBuilder.getItem(null, root, root.getPath(), showableTypes, filterCriteria, true, false); rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL); @@ -92,7 +92,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement String scope = pContext.getCurrentScope(getThreadLocalRequest()); String authorizationToken = pContext.getCurrentUserToken(scope, userName); SecurityTokenProvider.instance.set(authorizationToken); - Item folder = Whorespace.getItem(getThreadLocalRequest(), item.getId()); + Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), item.getId()); _log.trace("GetFolder - Replying folder"); //TO AVOID SLOW CALL getPATH() @@ -140,7 +140,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement switch(category){ case HOME:{ - Item root = Whorespace.getRoot(getThreadLocalRequest()); + Item root = StorageHubServiceUtil.getRoot(getThreadLocalRequest()); String fullName = pContext.getCurrentUser(getThreadLocalRequest()).getFullname(); if(fullName.indexOf(" ")>0){ fullName = fullName.substring(0, fullName.indexOf(" ")); @@ -151,8 +151,8 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement break; } case VRE_FOLDER:{ - String vreFolderId = Whorespace.getVREFoldersId(getThreadLocalRequest()); - Item folder = Whorespace.getItem(getThreadLocalRequest(), vreFolderId); + String vreFolderId = StorageHubServiceUtil.getVREFoldersId(getThreadLocalRequest()); + Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), vreFolderId); item = new org.gcube.portlets.widgets.wsexplorer.shared.Item( null, folder.getId(), @@ -192,8 +192,8 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement String scope = pContext.getCurrentScope(getThreadLocalRequest()); String authorizationToken = pContext.getCurrentUserToken(scope, userName); SecurityTokenProvider.instance.set(authorizationToken); - String vreFolderId = Whorespace.getVREFoldersId(getThreadLocalRequest()); - Item folder = Whorespace.getItem(getThreadLocalRequest(), vreFolderId); + String vreFolderId = StorageHubServiceUtil.getVREFoldersId(getThreadLocalRequest()); + Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), vreFolderId); org.gcube.portlets.widgets.wsexplorer.shared.Item itemFolder = ItemBuilder.getItem(null, folder, folder.getPath(), showableTypes, filterCriteria, true, false); //OVERRIDING VRE FOLDERS NAME - SET SPECIAL FOLDER /Workspace/MySpecialFolders @@ -240,7 +240,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement throws Exception { System.out.println("ListParents By Item id "+ itemIdentifier + " name="+itemName); try { - List parents = Whorespace.getParents(getThreadLocalRequest(), itemIdentifier); + List parents = StorageHubServiceUtil.getParents(getThreadLocalRequest(), itemIdentifier); ArrayList toReturn = new ArrayList<>(parents.size()); for (Item item : parents) { if (item instanceof FolderItem) @@ -273,7 +273,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement parentLimit = parentLimit!=null?parentLimit:""; try { - List parents = Whorespace.getParents(getThreadLocalRequest(), itemIdentifier); + List parents = StorageHubServiceUtil.getParents(getThreadLocalRequest(), itemIdentifier); ArrayList toWorkOn = new ArrayList<>(parents.size()); for (Item item : parents) { if (item instanceof FolderItem) @@ -281,7 +281,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement } Collections.reverse(toWorkOn); - Item folderItem = Whorespace.getItem(getThreadLocalRequest(), itemIdentifier); + Item folderItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemIdentifier); String theClickedFolderName = folderItem.getTitle(); if((theClickedFolderName.compareTo(WorkspaceExplorerConstants.SPECIAL_FOLDERS_NAME) == 0)){ theClickedFolderName = WorkspaceExplorerConstants.VRE_FOLDERS_LABEL; @@ -324,7 +324,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement public Long getSizeByItemId(String itemId) throws Exception { _log.debug("get Size By ItemId "+ itemId); try { - Item wsItem = Whorespace.getItem(getThreadLocalRequest(), itemId); + Item wsItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemId); _log.trace("workspace retrieve item name: "+wsItem.getName()); if((wsItem instanceof FolderItem)) //if is a folder no mime return null; @@ -352,7 +352,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement public String getMimeType(String itemId) throws Exception { _log.debug("get MimeType By ItemId "+ itemId); try { - Item wsItem = Whorespace.getItem(getThreadLocalRequest(), itemId); + Item wsItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemId); _log.trace("workspace retrieve item name: "+wsItem.getName()); if((wsItem instanceof FolderItem)) //if is a folder no mime return null; @@ -376,24 +376,12 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement */ @Override public String getUserACLForFolderId(String folderId) throws Exception{ - //TODO: missing implementation on the back-end - return "unknown"; - // try { - // logger.info("Get user ACL to FOLDER id: "+folderId); - // Item wsItem = Whorespace.getItem(getThreadLocalRequest(), folderId); - // logger.trace("workspace retrieve item name: "+wsItem.getName()); - // - // if(!isASharedFolder(wsItem, false)) { - // return "OWNER"; - // } - // else { - // return "NOT IMPLEMENTED";//TODO - // } - // } catch (Exception e) { - // logger.error("Error in server get UserACLForFolderId", e); - // String error = "An error occurred when getting ACL rules for selected folder. "+e.getMessage(); - // throw new Exception(error); - // } + try { + return StorageHubServiceUtil.getUserACLForFolderId(getThreadLocalRequest(), folderId); + }catch(Exception e) { + e.printStackTrace(); + } + return "UNKNOWN"; } @@ -536,10 +524,10 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement try { - Item folder = Whorespace.getItem(getThreadLocalRequest(), item.getId()); + Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), item.getId()); int searchStartIndex = startIndex < serverStartIndex? serverStartIndex : startIndex; - _log.debug("MyLg getFolder searchIndex: "+searchStartIndex+", limit: "+limit); + _log.debug("MyLg getFolder searchIndex: "+searchStartIndex+", limit: "+limit); //TO AVOID SLOW CALL getPATH() String folderPath = item.getPath()!=null && !item.getPath().isEmpty()?item.getPath():folder.getPath(); @@ -550,7 +538,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement _log.debug("MyLg Total item returning is: "+currentListCount); FolderItem hlFolder = (FolderItem) folder; - int folderChildrenCount = Whorespace.getItemChildrenCount(getThreadLocalRequest(), hlFolder.getId()); + int folderChildrenCount = StorageHubServiceUtil.getItemChildrenCount(getThreadLocalRequest(), hlFolder.getId()); _log.debug("MyLg Folder children count is: "+folderChildrenCount); if(currentListCount == limit || folderChildrenCount==0){ @@ -622,7 +610,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement @Override public int getFolderChildrenCount(org.gcube.portlets.widgets.wsexplorer.shared.Item item){ - return Whorespace.getItemChildrenCount(getThreadLocalRequest(), item.getId()); + return StorageHubServiceUtil.getItemChildrenCount(getThreadLocalRequest(), item.getId()); } diff --git a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/Whorespace.java b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/StorageHubServiceUtil.java similarity index 79% rename from src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/Whorespace.java rename to src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/StorageHubServiceUtil.java index 938c0af..f744dd7 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/Whorespace.java +++ b/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/stohub/StorageHubServiceUtil.java @@ -1,6 +1,5 @@ package org.gcube.portlets.widgets.wsexplorer.server.stohub; -import java.util.Collections; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -11,15 +10,15 @@ import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; -import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.items.Item; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; -public class Whorespace { - private static Log _log = LogFactoryUtil.getLog(Whorespace.class); +public class StorageHubServiceUtil { + private static Log _log = LogFactoryUtil.getLog(StorageHubServiceUtil.class); public static final String ACCOUNTING_HL_NODE_NAME = "hl:accounting"; public static Item getRoot(HttpServletRequest request) { @@ -86,6 +85,30 @@ public class Whorespace { return toReturn; } + + public static String getUserACLForFolderId(HttpServletRequest request, String folderId) { + PortalContext pContext = PortalContext.getConfiguration(); + String userName = pContext.getCurrentUser(request).getUsername(); + String scope = pContext.getCurrentScope(request); + String authorizationToken = pContext.getCurrentUserToken(scope, userName); + ScopeProvider.instance.set(scope); + SecurityTokenProvider.instance.set(authorizationToken); + + Item theFolder = getItem(request, folderId); + if (!theFolder.isShared()) { + return "OWNER"; + } else { + ItemManagerClient client = AbstractPlugin.item().build(); + List acls = client.getACL(folderId); + for (ACL acl : acls) { + if (acl.getPricipal().compareTo(userName) == 0) + return acl.getAccessTypes().toString(); + } + } + return "NO PERMISSIONS"; + } + + /** * */