Fixed Get Info for shared Folder

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@179337 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2019-05-10 13:58:07 +00:00
parent 258abab472
commit 4f87e69c39
1 changed files with 81 additions and 21 deletions

View File

@ -16,6 +16,7 @@ import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.client.dsl.ItemContainer;
import org.gcube.common.storagehub.client.dsl.OpenResolver;
@ -23,9 +24,13 @@ import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.Metadata;
import org.gcube.common.storagehub.model.acls.ACL;
import org.gcube.common.storagehub.model.acls.AccessType;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.common.storagehub.model.items.AbstractFileItem;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.GCubeItem;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.storagehub.model.items.SharedFolder;
import org.gcube.common.storagehub.model.items.TrashItem;
import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing;
import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService;
import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsProducer;
@ -846,35 +851,63 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
logger.info("Call getACLsDescriptionForSharedFolderId(): [itemId=" + itemId + "]");
if (itemId == null || itemId.isEmpty()) {
String error = "Invalid shared folder: [id=" + itemId + "]";
String error = "Invalid shared item: [id=" + itemId + "]";
logger.error(error);
return null;
}
StorageHubClient shc = new StorageHubClient();
OpenResolver openResolverForItem = shc.open(itemId);
FolderContainer folderContainer = openResolverForItem.asFolder();
FolderItem folderItem = folderContainer.get();
if (folderItem.isShared()) {
if (folderItem instanceof SharedFolder) {
return retrieveACLsDescription(folderContainer);
ItemContainer<?> itemContainer = openResolverForItem.asItem();
Item item = itemContainer.get();
if (item instanceof AbstractFileItem) {
FileContainer fileContainer = openResolverForItem.asFile();
AbstractFileItem file = fileContainer.get();
if (file.isShared()) {
String parentId = file.getParentId();
openResolverForItem = shc.open(parentId);
return retrieveACLFromFolder(parentId, openResolverForItem);
} else {
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
if (rootSharedFolder instanceof SharedFolder) {
return retrieveACLsDescription(rootSharedFolderContainer);
String error = "This item isn't a shared File: [id=" + itemId + "]";
logger.error(error);
return null;
}
} else {
if (item instanceof FolderItem) {
return retrieveACLFromFolder(itemId, openResolverForItem);
} else {
if (item instanceof GCubeItem) {
GCubeItem gcubeItem = (GCubeItem) item;
if (gcubeItem.isShared()) {
String parentId = gcubeItem.getParentId();
openResolverForItem = shc.open(parentId);
return retrieveACLFromFolder(parentId, openResolverForItem);
} else {
String error = "This item isn't a shared GCubeItem: [id=" + itemId + "]";
logger.error(error);
return null;
}
} else {
String error = "The root shared folder has a invalid type: RootSharedFolder[id="
+ rootSharedFolder.getId() + "]";
logger.error(error);
return null;
if (item instanceof TrashItem) {
TrashItem trashItem = (TrashItem) item;
if (trashItem.isShared()) {
String parentId = trashItem.getParentId();
openResolverForItem = shc.open(parentId);
return retrieveACLFromFolder(parentId, openResolverForItem);
} else {
String error = "This item isn't a shared GCubeItem: [id=" + itemId + "]";
logger.error(error);
return null;
}
} else {
String error = "Unknows type of item: [id=" + itemId + "]";
logger.error(error);
return null;
}
}
}
} else {
String error = "This item isn't a valid shared folder: [id=" + itemId + "]";
logger.error(error);
return null;
}
} catch (Exception e) {
logger.error("Error in getACLsDescriptionForSharedFolderId(): " + e.getLocalizedMessage(), e);
String error = "Sorry an error occurred when getting ACL rules for selected folder. "
@ -883,6 +916,32 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
}
}
private String retrieveACLFromFolder(String itemId, OpenResolver openResolverForItem)
throws Exception, StorageHubException {
FolderContainer folderContainer = openResolverForItem.asFolder();
FolderItem folderItem = folderContainer.get();
if (folderItem.isShared()) {
if (folderItem instanceof SharedFolder) {
return retrieveACLsDescription(folderContainer);
} else {
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
if (rootSharedFolder instanceof SharedFolder) {
return retrieveACLsDescription(rootSharedFolderContainer);
} else {
String error = "The root shared folder has a invalid type: RootSharedFolder[id="
+ rootSharedFolder.getId() + "]";
logger.error(error);
return null;
}
}
} else {
String error = "This item isn't a shared Folder: [id=" + itemId + "]";
logger.error(error);
return null;
}
}
private String retrieveACLsDescription(FolderContainer folderContainer) throws Exception {
List<ACL> acls = folderContainer.getAcls();
logger.debug("Retrieved acls: " + acls);
@ -1164,8 +1223,9 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
}
} else {
return new AllowAccess(itemId, false,
"You have not permission to get Folder Link, you must be owner or administrator to the folder", "Permission not found");
"You have not permission to get Folder Link, you must be owner or administrator to the folder",
"Permission not found");
}
} catch (Exception e) {
return new AllowAccess(itemId, false,