ref 17169: Selection of users in the Sharing panel
https://support.d4science.org/issues/17169 Updated Set Adminastrators to support StorageHub calls git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@181502 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
bb814fc3ea
commit
02e83870c3
|
@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
||||||
|
@ -62,7 +63,7 @@ public interface WorkspaceSharingService extends RemoteService {
|
||||||
|
|
||||||
void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception;
|
void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception;
|
||||||
|
|
||||||
void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception;
|
void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType) throws Exception;
|
||||||
|
|
||||||
ReportAssignmentACL validateACLToUser(String folderId, List<String> listLogins, String aclType) throws Exception;
|
ReportAssignmentACL validateACLToUser(String folderId, List<String> listLogins, String aclType) throws Exception;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
||||||
|
@ -61,7 +62,7 @@ public interface WorkspaceSharingServiceAsync {
|
||||||
|
|
||||||
void setACLs(String folderId, List<String> listLogins, String aclType, AsyncCallback<Void> callback);
|
void setACLs(String folderId, List<String> listLogins, String aclType, AsyncCallback<Void> callback);
|
||||||
|
|
||||||
void updateACLForVREbyGroupName(String folderId, String aclType, AsyncCallback<Void> callback);
|
void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType, AsyncCallback<Void> callback);
|
||||||
|
|
||||||
void validateACLToUser(String folderId, List<String> listLogins, String aclType,
|
void validateACLToUser(String folderId, List<String> listLogins, String aclType,
|
||||||
AsyncCallback<ReportAssignmentACL> callback);
|
AsyncCallback<ReportAssignmentACL> callback);
|
||||||
|
|
|
@ -12,15 +12,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
|
|
||||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
||||||
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
||||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
||||||
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.portal.PortalContext;
|
import org.gcube.common.portal.PortalContext;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
|
||||||
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
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;
|
||||||
|
@ -44,6 +36,7 @@ import org.gcube.portlets.widgets.workspacesharingwidget.server.util.PortalConte
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility;
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil;
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil;
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil;
|
||||||
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
|
||||||
|
@ -106,20 +99,23 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
return !WsUtil.isWithinPortal(); // IS NOT INTO PORTAL
|
return !WsUtil.isWithinPortal(); // IS NOT INTO PORTAL
|
||||||
}
|
}
|
||||||
|
|
||||||
private Workspace getWorkspace(HttpServletRequest httpServletRequest)
|
/*
|
||||||
throws org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException,
|
* private Workspace getWorkspace(HttpServletRequest httpServletRequest)
|
||||||
org.gcube.common.homelibrary.home.exceptions.InternalErrorException, HomeNotFoundException {
|
* throws org.gcube.common.homelibrary.home.workspace.exceptions.
|
||||||
|
* WorkspaceFolderNotFoundException,
|
||||||
logger.trace("Get Workspace");
|
* org.gcube.common.homelibrary.home.exceptions.InternalErrorException,
|
||||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
* HomeNotFoundException {
|
||||||
logger.trace("PortalContextInfo: " + info);
|
*
|
||||||
|
* logger.trace("Get Workspace"); PortalContextInfo info =
|
||||||
ScopeProvider.instance.set(info.getCurrentScope());
|
* WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||||
logger.trace("Scope provider instancied");
|
* logger.trace("PortalContextInfo: " + info);
|
||||||
|
*
|
||||||
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
* ScopeProvider.instance.set(info.getCurrentScope());
|
||||||
return workspace;
|
* logger.trace("Scope provider instancied");
|
||||||
}
|
*
|
||||||
|
* Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
||||||
|
* return workspace; }
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
|
@ -185,13 +181,13 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
@Override
|
@Override
|
||||||
public List<UserVRE> getUserVREList() throws Exception {
|
public List<UserVRE> getUserVREList() throws Exception {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (isTestMode()) {
|
if (isTestMode()) {
|
||||||
logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST VREs");
|
logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST VREs");
|
||||||
|
|
||||||
return GWTWorkspaceSharingBuilder.getUserVREsListTest();
|
return GWTWorkspaceSharingBuilder.getUserVREsListTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||||
|
|
||||||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||||
|
@ -249,24 +245,24 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
@Override
|
@Override
|
||||||
public List<InfoContactModel> getListUserSharedByFolderSharedId(String itemId) throws Exception {
|
public List<InfoContactModel> getListUserSharedByFolderSharedId(String itemId) throws Exception {
|
||||||
LocalDateTime startTime = LocalDateTime.now();
|
LocalDateTime startTime = LocalDateTime.now();
|
||||||
logger.info("Call getListUserSharedByFolderSharedId() Start Time: "+startTime.format(formatter));
|
logger.info("Call getListUserSharedByFolderSharedId() Start Time: " + startTime.format(formatter));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]");
|
logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]");
|
||||||
if (itemId == null || itemId.isEmpty()) {
|
if (itemId == null || itemId.isEmpty()) {
|
||||||
logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]");
|
logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]");
|
||||||
throw new Exception("Invalid item id requested: " + itemId);
|
throw new Exception("Invalid item id requested: " + itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
StorageHubClient shc = new StorageHubClient();
|
StorageHubClient shc = new StorageHubClient();
|
||||||
OpenResolver openResolver = shc.open(itemId);
|
OpenResolver openResolver = shc.open(itemId);
|
||||||
FolderContainer folderContainer = openResolver.asFolder();
|
FolderContainer folderContainer = openResolver.asFolder();
|
||||||
FolderItem folder = folderContainer.get();
|
FolderItem folder = folderContainer.get();
|
||||||
|
|
||||||
if (folder.isShared()) {
|
if (folder.isShared()) {
|
||||||
if (folder instanceof SharedFolder) {
|
if (folder instanceof SharedFolder) {
|
||||||
SharedFolder sharedFolder = (SharedFolder) folder;
|
SharedFolder sharedFolder = (SharedFolder) folder;
|
||||||
|
|
||||||
return retrieveUsersListFromSharedFolder(sharedFolder);
|
return retrieveUsersListFromSharedFolder(sharedFolder);
|
||||||
} else {
|
} else {
|
||||||
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
||||||
|
@ -291,11 +287,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
throw new Exception(e.getLocalizedMessage(), e);
|
throw new Exception(e.getLocalizedMessage(), e);
|
||||||
} finally {
|
} finally {
|
||||||
LocalDateTime endTime = LocalDateTime.now();
|
LocalDateTime endTime = LocalDateTime.now();
|
||||||
logger.info("Call getListUserSharedByFolderSharedId() End Time: "+endTime.format(formatter));
|
logger.info("Call getListUserSharedByFolderSharedId() End Time: " + endTime.format(formatter));
|
||||||
|
|
||||||
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
||||||
logger.info("Call getListUserSharedByFolderSharedId() Delay: MILLIS="+diff);
|
logger.info("Call getListUserSharedByFolderSharedId() Delay: MILLIS=" + diff);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,10 +314,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
if (map != null && !map.isEmpty()) {
|
if (map != null && !map.isEmpty()) {
|
||||||
List<InfoContactModel> listShared = new ArrayList<>();
|
List<InfoContactModel> listShared = new ArrayList<>();
|
||||||
List<String> keys = new ArrayList<String>(map.keySet());
|
List<String> keys = new ArrayList<String>(map.keySet());
|
||||||
|
|
||||||
LocalDateTime startTime = LocalDateTime.now();
|
LocalDateTime startTime = LocalDateTime.now();
|
||||||
logger.info("Liferay retrieve users Start Time: "+startTime.format(formatter));
|
logger.info("Liferay retrieve users Start Time: " + startTime.format(formatter));
|
||||||
|
|
||||||
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
|
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
|
||||||
GCubeUser curr;
|
GCubeUser curr;
|
||||||
for (String username : keys) {
|
for (String username : keys) {
|
||||||
|
@ -338,10 +334,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LocalDateTime endTime = LocalDateTime.now();
|
LocalDateTime endTime = LocalDateTime.now();
|
||||||
logger.info("Liferay retrieve users End Time: "+endTime.format(formatter));
|
logger.info("Liferay retrieve users End Time: " + endTime.format(formatter));
|
||||||
|
|
||||||
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
||||||
logger.info("Liferay Delay: MILLIS="+diff);
|
logger.info("Liferay Delay: MILLIS=" + diff);
|
||||||
return listShared;
|
return listShared;
|
||||||
} else {
|
} else {
|
||||||
logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!");
|
logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!");
|
||||||
|
@ -361,17 +357,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public InfoContactModel getOwnerByItemId(String itemId) throws Exception {
|
public InfoContactModel getOwnerByItemId(String itemId) throws Exception {
|
||||||
//TODO
|
|
||||||
LocalDateTime startTime = LocalDateTime.now();
|
LocalDateTime startTime = LocalDateTime.now();
|
||||||
logger.info("Call getOwnerByItemId() Start Time: "+startTime.format(formatter));
|
logger.info("Call getOwnerByItemId() Start Time: " + startTime.format(formatter));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]");
|
logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]");
|
||||||
if (itemId == null || itemId.isEmpty()) {
|
if (itemId == null || itemId.isEmpty()) {
|
||||||
logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId);
|
logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId);
|
||||||
throw new Exception("Invalid request, item id: " + itemId);
|
throw new Exception("Invalid request, item id: " + itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
StorageHubClient shc = new StorageHubClient();
|
StorageHubClient shc = new StorageHubClient();
|
||||||
OpenResolver openResolverForFile = shc.open(itemId);
|
OpenResolver openResolverForFile = shc.open(itemId);
|
||||||
ItemContainer<Item> itemContainer = openResolverForFile.asItem();
|
ItemContainer<Item> itemContainer = openResolverForFile.asItem();
|
||||||
|
@ -382,16 +378,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
if (item.getOwner() != null && !item.getOwner().isEmpty()) {
|
if (item.getOwner() != null && !item.getOwner().isEmpty()) {
|
||||||
try {
|
try {
|
||||||
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
|
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
|
||||||
GCubeUser curr=um.getUserByUsername(item.getOwner());
|
GCubeUser curr = um.getUserByUsername(item.getOwner());
|
||||||
|
|
||||||
if (curr != null) {
|
if (curr != null) {
|
||||||
InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()), curr.getUsername(), curr.getFullname(),
|
InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()),
|
||||||
extractDomainFromEmail(curr.getEmail()), false);
|
curr.getUsername(), curr.getFullname(), extractDomainFromEmail(curr.getEmail()),
|
||||||
logger.debug("Owner found: "+infoContactModel);
|
false);
|
||||||
|
logger.debug("Owner found: " + infoContactModel);
|
||||||
return infoContactModel;
|
return infoContactModel;
|
||||||
}
|
}
|
||||||
} catch(Throwable e){
|
} catch (Throwable e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
logger.debug("Owner not found from user model!");
|
logger.debug("Owner not found from user model!");
|
||||||
return new InfoContactModel(item.getOwner(), item.getOwner(), item.getOwner(), "", false);
|
return new InfoContactModel(item.getOwner(), item.getOwner(), item.getOwner(), "", false);
|
||||||
|
@ -409,11 +406,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
throw new Exception(e.getMessage());
|
throw new Exception(e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
LocalDateTime endTime = LocalDateTime.now();
|
LocalDateTime endTime = LocalDateTime.now();
|
||||||
logger.info("Call getOwnerByItemId() End Time: "+endTime.format(formatter));
|
logger.info("Call getOwnerByItemId() End Time: " + endTime.format(formatter));
|
||||||
|
|
||||||
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
||||||
logger.info("Call getOwnerByItemId() Delay: MILLIS="+diff);
|
logger.info("Call getOwnerByItemId() Delay: MILLIS=" + diff);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -810,7 +807,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
try {
|
try {
|
||||||
logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins"
|
logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins"
|
||||||
+ listContactLogins + "]");
|
+ listContactLogins + "]");
|
||||||
// logger.info("This function is not available in StorageHub!");
|
|
||||||
if (itemId == null || listContactLogins == null || listContactLogins.size() == 0)
|
if (itemId == null || listContactLogins == null || listContactLogins.size() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -818,9 +814,47 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
OpenResolver openResolverForItem = shc.open(itemId);
|
OpenResolver openResolverForItem = shc.open(itemId);
|
||||||
FolderContainer folderContainer = openResolverForItem.asFolder();
|
FolderContainer folderContainer = openResolverForItem.asFolder();
|
||||||
FolderItem folderItem = folderContainer.get();
|
FolderItem folderItem = folderContainer.get();
|
||||||
|
|
||||||
if (folderItem.isShared()) {
|
if (folderItem.isShared()) {
|
||||||
if (folderItem instanceof SharedFolder) {
|
if (folderItem instanceof SharedFolder) {
|
||||||
return addAdminstratorByWorkspace(folderItem.getId(), listContactLogins);
|
logger.debug("Folder type: SharedFolder");
|
||||||
|
String currentUser = getMyLogin();
|
||||||
|
logger.debug("Current User: " + currentUser);
|
||||||
|
|
||||||
|
Set<String> alreadyAdministrators = new HashSet<>();
|
||||||
|
|
||||||
|
List<ACL> acls = folderContainer.getAcls();
|
||||||
|
for (ACL acl : acls) {
|
||||||
|
if (acl.getPricipal().compareTo(currentUser) != 0) {
|
||||||
|
for (AccessType accessType : acl.getAccessTypes()) {
|
||||||
|
if (AccessType.ADMINISTRATOR.compareTo(accessType) == 0) {
|
||||||
|
alreadyAdministrators.add(acl.getPricipal());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Update ACL for add Administrators");
|
||||||
|
for (String user : listContactLogins) {
|
||||||
|
if (currentUser.compareTo(user) != 0) {
|
||||||
|
folderContainer = folderContainer.changeAcls(user, AccessType.ADMINISTRATOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.debug("Update Administrators done");
|
||||||
|
|
||||||
|
if (!alreadyAdministrators.isEmpty()) {
|
||||||
|
alreadyAdministrators.removeAll(listContactLogins);
|
||||||
|
if (!alreadyAdministrators.isEmpty()) {
|
||||||
|
logger.debug("Update to WriteOwner the users: " + alreadyAdministrators);
|
||||||
|
for (String user : alreadyAdministrators) {
|
||||||
|
folderContainer = folderContainer.changeAcls(user, AccessType.WRITE_OWNER);
|
||||||
|
}
|
||||||
|
logger.debug("Update to WriteOwner done");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Administrators Updated");
|
||||||
|
return true;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
String error = "Attention, the set administrators operation can only be done on the root shared folder. "
|
String error = "Attention, the set administrators operation can only be done on the root shared folder. "
|
||||||
|
@ -842,67 +876,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean addAdminstratorByWorkspace(String itemId, List<String> listContactLogins) throws Exception {
|
|
||||||
try {
|
|
||||||
Workspace workspace = getWorkspace(this.getThreadLocalRequest());
|
|
||||||
WorkspaceItem item = workspace.getItem(itemId);
|
|
||||||
logger.info("Adding administator/s to folder: " + itemId);
|
|
||||||
|
|
||||||
if (item != null && item.getType().equals(WorkspaceItemType.SHARED_FOLDER)) {
|
|
||||||
WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) item;
|
|
||||||
|
|
||||||
// retrieving old administrators list
|
|
||||||
// GWTWorkspaceSharingBuilder builder = new
|
|
||||||
// GWTWorkspaceSharingBuilder();
|
|
||||||
// logger.info("Retrieving old administator/s..");
|
|
||||||
// List<InfoContactModel> oldAdmins = builder
|
|
||||||
// .buildGxtInfoContactsFromPortalLogins(sharedFolder.getAdministrators());
|
|
||||||
// logger.info("Retrieving old administator/s are/is:" +
|
|
||||||
// oldAdmins.size());
|
|
||||||
|
|
||||||
logger.info("Setting administators: " + listContactLogins);
|
|
||||||
sharedFolder.setAdmins(listContactLogins);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* logger.info("Converting new administator/s..");
|
|
||||||
* List<InfoContactModel> newAdmins =
|
|
||||||
* builder.buildGxtInfoContactsFromPortalLogins(
|
|
||||||
* listContactLogins); NotificationsProducer np =
|
|
||||||
* getNotificationProducer();
|
|
||||||
*
|
|
||||||
* logger.
|
|
||||||
* info("Sending notifications downgrade/upgrade administator/s.."
|
|
||||||
* ); DifferenceBetweenInfoContactModel diff1 = new
|
|
||||||
* DifferenceBetweenInfoContactModel(oldAdmins, newAdmins);
|
|
||||||
* List<InfoContactModel> contactsDowngrade =
|
|
||||||
* diff1.getDifferentsContacts();
|
|
||||||
*
|
|
||||||
* for (InfoContactModel infoContactModel : contactsDowngrade) {
|
|
||||||
* np.notifyAdministratorDowngrade(infoContactModel,
|
|
||||||
* sharedFolder); }
|
|
||||||
*
|
|
||||||
* DifferenceBetweenInfoContactModel diff2 = new
|
|
||||||
* DifferenceBetweenInfoContactModel(newAdmins, oldAdmins);
|
|
||||||
* List<InfoContactModel> contactsUpgrade =
|
|
||||||
* diff2.getDifferentsContacts();
|
|
||||||
*
|
|
||||||
* for (InfoContactModel infoContactModel : contactsUpgrade) {
|
|
||||||
* np.notifyAdministratorUpgrade(infoContactModel,
|
|
||||||
* sharedFolder); }
|
|
||||||
*/
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} else
|
|
||||||
throw new Exception("The item is null or not instanceof " + WorkspaceItemType.SHARED_FOLDER);
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error("Error in addAdminstratorByWorkspace() : " + e.getLocalizedMessage(), e);
|
|
||||||
throw new Exception("Error in set administrators operation for this item.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception {
|
private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception {
|
||||||
if (folderContainer == null) {
|
if (folderContainer == null) {
|
||||||
logger.debug("FolderContainer is null");
|
logger.debug("FolderContainer is null");
|
||||||
|
@ -1730,7 +1703,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update acl for vr eby group name.
|
* Update acl for vre by group name.
|
||||||
*
|
*
|
||||||
* @param folderId
|
* @param folderId
|
||||||
* the folder id
|
* the folder id
|
||||||
|
@ -1740,37 +1713,86 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
* the exception
|
* the exception
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception {
|
public void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType) throws Exception {
|
||||||
try {
|
try {
|
||||||
|
// TODO
|
||||||
|
logger.debug("UpdateACLForVREbyGroupName()");
|
||||||
|
logger.debug("folderId: " + folderId);
|
||||||
|
logger.debug("ACL type is: " + aclType);
|
||||||
|
|
||||||
if (folderId == null)
|
if (folderId == null || folderId.isEmpty()) {
|
||||||
throw new Exception("Folder id is null");
|
throw new Exception("Folder id is null");
|
||||||
|
}
|
||||||
|
|
||||||
logger.trace("Updating ACL to VRE FOLDER id: " + folderId);
|
if (aclType == null) {
|
||||||
logger.trace("ACL type is: " + aclType);
|
throw new Exception("ACLType parameter is invalid");
|
||||||
logger.trace("Get Workspace");
|
}
|
||||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
|
||||||
|
|
||||||
logger.trace("PortalContextInfo: " + info);
|
StorageHubClient shc = new StorageHubClient();
|
||||||
|
OpenResolver openResolverForItem = shc.open(folderId);
|
||||||
|
FolderContainer folderContainer = openResolverForItem.asFolder();
|
||||||
|
FolderItem folderItem = folderContainer.get();
|
||||||
|
|
||||||
ScopeProvider.instance.set(info.getCurrentScope());
|
if (folderItem.isShared()) {
|
||||||
logger.trace("Scope provider set: " + info.getCurrentScope());
|
if (folderItem instanceof SharedFolder) {
|
||||||
|
logger.debug("Folder type: SharedFolder");
|
||||||
|
SharedFolder sharedFolder = (SharedFolder) folderItem;
|
||||||
|
if (sharedFolder.isVreFolder()) {
|
||||||
|
logger.debug("The folder is a VreFolder");
|
||||||
|
|
||||||
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
String currentUser = getMyLogin();
|
||||||
WorkspaceItem wsItem = workspace.getItem(folderId);
|
logger.debug("Current User: " + currentUser);
|
||||||
|
|
||||||
|
AccessType selectedAccessType = null;
|
||||||
|
|
||||||
|
switch (aclType) {
|
||||||
|
case ADMINISTRATOR:
|
||||||
|
selectedAccessType = AccessType.ADMINISTRATOR;
|
||||||
|
break;
|
||||||
|
case READ_ONLY:
|
||||||
|
selectedAccessType = AccessType.READ_ONLY;
|
||||||
|
break;
|
||||||
|
case WRITE_ALL:
|
||||||
|
selectedAccessType = AccessType.WRITE_ALL;
|
||||||
|
break;
|
||||||
|
case WRITE_OWNER:
|
||||||
|
selectedAccessType = AccessType.WRITE_OWNER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedAccessType == null) {
|
||||||
|
throw new Exception("ACLType parameter is invalid");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ACL> acls = folderContainer.getAcls();
|
||||||
|
for (ACL acl : acls) {
|
||||||
|
if (acl.getPricipal().compareTo(currentUser) != 0) {
|
||||||
|
folderContainer = folderContainer.changeAcls(acl.getPricipal(), selectedAccessType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
String error = "Attention, the operation can only be done on the VRE folder. "
|
||||||
|
+ "Please, select the VRE folder if you want to set the ACL.";
|
||||||
|
logger.error(error);
|
||||||
|
throw new Exception(error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String error = "Attention, the operation can only be done on the root VRE folder. "
|
||||||
|
+ "Please, select the root VRE folder if you want to set the ACL.";
|
||||||
|
logger.error(error);
|
||||||
|
throw new Exception(error);
|
||||||
|
|
||||||
if (wsItem.isShared() && wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)) {
|
|
||||||
WorkspaceSharedFolder ite = (WorkspaceSharedFolder) wsItem;
|
|
||||||
// PATCH TODO TEMPORARY SOLUTION
|
|
||||||
if (ite.isVreFolder()) {
|
|
||||||
List<String> groupName = new ArrayList<String>();
|
|
||||||
groupName.add(wsItem.getName());
|
|
||||||
ite.setACL(groupName, ACLType.valueOf(aclType));
|
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
throw new Exception("Source item is not shared or shared folder");
|
logger.error("The item requested is not a valid shared folder : [itemId=" + folderId + "]");
|
||||||
|
throw new Exception("The item requested is not a valid shared folder. Impossible set the ACL.");
|
||||||
|
}
|
||||||
|
|
||||||
logger.trace("Updating ACL completed, retuning");
|
logger.debug("ACL updated");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Error in set ACLs", e);
|
logger.error("Error in set ACLs", e);
|
||||||
String error = "Error updating the permissions. " + e.getMessage();
|
String error = "Error updating the permissions. " + e.getMessage();
|
||||||
|
|
Loading…
Reference in New Issue