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.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<? 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) {
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<? 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) {
String itemPath = workspaceItemPath+"/"+child.getName();
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.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<? 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());
for (Item item : parents) {
if (item instanceof FolderItem)
@ -273,7 +273,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
parentLimit = parentLimit!=null?parentLimit:"";
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());
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());
}

View File

@ -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<ACL> acls = client.getACL(folderId);
for (ACL acl : acls) {
if (acl.getPricipal().compareTo(userName) == 0)
return acl.getAccessTypes().toString();
}
}
return "NO PERMISSIONS";
}
/**
*
*/