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.WorkspaceSharedFolder;
|
||||||
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
|
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
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.FolderContainer;
|
||||||
import org.gcube.common.storagehub.client.dsl.ItemContainer;
|
import org.gcube.common.storagehub.client.dsl.ItemContainer;
|
||||||
import org.gcube.common.storagehub.client.dsl.OpenResolver;
|
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.Metadata;
|
||||||
import org.gcube.common.storagehub.model.acls.ACL;
|
import org.gcube.common.storagehub.model.acls.ACL;
|
||||||
import org.gcube.common.storagehub.model.acls.AccessType;
|
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.FolderItem;
|
||||||
|
import org.gcube.common.storagehub.model.items.GCubeItem;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
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.common.storagehub.model.items.TrashItem;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing;
|
import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService;
|
import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsProducer;
|
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 + "]");
|
logger.info("Call getACLsDescriptionForSharedFolderId(): [itemId=" + itemId + "]");
|
||||||
|
|
||||||
if (itemId == null || itemId.isEmpty()) {
|
if (itemId == null || itemId.isEmpty()) {
|
||||||
String error = "Invalid shared folder: [id=" + itemId + "]";
|
String error = "Invalid shared item: [id=" + itemId + "]";
|
||||||
logger.error(error);
|
logger.error(error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
StorageHubClient shc = new StorageHubClient();
|
StorageHubClient shc = new StorageHubClient();
|
||||||
OpenResolver openResolverForItem = shc.open(itemId);
|
OpenResolver openResolverForItem = shc.open(itemId);
|
||||||
FolderContainer folderContainer = openResolverForItem.asFolder();
|
|
||||||
FolderItem folderItem = folderContainer.get();
|
ItemContainer<?> itemContainer = openResolverForItem.asItem();
|
||||||
if (folderItem.isShared()) {
|
Item item = itemContainer.get();
|
||||||
if (folderItem instanceof SharedFolder) {
|
if (item instanceof AbstractFileItem) {
|
||||||
return retrieveACLsDescription(folderContainer);
|
FileContainer fileContainer = openResolverForItem.asFile();
|
||||||
|
AbstractFileItem file = fileContainer.get();
|
||||||
|
if (file.isShared()) {
|
||||||
|
String parentId = file.getParentId();
|
||||||
|
openResolverForItem = shc.open(parentId);
|
||||||
|
return retrieveACLFromFolder(parentId, openResolverForItem);
|
||||||
} else {
|
} else {
|
||||||
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
String error = "This item isn't a shared File: [id=" + itemId + "]";
|
||||||
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
|
logger.error(error);
|
||||||
if (rootSharedFolder instanceof SharedFolder) {
|
return null;
|
||||||
return retrieveACLsDescription(rootSharedFolderContainer);
|
}
|
||||||
|
|
||||||
|
} 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 {
|
} else {
|
||||||
String error = "The root shared folder has a invalid type: RootSharedFolder[id="
|
if (item instanceof TrashItem) {
|
||||||
+ rootSharedFolder.getId() + "]";
|
TrashItem trashItem = (TrashItem) item;
|
||||||
logger.error(error);
|
if (trashItem.isShared()) {
|
||||||
return null;
|
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) {
|
} catch (Exception e) {
|
||||||
logger.error("Error in getACLsDescriptionForSharedFolderId(): " + e.getLocalizedMessage(), e);
|
logger.error("Error in getACLsDescriptionForSharedFolderId(): " + e.getLocalizedMessage(), e);
|
||||||
String error = "Sorry an error occurred when getting ACL rules for selected folder. "
|
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 {
|
private String retrieveACLsDescription(FolderContainer folderContainer) throws Exception {
|
||||||
List<ACL> acls = folderContainer.getAcls();
|
List<ACL> acls = folderContainer.getAcls();
|
||||||
logger.debug("Retrieved acls: " + acls);
|
logger.debug("Retrieved acls: " + acls);
|
||||||
|
@ -1164,8 +1223,9 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return new AllowAccess(itemId, false,
|
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) {
|
} catch (Exception e) {
|
||||||
return new AllowAccess(itemId, false,
|
return new AllowAccess(itemId, false,
|
||||||
|
|
Loading…
Reference in New Issue