added acl for folder id

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@167821 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Massimiliano Assante 2018-05-29 09:39:17 +00:00
parent fef8b056a3
commit de0f8b49ba
3 changed files with 53 additions and 42 deletions

View File

@ -20,7 +20,7 @@ import org.gcube.common.storagehub.model.items.SharedFolder;
import org.gcube.common.storagehub.model.items.VreFolder; import org.gcube.common.storagehub.model.items.VreFolder;
import org.gcube.portlets.widgets.wsexplorer.client.Util; import org.gcube.portlets.widgets.wsexplorer.client.Util;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; 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.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -92,7 +92,7 @@ public class ItemBuilder {
String itemId = item.getId(); String itemId = item.getId();
ItemManagerClient client = AbstractPlugin.item().build(); ItemManagerClient client = AbstractPlugin.item().build();
List<? extends Item> theChildren = null; List<? extends Item> theChildren = null;
theChildren = client.getChildren(itemId, Whorespace.ACCOUNTING_HL_NODE_NAME); theChildren = client.getChildren(itemId, StorageHubServiceUtil.ACCOUNTING_HL_NODE_NAME);
for (Item child : theChildren) { for (Item child : theChildren) {
String itemPath = workspaceItemPath+"/"+child.getName(); String itemPath = workspaceItemPath+"/"+child.getName();
org.gcube.portlets.widgets.wsexplorer.shared.Item itemChild = getItem(item, child, itemPath, showableTypes, filterCriteria, false, loadGcubeProperties); 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(); String itemId = item.getId();
ItemManagerClient client = AbstractPlugin.item().build(); ItemManagerClient client = AbstractPlugin.item().build();
List<? extends Item> theChildren = null; List<? extends Item> 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) { for (Item child : theChildren) {
String itemPath = workspaceItemPath+"/"+child.getName(); String itemPath = workspaceItemPath+"/"+child.getName();
org.gcube.portlets.widgets.wsexplorer.shared.Item itemChild = getItem(item, child, itemPath, showableTypes, filterCriteria, false, loadGcubeProperties); org.gcube.portlets.widgets.wsexplorer.shared.Item itemChild = getItem(item, child, itemPath, showableTypes, filterCriteria, false, loadGcubeProperties);

View File

@ -13,7 +13,7 @@ import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.common.storagehub.model.items.SharedFolder;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants;
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; 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.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemInterface; import org.gcube.portlets.widgets.wsexplorer.shared.ItemInterface;
@ -54,7 +54,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
SecurityTokenProvider.instance.set(authorizationToken); SecurityTokenProvider.instance.set(authorizationToken);
_log.trace("Start getRoot..."); _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); org.gcube.portlets.widgets.wsexplorer.shared.Item rootItem = ItemBuilder.getItem(null, root, root.getPath(), showableTypes, filterCriteria, true, false);
rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL); rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL);
@ -92,7 +92,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(getThreadLocalRequest());
String authorizationToken = pContext.getCurrentUserToken(scope, userName); String authorizationToken = pContext.getCurrentUserToken(scope, userName);
SecurityTokenProvider.instance.set(authorizationToken); SecurityTokenProvider.instance.set(authorizationToken);
Item folder = Whorespace.getItem(getThreadLocalRequest(), item.getId()); Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), item.getId());
_log.trace("GetFolder - Replying folder"); _log.trace("GetFolder - Replying folder");
//TO AVOID SLOW CALL getPATH() //TO AVOID SLOW CALL getPATH()
@ -140,7 +140,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
switch(category){ switch(category){
case HOME:{ case HOME:{
Item root = Whorespace.getRoot(getThreadLocalRequest()); Item root = StorageHubServiceUtil.getRoot(getThreadLocalRequest());
String fullName = pContext.getCurrentUser(getThreadLocalRequest()).getFullname(); String fullName = pContext.getCurrentUser(getThreadLocalRequest()).getFullname();
if(fullName.indexOf(" ")>0){ if(fullName.indexOf(" ")>0){
fullName = fullName.substring(0, fullName.indexOf(" ")); fullName = fullName.substring(0, fullName.indexOf(" "));
@ -151,8 +151,8 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
break; break;
} }
case VRE_FOLDER:{ case VRE_FOLDER:{
String vreFolderId = Whorespace.getVREFoldersId(getThreadLocalRequest()); String vreFolderId = StorageHubServiceUtil.getVREFoldersId(getThreadLocalRequest());
Item folder = Whorespace.getItem(getThreadLocalRequest(), vreFolderId); Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), vreFolderId);
item = new org.gcube.portlets.widgets.wsexplorer.shared.Item( item = new org.gcube.portlets.widgets.wsexplorer.shared.Item(
null, null,
folder.getId(), folder.getId(),
@ -192,8 +192,8 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
String scope = pContext.getCurrentScope(getThreadLocalRequest()); String scope = pContext.getCurrentScope(getThreadLocalRequest());
String authorizationToken = pContext.getCurrentUserToken(scope, userName); String authorizationToken = pContext.getCurrentUserToken(scope, userName);
SecurityTokenProvider.instance.set(authorizationToken); SecurityTokenProvider.instance.set(authorizationToken);
String vreFolderId = Whorespace.getVREFoldersId(getThreadLocalRequest()); String vreFolderId = StorageHubServiceUtil.getVREFoldersId(getThreadLocalRequest());
Item folder = Whorespace.getItem(getThreadLocalRequest(), vreFolderId); Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), vreFolderId);
org.gcube.portlets.widgets.wsexplorer.shared.Item itemFolder = ItemBuilder.getItem(null, folder, folder.getPath(), showableTypes, filterCriteria, true, false); 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 //OVERRIDING VRE FOLDERS NAME - SET SPECIAL FOLDER /Workspace/MySpecialFolders
@ -240,7 +240,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
throws Exception { throws Exception {
System.out.println("ListParents By Item id "+ itemIdentifier + " name="+itemName); System.out.println("ListParents By Item id "+ itemIdentifier + " name="+itemName);
try { try {
List<? extends Item> parents = Whorespace.getParents(getThreadLocalRequest(), itemIdentifier); List<? extends Item> parents = StorageHubServiceUtil.getParents(getThreadLocalRequest(), itemIdentifier);
ArrayList<org.gcube.portlets.widgets.wsexplorer.shared.Item> toReturn = new ArrayList<>(parents.size()); ArrayList<org.gcube.portlets.widgets.wsexplorer.shared.Item> toReturn = new ArrayList<>(parents.size());
for (Item item : parents) { for (Item item : parents) {
if (item instanceof FolderItem) if (item instanceof FolderItem)
@ -273,7 +273,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
parentLimit = parentLimit!=null?parentLimit:""; parentLimit = parentLimit!=null?parentLimit:"";
try { try {
List<? extends Item> parents = Whorespace.getParents(getThreadLocalRequest(), itemIdentifier); List<? extends Item> parents = StorageHubServiceUtil.getParents(getThreadLocalRequest(), itemIdentifier);
ArrayList<org.gcube.portlets.widgets.wsexplorer.shared.Item> toWorkOn = new ArrayList<>(parents.size()); ArrayList<org.gcube.portlets.widgets.wsexplorer.shared.Item> toWorkOn = new ArrayList<>(parents.size());
for (Item item : parents) { for (Item item : parents) {
if (item instanceof FolderItem) if (item instanceof FolderItem)
@ -281,7 +281,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
} }
Collections.reverse(toWorkOn); Collections.reverse(toWorkOn);
Item folderItem = Whorespace.getItem(getThreadLocalRequest(), itemIdentifier); Item folderItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemIdentifier);
String theClickedFolderName = folderItem.getTitle(); String theClickedFolderName = folderItem.getTitle();
if((theClickedFolderName.compareTo(WorkspaceExplorerConstants.SPECIAL_FOLDERS_NAME) == 0)){ if((theClickedFolderName.compareTo(WorkspaceExplorerConstants.SPECIAL_FOLDERS_NAME) == 0)){
theClickedFolderName = WorkspaceExplorerConstants.VRE_FOLDERS_LABEL; theClickedFolderName = WorkspaceExplorerConstants.VRE_FOLDERS_LABEL;
@ -324,7 +324,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
public Long getSizeByItemId(String itemId) throws Exception { public Long getSizeByItemId(String itemId) throws Exception {
_log.debug("get Size By ItemId "+ itemId); _log.debug("get Size By ItemId "+ itemId);
try { try {
Item wsItem = Whorespace.getItem(getThreadLocalRequest(), itemId); Item wsItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemId);
_log.trace("workspace retrieve item name: "+wsItem.getName()); _log.trace("workspace retrieve item name: "+wsItem.getName());
if((wsItem instanceof FolderItem)) //if is a folder no mime if((wsItem instanceof FolderItem)) //if is a folder no mime
return null; return null;
@ -352,7 +352,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
public String getMimeType(String itemId) throws Exception { public String getMimeType(String itemId) throws Exception {
_log.debug("get MimeType By ItemId "+ itemId); _log.debug("get MimeType By ItemId "+ itemId);
try { try {
Item wsItem = Whorespace.getItem(getThreadLocalRequest(), itemId); Item wsItem = StorageHubServiceUtil.getItem(getThreadLocalRequest(), itemId);
_log.trace("workspace retrieve item name: "+wsItem.getName()); _log.trace("workspace retrieve item name: "+wsItem.getName());
if((wsItem instanceof FolderItem)) //if is a folder no mime if((wsItem instanceof FolderItem)) //if is a folder no mime
return null; return null;
@ -376,24 +376,12 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
*/ */
@Override @Override
public String getUserACLForFolderId(String folderId) throws Exception{ public String getUserACLForFolderId(String folderId) throws Exception{
//TODO: missing implementation on the back-end try {
return "unknown"; return StorageHubServiceUtil.getUserACLForFolderId(getThreadLocalRequest(), folderId);
// try { }catch(Exception e) {
// logger.info("Get user ACL to FOLDER id: "+folderId); e.printStackTrace();
// Item wsItem = Whorespace.getItem(getThreadLocalRequest(), folderId); }
// logger.trace("workspace retrieve item name: "+wsItem.getName()); return "UNKNOWN";
//
// 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);
// }
} }
@ -536,10 +524,10 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
try { try {
Item folder = Whorespace.getItem(getThreadLocalRequest(), item.getId()); Item folder = StorageHubServiceUtil.getItem(getThreadLocalRequest(), item.getId());
int searchStartIndex = startIndex < serverStartIndex? serverStartIndex : startIndex; 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() //TO AVOID SLOW CALL getPATH()
String folderPath = item.getPath()!=null && !item.getPath().isEmpty()?item.getPath():folder.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); _log.debug("MyLg Total item returning is: "+currentListCount);
FolderItem hlFolder = (FolderItem) folder; 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); _log.debug("MyLg Folder children count is: "+folderChildrenCount);
if(currentListCount == limit || folderChildrenCount==0){ if(currentListCount == limit || folderChildrenCount==0){
@ -622,7 +610,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
@Override @Override
public int getFolderChildrenCount(org.gcube.portlets.widgets.wsexplorer.shared.Item item){ public int getFolderChildrenCount(org.gcube.portlets.widgets.wsexplorer.shared.Item item){
return Whorespace.getItemChildrenCount(getThreadLocalRequest(), item.getId()); return StorageHubServiceUtil.getItemChildrenCount(getThreadLocalRequest(), item.getId());
} }

View File

@ -1,6 +1,5 @@
package org.gcube.portlets.widgets.wsexplorer.server.stohub; package org.gcube.portlets.widgets.wsexplorer.server.stohub;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest; 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.plugins.AbstractPlugin;
import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; 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 org.gcube.common.storagehub.model.items.Item;
import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.log.LogFactoryUtil;
public class Whorespace { public class StorageHubServiceUtil {
private static Log _log = LogFactoryUtil.getLog(Whorespace.class); private static Log _log = LogFactoryUtil.getLog(StorageHubServiceUtil.class);
public static final String ACCOUNTING_HL_NODE_NAME = "hl:accounting"; public static final String ACCOUNTING_HL_NODE_NAME = "hl:accounting";
public static Item getRoot(HttpServletRequest request) { public static Item getRoot(HttpServletRequest request) {
@ -86,6 +85,30 @@ public class Whorespace {
return toReturn; 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<ACL> acls = client.getACL(folderId);
for (ACL acl : acls) {
if (acl.getPricipal().compareTo(userName) == 0)
return acl.getAccessTypes().toString();
}
}
return "NO PERMISSIONS";
}
/** /**
* *
*/ */