workspace-sharing-widget/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl...

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);
}
}
}