2014-02-25 14:28:30 +01:00
|
|
|
package org.gcube.portlets.widgets.workspacesharingwidget.server;
|
|
|
|
|
2014-02-25 15:58:42 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
2014-06-23 12:27:21 +02:00
|
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
|
|
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
2014-02-28 12:30:44 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItemType;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
|
2014-03-03 16:37:03 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
2014-03-03 16:37:03 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException;
|
2014-06-23 12:27:21 +02:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup;
|
2014-06-23 15:04:48 +02:00
|
|
|
import org.gcube.common.portal.PortalContext;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing;
|
2014-02-25 14:28:30 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsProducer;
|
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsUtil;
|
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtilFilter;
|
2014-03-03 16:37:03 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil;
|
2014-03-03 19:17:26 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
|
2014-02-28 12:30:44 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel;
|
2014-03-03 16:37:03 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.SessionExpiredException;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL;
|
2014-06-23 15:04:48 +02:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VO;
|
2014-06-26 15:06:10 +02:00
|
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VRE;
|
2014-02-25 15:58:42 +01:00
|
|
|
import org.gcube.vomanagement.usermanagement.GroupManager;
|
|
|
|
import org.gcube.vomanagement.usermanagement.UserManager;
|
|
|
|
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager;
|
|
|
|
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager;
|
2014-03-03 13:03:34 +01:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
2014-02-25 14:28:30 +01:00
|
|
|
|
|
|
|
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The server side implementation of the RPC service.
|
|
|
|
*/
|
|
|
|
@SuppressWarnings("serial")
|
|
|
|
public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|
|
|
WorkspaceSharingService {
|
|
|
|
|
2014-06-26 17:44:22 +02:00
|
|
|
protected static Logger logger = LoggerFactory.getLogger(WorkspaceSharingServiceImpl.class);
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
protected GWTWorkspaceSharingBuilder getGWTWorkspaceBuilder()
|
|
|
|
{
|
|
|
|
return WsUtil.getGWTWorkspaceSharingBuilder(this.getThreadLocalRequest().getSession());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Workspace getWorkspace() throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException
|
|
|
|
{
|
|
|
|
return WsUtil.getWorkspace(this.getThreadLocalRequest().getSession());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected NotificationsProducer getNotificationProducer(){
|
|
|
|
|
|
|
|
return WsUtil.getNotificationProducer(WsUtil.getAslSession(this.getThreadLocalRequest().getSession()));
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ScopeUtilFilter getScopeUtilFilter(){
|
|
|
|
|
|
|
|
return WsUtil.getScopeUtilFilter(this.getThreadLocalRequest().getSession());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected boolean isTestMode(){
|
|
|
|
return WsUtil.withoutPortal;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-06-23 12:27:21 +02:00
|
|
|
public List<InfoContactModel> getAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal) throws Exception {
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
try {
|
2014-06-23 15:04:48 +02:00
|
|
|
ASLSession aslSession = WsUtil.getAslSession(this.getThreadLocalRequest().getSession()); //THIS FORCE THE SESSION CREATION
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("Get all contacts");
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
// WorkspaceItem parent = workspace.getItem(parentFileModel.getIdentifier()); //get item from workspace
|
2014-03-04 15:07:29 +01:00
|
|
|
// workspace.getAllScope();
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
|
|
|
|
if(isTestMode()){
|
2014-06-26 15:06:10 +02:00
|
|
|
logger.warn("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST USERS AND GROUPS");
|
2014-02-25 15:58:42 +01:00
|
|
|
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
|
|
|
|
// //TEST USERS
|
2014-03-04 12:12:03 +01:00
|
|
|
listContactsModel.add(new InfoContactModel("federico.defaveri", "federico.defaveri", "Federico de Faveri", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("antonio.gioia", "antonio.gioia", "Antonio Gioia", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("pasquale.pagano", "pasquale.pagano", "Pasquale Pagano", false));
|
2014-03-03 14:46:05 +01:00
|
|
|
// listContactsModel.add(new InfoContactModel(WsUtil.TEST_USER, WsUtil.TEST_USER, WsUtil.TEST_USER_FULL_NAME));
|
2014-03-04 12:12:03 +01:00
|
|
|
listContactsModel.add(new InfoContactModel("francesco.mangiacrapa", "francesco.mangiacrapa", "Francesco Mangiacrapa", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("massimiliano.assante", "massimiliano.assante", "Massimiliano Assante", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("valentina.marioli", "valentina.marioli", "Valentina Marioli", false));
|
|
|
|
listContactsModel.add(new InfoContactModel("leonardo.candela", "leonardo.candela", "Leonardo Candela", false));
|
2014-06-26 15:06:10 +02:00
|
|
|
|
|
|
|
listContactsModel.add(new InfoContactModel("devVRE", "devVRE", "devVRE", true));
|
|
|
|
|
|
|
|
// listContactsModel.addAll(getFakeGroups());
|
2014-02-25 15:58:42 +01:00
|
|
|
return listContactsModel;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
UserManager userManag = new LiferayUserManager();
|
|
|
|
GroupManager gm = new LiferayGroupManager();
|
|
|
|
String groupId = gm.getRootVO().getGroupId();
|
2014-06-23 15:04:48 +02:00
|
|
|
|
2014-06-23 12:27:21 +02:00
|
|
|
logger.trace("Liferay User Manager getting list users by group: "+groupId);
|
|
|
|
List<InfoContactModel> listContactsModel = builder.buildGXTListContactsModelFromUserModel(userManag.listUsersByGroup(groupId));
|
|
|
|
|
|
|
|
if(readGroupsFromHL){
|
|
|
|
logger.info("Reading group names from HL..");
|
|
|
|
org.gcube.common.homelibrary.home.workspace.usermanager.UserManager hlUserManager = HomeLibrary.getHomeManagerFactory().getUserManager();
|
|
|
|
logger.trace("Home Library User Manager getting list Gcube Group");
|
|
|
|
List<GCubeGroup> groups = hlUserManager.getGroups();
|
|
|
|
if(groups!=null){
|
2014-06-23 15:04:48 +02:00
|
|
|
logger.info("Read group names from HL, return "+groups.size()+" groups, converting");
|
2014-06-23 12:27:21 +02:00
|
|
|
listContactsModel.addAll(builder.buildGXTListContactsModelFromGcubeGroup(groups));
|
|
|
|
}else
|
|
|
|
logger.warn("Read group names from HL, return list null, skipping");
|
|
|
|
}
|
|
|
|
|
|
|
|
if(readGroupsFromPortal){
|
2014-06-23 15:04:48 +02:00
|
|
|
logger.info("Reading group names as scopes from Infrastructure..");
|
|
|
|
|
|
|
|
PortalContext context = PortalContext.getConfiguration();
|
|
|
|
logger.info("context.getInfrastructureName(): "+context.getInfrastructureName());
|
2014-06-26 17:44:22 +02:00
|
|
|
logger.info("aslSession.getGroupName(): "+ aslSession.getGroupName());
|
2014-06-26 17:50:14 +02:00
|
|
|
List<VO> lsVOs = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), aslSession.getGroupName());
|
2014-06-26 18:27:00 +02:00
|
|
|
String vrePath = ConstantsSharing.PATH_SEPARATOR+context.getInfrastructureName() + ConstantsSharing.PATH_SEPARATOR + aslSession.getGroupName() + ConstantsSharing.PATH_SEPARATOR;
|
|
|
|
listContactsModel.addAll(builder.buildGXTListContactsModelFromVOs(lsVOs, vrePath));
|
2014-06-23 12:27:21 +02:00
|
|
|
}
|
|
|
|
|
2014-06-26 15:06:10 +02:00
|
|
|
logger.info("Get all contacts returning a list having size: "+listContactsModel.size());
|
2014-06-23 12:27:21 +02:00
|
|
|
return listContactsModel;
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error in server get all contacts ", e);
|
|
|
|
// return new ArrayList<InfoContactModel>();
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public List<InfoContactModel> getListUserSharedByFolderSharedId(String folderSharedId) throws Exception{
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("getListUserSharedByFolderSharedId "+ folderSharedId);
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
try {
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(folderSharedId);
|
|
|
|
|
|
|
|
if(NotificationsUtil.isASharedFolder(wsItem)){
|
|
|
|
|
|
|
|
WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) wsItem;
|
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
|
|
|
|
List<String> listPortalLogin = wsFolder.getUsers();
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("getListUserSharedByFolderSharedId return "+ listPortalLogin.size() + " user");
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
if(isTestMode())
|
|
|
|
return builder.buildGxtInfoContactFromPortalLoginTestMode(listPortalLogin);
|
|
|
|
|
|
|
|
return builder.buildGxtInfoContactsFromPortalLogins(listPortalLogin);
|
|
|
|
|
|
|
|
}
|
|
|
|
else{
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER);
|
2014-02-25 15:58:42 +01:00
|
|
|
|
|
|
|
//DEBUG
|
|
|
|
//System.out.println("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER);
|
|
|
|
}
|
|
|
|
return new ArrayList<InfoContactModel>();
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error in getListUserSharedByItemId ", e);
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public InfoContactModel getOwnerByItemId(String itemId) throws Exception {
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("get Owner By ItemId "+ itemId);
|
2014-02-25 15:58:42 +01:00
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(itemId);
|
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
|
|
|
|
return builder.buildGXTInfoContactModel(wsItem.getOwner());
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error in getOwnerByItemId ", e);
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public List<WorkspaceACL> getACLs() throws Exception{
|
|
|
|
try {
|
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
return builder.getWorkspaceACLFromACLs(Arrays.asList(ACLType.values()));
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error in server get ACLs", e);
|
|
|
|
String error = ConstantsSharing.SERVER_ERROR +" get ACL rules. "+e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getMyLogin(){
|
|
|
|
ASLSession asl = WsUtil.getAslSession(this.getThreadLocalRequest().getSession());
|
|
|
|
return asl.getUsername();
|
|
|
|
}
|
2014-02-28 12:30:44 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public FileModel getFileModelByWorkpaceItemId(String itemId) throws Exception {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
// System.out.println("Get file model by itemId: "+itemId);
|
|
|
|
|
2014-02-28 12:30:44 +01:00
|
|
|
if(itemId == null || itemId.isEmpty())
|
|
|
|
throw new Exception("Identifier is null or empty");
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("Get file model by itemId: "+itemId);
|
2014-02-28 12:30:44 +01:00
|
|
|
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(itemId);
|
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
|
|
|
|
// Long startTime = System.currentTimeMillis();
|
|
|
|
//
|
|
|
|
// Long endTime = System.currentTimeMillis() - startTime;
|
|
|
|
// String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
|
|
|
|
// logger.debug("get child for Grid by id returning element in " + time);
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("Getting folder parent");
|
2014-02-28 12:30:44 +01:00
|
|
|
|
|
|
|
WorkspaceFolder folderParent = null;
|
|
|
|
if(wsItem!=null)
|
|
|
|
folderParent = wsItem.getParent(); //BUILD PARENT
|
|
|
|
else
|
|
|
|
throw new Exception("Workspace item not found");
|
|
|
|
|
2014-03-03 13:03:34 +01:00
|
|
|
|
2014-02-28 12:30:44 +01:00
|
|
|
FileModel parent = null;
|
|
|
|
if(folderParent!=null){
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("Folder parent has id: "+folderParent.getId() + " and name: "+folderParent.getName());
|
2014-02-28 12:30:44 +01:00
|
|
|
parent = builder.buildGXTFileModelItem(folderParent, null);
|
|
|
|
}
|
|
|
|
else
|
2014-03-03 13:03:34 +01:00
|
|
|
logger.info("Folder parent for item: "+wsItem.getId() +" is null");
|
2014-02-28 12:30:44 +01:00
|
|
|
|
|
|
|
//BUILD ITEM
|
|
|
|
return builder.buildGXTFileModelItem(wsItem, parent);
|
|
|
|
} catch (Exception e) {
|
2014-02-28 16:00:29 +01:00
|
|
|
logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e);
|
2014-02-28 12:30:44 +01:00
|
|
|
String error = ConstantsSharing.SERVER_ERROR + " retrieving the item from workspace, "+e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
}
|
|
|
|
}
|
2014-03-03 16:37:03 +01:00
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#isSessionExpired()
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public boolean isSessionExpired() throws Exception {
|
|
|
|
return WsUtil.isSessionExpired(this.getThreadLocalRequest().getSession());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// DEBUG
|
|
|
|
private void printContacts(List<InfoContactModel> listContacts) {
|
|
|
|
|
|
|
|
boolean testMode = isTestMode();
|
|
|
|
if (testMode)
|
|
|
|
System.out.println("Contacts: ");
|
|
|
|
else
|
|
|
|
logger.debug("Contacts:");
|
|
|
|
|
|
|
|
for (InfoContactModel infoContactModel : listContacts) {
|
|
|
|
if (testMode)
|
|
|
|
System.out.println("User: " + infoContactModel);
|
|
|
|
else
|
|
|
|
logger.debug("User: " + infoContactModel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean shareFolder(FileModel folder, List<InfoContactModel> listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception {
|
|
|
|
|
|
|
|
if(isSessionExpired())
|
|
|
|
throw new SessionExpiredException();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
|
|
|
|
logger.info("sharing item id: "+ folder.getIdentifier()
|
|
|
|
+ " name: "+ folder.getName()
|
|
|
|
// + " parent name: " + folder.getParentFileModel().getName()
|
|
|
|
+ " listContacts size: " + listContacts.size());
|
|
|
|
|
|
|
|
// //DEBUG
|
|
|
|
//System.out.println("shareFolder "+ folder.getIdentifier() + " name: "+ folder.getName() + " parent name: " + folder.getParentFileModel().getName() + " listContacts size: " + listContacts.size());
|
|
|
|
|
|
|
|
// for (InfoContactModel infoContactModel : listContacts) {
|
|
|
|
// System.out.println("share with "+ infoContactModel.getLogin());
|
|
|
|
// }
|
|
|
|
|
|
|
|
printContacts(listContacts);
|
|
|
|
|
|
|
|
List<String> listLogin = UserUtil.getListLoginByInfoContactModel(listContacts);
|
|
|
|
|
|
|
|
WorkspaceSharedFolder sharedFolder = null;
|
|
|
|
|
|
|
|
List<InfoContactModel> listSharedContact = null;
|
|
|
|
|
|
|
|
boolean sourceFolderIsShared = folder.isShared();
|
|
|
|
|
|
|
|
if(sourceFolderIsShared){ //if source folder is already share... retrieve old list of sharing to notify
|
|
|
|
listSharedContact = getListUserSharedByFolderSharedId(folder.getIdentifier());
|
|
|
|
}
|
|
|
|
|
|
|
|
if(listLogin.size()>0){
|
|
|
|
|
|
|
|
if(!isNewFolder){
|
|
|
|
sharedFolder = workspace.shareFolder(listLogin, folder.getIdentifier());
|
|
|
|
sharedFolder.setDescription(folder.getDescription()); //SET NEW DESCRIPTION
|
|
|
|
}
|
|
|
|
else
|
|
|
|
sharedFolder = workspace.createSharedFolder(folder.getName(), folder.getDescription(), listLogin, folder.getParentFileModel().getIdentifier());
|
|
|
|
}
|
|
|
|
|
|
|
|
boolean created = sharedFolder==null?false:true;
|
|
|
|
|
|
|
|
if(acl!=null)
|
|
|
|
setACLs(sharedFolder.getId(), listLogin, acl.getId().toString());
|
|
|
|
|
|
|
|
if(created){
|
|
|
|
NotificationsProducer np = getNotificationProducer();
|
2014-06-23 17:02:57 +02:00
|
|
|
if(!sourceFolderIsShared) {//if source folder is not already shared
|
|
|
|
|
|
|
|
//TODO ADD NOTIFICATION
|
|
|
|
// np.notifyFolderSharing(listContacts, sharedFolder);
|
|
|
|
|
|
|
|
}else{
|
2014-03-03 16:37:03 +01:00
|
|
|
/*System.out.println("SHARED CONTACS: ");
|
|
|
|
printContacts(listSharedContact);
|
|
|
|
System.out.println("NEW CONTACS: ");
|
|
|
|
printContacts(listContacts);*/
|
2014-06-23 17:02:57 +02:00
|
|
|
|
|
|
|
//TODO ADD NOTIFICATION
|
|
|
|
// np.notifyAddedUsersToSharing(listSharedContact, listContacts, sharedFolder);
|
2014-03-03 16:37:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return created;
|
|
|
|
|
|
|
|
} catch (InsufficientPrivilegesException e) {
|
|
|
|
logger.error("Error in shareFolder ", e);
|
|
|
|
String error = "An error occurred on creating shared folder. "+ e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
|
|
|
|
} catch (ItemAlreadyExistException e) {
|
|
|
|
logger.error("Error in shareFolder ", e);
|
|
|
|
String error = "An error occurred on creating shared folder. "+ e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
|
|
|
|
} catch (WrongDestinationException e) {
|
|
|
|
logger.error("Error in shareFolder ", e);
|
|
|
|
String error = "An error occurred on creating shared folder. "+ e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error in shareFolder ", e);
|
|
|
|
e.printStackTrace();
|
|
|
|
String error = ConstantsSharing.SERVER_ERROR+" sharing item.";
|
|
|
|
throw new Exception(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception{
|
|
|
|
try {
|
|
|
|
|
|
|
|
if(folderId == null)
|
|
|
|
throw new Exception("Folder id is null");
|
|
|
|
|
|
|
|
if(listLogins==null || listLogins.size()==0)
|
|
|
|
throw new Exception("List Logins is null or empty");
|
|
|
|
|
|
|
|
logger.info("Setting ACL for folder id: "+folderId);
|
|
|
|
logger.info("ACL type is: "+aclType);
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(folderId);
|
|
|
|
|
|
|
|
if(wsItem.isShared() && (wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER))){
|
|
|
|
WorkspaceSharedFolder ite = (WorkspaceSharedFolder) workspace.getItemByPath(wsItem.getPath());
|
|
|
|
ite.setACL(listLogins, ACLType.valueOf(aclType));
|
|
|
|
}else
|
|
|
|
throw new Exception("Source item is not shared or shared folder");
|
|
|
|
|
|
|
|
logger.info("Setting ACL completed, retuning");
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.info("Error in set ACLs", e);
|
|
|
|
String error = ConstantsSharing.SERVER_ERROR +" setting permissions. "+e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
}
|
|
|
|
}
|
2014-02-25 15:58:42 +01:00
|
|
|
|
2014-03-03 19:17:26 +01:00
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getInfoContactModelsFromCredential(java.util.List)
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public List<InfoContactModel> getInfoContactModelsFromCredential(List<CredentialModel> listAlreadySharedContact) throws Exception {
|
|
|
|
|
|
|
|
if(listAlreadySharedContact==null || listAlreadySharedContact.size()==0)
|
|
|
|
throw new Exception("Credentials list is null or empty");
|
|
|
|
|
|
|
|
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
List<InfoContactModel> listContacts = new ArrayList<InfoContactModel>(listAlreadySharedContact.size());
|
|
|
|
for (CredentialModel credentialModel : listAlreadySharedContact) {
|
|
|
|
|
|
|
|
if(!credentialModel.isGroup()){
|
|
|
|
InfoContactModel contact = builder.buildGxtInfoContactFromPortalLogin(credentialModel.getLogin());
|
|
|
|
contact.setReferenceCredential(credentialModel);
|
|
|
|
listContacts.add(contact);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return listContacts;
|
|
|
|
}
|
2014-06-26 15:06:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* DEBUG
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private List<InfoContactModel> getFakeGroups(){
|
|
|
|
|
|
|
|
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
|
|
|
|
|
|
|
|
PortalContext context = PortalContext.getConfiguration();
|
|
|
|
System.out.println("context.getInfrastructureName(): "+context.getInfrastructureName());
|
|
|
|
// System.out.println("context.getVOsAsString(): "+context.getVOsAsString());
|
|
|
|
List<VO> vos = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), "devsec");
|
|
|
|
|
|
|
|
for (VO vo : vos) {
|
|
|
|
System.out.println("vo name "+vo.getName());
|
|
|
|
|
|
|
|
for (VRE vre : vo.getVres()) {
|
|
|
|
System.out.println("vre name "+vre.getName());
|
|
|
|
listContactsModel.add(new InfoContactModel(vre.getName(), vre.getName(), vre.getName(), true));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return listContactsModel;
|
|
|
|
}
|
2014-03-03 19:17:26 +01:00
|
|
|
|
2014-02-25 14:28:30 +01:00
|
|
|
|
2014-06-23 15:04:48 +02:00
|
|
|
public static void main(String[] args) {
|
|
|
|
|
2014-06-26 15:06:10 +02:00
|
|
|
WorkspaceSharingServiceImpl impl = new WorkspaceSharingServiceImpl();
|
2014-06-23 15:04:48 +02:00
|
|
|
|
2014-06-26 17:44:22 +02:00
|
|
|
PortalContext context = PortalContext.getConfiguration();
|
|
|
|
|
2014-06-23 15:04:48 +02:00
|
|
|
try {
|
2014-06-26 18:27:00 +02:00
|
|
|
|
|
|
|
String nameVO = "devsec";
|
|
|
|
String vrePath = ConstantsSharing.PATH_SEPARATOR+context.getInfrastructureName() + ConstantsSharing.PATH_SEPARATOR + nameVO + ConstantsSharing.PATH_SEPARATOR;
|
|
|
|
|
|
|
|
List<VO> lsVOs = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), nameVO);
|
|
|
|
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
|
|
|
List<InfoContactModel> groups = builder.buildGXTListContactsModelFromVOs(lsVOs, vrePath);
|
2014-06-23 15:04:48 +02:00
|
|
|
|
2014-06-26 17:44:22 +02:00
|
|
|
for (VO vo : lsVOs) {
|
|
|
|
System.out.println(vo.getName());
|
|
|
|
|
|
|
|
for (VRE vre : vo.getVres()) {
|
|
|
|
System.out.println("VRE: "+vre.getName());
|
|
|
|
}
|
2014-06-23 15:04:48 +02:00
|
|
|
}
|
2014-06-26 18:27:00 +02:00
|
|
|
|
|
|
|
for (InfoContactModel infoContactModel : groups) {
|
|
|
|
System.out.println(infoContactModel);
|
|
|
|
}
|
2014-06-23 17:02:57 +02:00
|
|
|
|
2014-06-23 15:04:48 +02:00
|
|
|
} catch (Exception e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
2014-02-25 14:28:30 +01:00
|
|
|
}
|