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:
parent
258abab472
commit
4f87e69c39
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue