245 lines
8.7 KiB
Java
245 lines
8.7 KiB
Java
package org.gcube.portlets.widgets.workspacesharingwidget.server;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import org.apache.log4j.Logger;
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
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;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
|
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;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsUtil;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtilFilter;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel;
|
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL;
|
|
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;
|
|
|
|
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 {
|
|
|
|
protected Logger logger = Logger.getLogger(WorkspaceSharingServiceImpl.class);
|
|
|
|
|
|
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
|
|
public List<InfoContactModel> getAllContacts() throws Exception {
|
|
|
|
try {
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
logger.trace("Get all contacts");
|
|
|
|
// WorkspaceItem parent = workspace.getItem(parentFileModel.getIdentifier()); //get item from workspace
|
|
// workspace.getAllScope();
|
|
|
|
GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder();
|
|
|
|
if(isTestMode()){
|
|
|
|
logger.warn("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST USERS");
|
|
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
|
|
// //TEST USERS
|
|
listContactsModel.add(new InfoContactModel("federico.defaveri", "federico.defaveri", "Federico de Faveri"));
|
|
listContactsModel.add(new InfoContactModel("antonio.gioia", "antonio.gioia", "Antonio Gioia"));
|
|
listContactsModel.add(new InfoContactModel("fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi"));
|
|
listContactsModel.add(new InfoContactModel("pasquale.pagano", "pasquale.pagano", "Pasquale Pagano"));
|
|
listContactsModel.add(new InfoContactModel(WsUtil.TEST_USER, WsUtil.TEST_USER, WsUtil.TEST_USER_FULL_NAME));
|
|
listContactsModel.add(new InfoContactModel("francesco.mangiacrapa", "francesco.mangiacrapa", "Francesco Mangiacrapa"));
|
|
listContactsModel.add(new InfoContactModel("massimiliano.assante", "massimiliano.assante", "Massimiliano Assante"));
|
|
return listContactsModel;
|
|
|
|
}
|
|
|
|
UserManager userManag = new LiferayUserManager();
|
|
GroupManager gm = new LiferayGroupManager();
|
|
String groupId = gm.getRootVO().getGroupId();
|
|
logger.trace("user manager getting list users by group: "+groupId);
|
|
return builder.buildGXTListContactsModel(userManag.listUsersByGroup(groupId));
|
|
|
|
} 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{
|
|
|
|
logger.trace("getListUserSharedByFolderSharedId "+ folderSharedId);
|
|
|
|
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();
|
|
|
|
logger.trace("getListUserSharedByFolderSharedId return "+ listPortalLogin.size() + " user");
|
|
|
|
if(isTestMode())
|
|
return builder.buildGxtInfoContactFromPortalLoginTestMode(listPortalLogin);
|
|
|
|
return builder.buildGxtInfoContactsFromPortalLogins(listPortalLogin);
|
|
|
|
}
|
|
else{
|
|
logger.trace("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER);
|
|
|
|
//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 {
|
|
|
|
logger.trace("get Owner By ItemId "+ itemId);
|
|
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();
|
|
}
|
|
|
|
@Override
|
|
public FileModel getFileModelByWorkpaceItemId(String itemId) throws Exception {
|
|
|
|
try {
|
|
|
|
if(itemId == null || itemId.isEmpty())
|
|
throw new Exception("Identifier is null or empty");
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
logger.trace("Get item id: "+itemId);
|
|
|
|
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);
|
|
|
|
logger.trace("Getting folder parent");
|
|
|
|
WorkspaceFolder folderParent = null;
|
|
if(wsItem!=null)
|
|
folderParent = wsItem.getParent(); //BUILD PARENT
|
|
else
|
|
throw new Exception("Workspace item not found");
|
|
|
|
|
|
FileModel parent = null;
|
|
if(folderParent!=null){
|
|
parent = builder.buildGXTFileModelItem(folderParent, null);
|
|
logger.trace("Folder parent is parent id: "+parent.getIdentifier() + " name: "+parent.getName());
|
|
}
|
|
else
|
|
logger.trace("Folder parent for item: "+wsItem.getId() +" is null");
|
|
|
|
//BUILD ITEM
|
|
return builder.buildGXTFileModelItem(wsItem, parent);
|
|
} catch (Exception e) {
|
|
logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e);
|
|
String error = ConstantsSharing.SERVER_ERROR + " retrieving the item from workspace, "+e.getMessage();
|
|
throw new Exception(error);
|
|
}
|
|
}
|
|
|
|
|
|
}
|