2013-02-06 15:40:17 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
package org.gcube.portlets.user.workspace.server.util;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
2013-03-25 11:14:26 +01:00
|
|
|
import org.apache.commons.lang.StringUtils;
|
2013-09-27 17:39:28 +02:00
|
|
|
import org.apache.log4j.Logger;
|
2013-02-06 15:40:17 +01:00
|
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
|
|
import org.gcube.application.framework.core.session.SessionManager;
|
2013-02-13 18:39:33 +01:00
|
|
|
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
|
|
|
|
import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
2013-09-27 17:39:28 +02:00
|
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
|
|
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.exceptions.WorkspaceFolderNotFoundException;
|
|
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
2013-02-15 12:51:01 +01:00
|
|
|
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
|
2013-09-03 15:49:22 +02:00
|
|
|
import org.gcube.portlets.user.workspace.client.model.InfoContactModel;
|
2013-02-06 15:40:17 +01:00
|
|
|
import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder;
|
2013-02-13 18:39:33 +01:00
|
|
|
import org.gcube.portlets.user.workspace.server.notifications.NotificationsProducer;
|
2013-07-08 17:42:08 +02:00
|
|
|
import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameter;
|
2013-07-02 10:30:40 +02:00
|
|
|
import org.gcube.portlets.user.workspace.server.shortener.UrlShortener;
|
2013-03-27 17:30:37 +01:00
|
|
|
import org.gcube.portlets.user.workspace.server.util.scope.ScopeUtilFilter;
|
2013-02-06 15:40:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Federico De Faveri defaveri@isti.cnr.it
|
|
|
|
*
|
|
|
|
*/
|
2013-06-13 18:44:46 +02:00
|
|
|
public class WsUtil {
|
2013-02-06 15:40:17 +01:00
|
|
|
|
2013-02-15 12:51:01 +01:00
|
|
|
public static final String USERNAME_ATTRIBUTE = ScopeHelper.USERNAME_ATTRIBUTE;
|
2013-02-06 15:40:17 +01:00
|
|
|
public static final String FOLDERIMPORTER_ATTRIBUTE = "FOLDER_IMPORTER";
|
|
|
|
public static final String METADATACONVERTER_ATTRIBUTE = "METADATA_CONVERTER";
|
|
|
|
public static final String WORKSPACE_EVENT_COLLECTOR_ATTRIBUTE = "EVENT_COLLECTOR";
|
|
|
|
public static final String WORKSPACEBUILDER_ATTRIBUTE = "WORKSPACEBUILDER";
|
2013-08-28 14:55:26 +02:00
|
|
|
public static final String NOTIFICATION_MANAGER = "NOTIFICATION_MANAGER";
|
|
|
|
public static final String NOTIFICATION_PRODUCER = "NOTIFICATION_PRODUCER";
|
2013-02-14 15:06:34 +01:00
|
|
|
public static final String WS_RUN_IN_TEST_MODE = "WS_RUN_IN_TEST_MODE";
|
2013-03-27 17:30:37 +01:00
|
|
|
public static final String WORKSPACE_SCOPE_UTIL = "WORKSPACE_SCOPE_UTIL";
|
2013-07-01 15:54:54 +02:00
|
|
|
public static final String URL_SHORTENER_SERVICE = "URL_SHORTENER_SERVICE";
|
2013-07-08 17:42:08 +02:00
|
|
|
public static final String URI_RESOLVER_SERVICE = "URI_RESOLVER_SERVICE";
|
2013-06-10 18:24:05 +02:00
|
|
|
public static final String NOTIFICATION_PORTLET_CLASS_ID = "org.gcube.portlets.user.workspace.server.GWTWorkspaceServiceImpl"; //IN DEV
|
2013-02-06 15:40:17 +01:00
|
|
|
|
|
|
|
// public static final String TEST_SCOPE = "/gcube/devsec";
|
|
|
|
// public static final String TEST_USER = "pasquale.pagano";
|
|
|
|
|
2013-05-27 18:25:10 +02:00
|
|
|
public static final String TEST_SCOPE = "/gcube/devsec";
|
2013-02-06 15:40:17 +01:00
|
|
|
// public static final String TEST_USER = "federico.defaveri";
|
|
|
|
// public static final String TEST_USER = "massimiliano.assante";
|
|
|
|
// public static final String TEST_USER = "pasquale.pagano";
|
2013-10-02 17:16:10 +02:00
|
|
|
// public static final String TEST_USER = "francesco.mangiacrapa";
|
2013-02-15 17:31:34 +01:00
|
|
|
// public static final String TEST_USER_FULL_NAME = "Francesco Mangiacrapa";
|
2013-03-25 11:14:26 +01:00
|
|
|
// public static final String TEST_USER = "aureliano.gentile";
|
2013-10-02 17:16:10 +02:00
|
|
|
public static final String TEST_USER = "test.user";
|
2013-05-24 18:18:14 +02:00
|
|
|
// public static final String TEST_USER = "antonio.gioia";
|
2013-02-15 17:31:34 +01:00
|
|
|
public static final String TEST_USER_FULL_NAME = "Test User";
|
|
|
|
|
2013-03-27 17:30:37 +01:00
|
|
|
|
2013-09-27 17:39:28 +02:00
|
|
|
protected static Logger logger = Logger.getLogger(WsUtil.class);
|
|
|
|
|
2013-02-15 12:51:01 +01:00
|
|
|
public static boolean withoutPortal = false;
|
2013-02-13 18:43:21 +01:00
|
|
|
|
2013-02-06 15:40:17 +01:00
|
|
|
public static ASLSession getAslSession(HttpSession httpSession)
|
|
|
|
{
|
|
|
|
String sessionID = httpSession.getId();
|
|
|
|
String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE);
|
2013-02-15 12:51:01 +01:00
|
|
|
ASLSession session;
|
|
|
|
|
2013-02-06 15:40:17 +01:00
|
|
|
if (user == null) {
|
2013-03-27 17:30:37 +01:00
|
|
|
|
2013-09-05 11:10:34 +02:00
|
|
|
/*USE ANOTHER ACCOUNT (OTHERWHISE BY TEST_USER) FOR RUNNING
|
|
|
|
* COMMENT THIS IN DEVELOP ENVIROMENT (UNCOMMENT IN PRODUCTION)*/
|
2014-02-11 19:18:14 +01:00
|
|
|
user=TEST_USER;
|
2013-09-05 11:10:34 +02:00
|
|
|
|
|
|
|
//UNCOMMENT THIS IN DEVELOP ENVIROMENT
|
2014-02-11 19:18:14 +01:00
|
|
|
// user = "francesco.mangiacrapa";
|
2013-09-02 12:43:57 +02:00
|
|
|
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.warn("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND - PORTLETS STARTING WITH FOLLOWING SETTINGS:");
|
|
|
|
logger.warn("session id: "+sessionID);
|
|
|
|
logger.warn("TEST_USER: "+user);
|
|
|
|
logger.warn("TEST_SCOPE: "+TEST_SCOPE);
|
|
|
|
logger.warn("USERNAME_ATTRIBUTE: "+USERNAME_ATTRIBUTE);
|
2013-03-27 17:30:37 +01:00
|
|
|
session = SessionManager.getInstance().getASLSession(sessionID, user);
|
2013-03-25 11:14:26 +01:00
|
|
|
session.setScope(TEST_SCOPE);
|
2013-09-02 12:43:57 +02:00
|
|
|
|
2013-03-27 17:30:37 +01:00
|
|
|
|
|
|
|
//MANDATORY FOR SOCIAL LIBRARY
|
|
|
|
session.setUserAvatarId(user + "Avatar");
|
|
|
|
session.setUserFullName(TEST_USER_FULL_NAME);
|
|
|
|
session.setUserEmailAddress(user + "@mail.test");
|
|
|
|
|
|
|
|
//SET HTTP SESSION ATTRIBUTE
|
|
|
|
httpSession.setAttribute(USERNAME_ATTRIBUTE, user);
|
2013-02-14 15:06:34 +01:00
|
|
|
|
2013-02-15 12:51:01 +01:00
|
|
|
withoutPortal = true;
|
|
|
|
|
2013-03-27 17:30:37 +01:00
|
|
|
return session;
|
|
|
|
|
|
|
|
}else if(user.compareToIgnoreCase(TEST_USER)==0){
|
|
|
|
|
|
|
|
withoutPortal = true;
|
2014-02-11 19:18:14 +01:00
|
|
|
}else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){
|
|
|
|
|
|
|
|
withoutPortal = true;
|
2013-03-27 17:30:37 +01:00
|
|
|
|
2013-02-15 12:51:01 +01:00
|
|
|
}else{
|
2013-03-27 17:30:37 +01:00
|
|
|
|
2013-02-15 12:51:01 +01:00
|
|
|
withoutPortal = false;
|
2013-02-06 15:40:17 +01:00
|
|
|
}
|
2013-02-15 12:51:01 +01:00
|
|
|
|
2013-03-27 17:30:37 +01:00
|
|
|
return SessionManager.getInstance().getASLSession(sessionID, user);
|
2013-02-14 15:06:34 +01:00
|
|
|
}
|
|
|
|
|
2014-01-13 11:54:11 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param httpSession
|
|
|
|
* @return true if current username into ASL session is WsUtil.TEST_USER, false otherwise
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
public static boolean isSessionExpired(HttpSession httpSession) throws Exception {
|
|
|
|
logger.trace("workspace session validating...");
|
|
|
|
//READING USERNAME FROM ASL SESSION
|
|
|
|
String userUsername = getAslSession(httpSession).getUsername();
|
|
|
|
boolean isTestUser = userUsername.compareTo(WsUtil.TEST_USER)==0;
|
|
|
|
|
|
|
|
//TODO UNCOMMENT THIS FOR RELEASE
|
|
|
|
logger.trace("Is "+WsUtil.TEST_USER+" test user? "+isTestUser);
|
|
|
|
|
|
|
|
if(isTestUser){
|
|
|
|
logger.error("workspace session is expired! username is: "+WsUtil.TEST_USER);
|
|
|
|
return true; //is TEST_USER, session is expired
|
|
|
|
}
|
|
|
|
|
|
|
|
logger.trace("workspace session is valid! current username is: "+userUsername);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-02-06 15:40:17 +01:00
|
|
|
|
|
|
|
public static Workspace getWorkspace(final HttpSession httpSession) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException
|
|
|
|
{
|
2013-09-27 17:39:28 +02:00
|
|
|
|
|
|
|
logger.trace("Get Workspace");
|
2013-02-06 15:40:17 +01:00
|
|
|
final ASLSession session = getAslSession(httpSession);
|
2013-09-27 17:39:28 +02:00
|
|
|
logger.trace("ASLSession scope: "+session.getScope() + " username: "+session.getUsername());
|
2013-02-06 15:40:17 +01:00
|
|
|
|
2013-09-27 17:39:28 +02:00
|
|
|
ScopeProvider.instance.set(session.getScope());
|
|
|
|
logger.trace("Scope provider instancied");
|
|
|
|
|
|
|
|
Workspace workspace = HomeLibrary.getUserWorkspace(session.getUsername());
|
2013-02-06 15:40:17 +01:00
|
|
|
|
|
|
|
if (session.getAttribute(METADATACONVERTER_ATTRIBUTE) == null){
|
|
|
|
|
|
|
|
logger.trace("Initializing the Metadata converter");
|
|
|
|
|
|
|
|
Thread mcLoader = new Thread(new Runnable(){
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
try {
|
|
|
|
MetadataConverter mc = new MetadataConverter(logger);
|
|
|
|
mc.setup(session);
|
|
|
|
session.setAttribute(METADATACONVERTER_ATTRIBUTE, mc);
|
|
|
|
}catch (Exception e) {
|
|
|
|
logger.error("Error initializing the Metadata Converter: "+e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
mcLoader.start();
|
|
|
|
}
|
|
|
|
if (session.getAttribute(WORKSPACE_EVENT_COLLECTOR_ATTRIBUTE) == null){
|
|
|
|
|
|
|
|
|
|
|
|
logger.trace("Initializing the event collector");
|
|
|
|
|
|
|
|
//we prepare the event collector
|
|
|
|
WorkspaceEventCollector eventCollector = new WorkspaceEventCollector(logger);
|
|
|
|
workspace.addWorkspaceListener(eventCollector);
|
|
|
|
session.setAttribute(WORKSPACE_EVENT_COLLECTOR_ATTRIBUTE, eventCollector);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (session.getAttribute(WORKSPACEBUILDER_ATTRIBUTE) == null)
|
|
|
|
{
|
|
|
|
logger.trace("Initializing the workspace area builder");
|
|
|
|
|
2013-07-08 17:42:08 +02:00
|
|
|
GWTWorkspaceBuilder builder = new GWTWorkspaceBuilder();
|
2013-09-03 15:49:22 +02:00
|
|
|
|
|
|
|
//ADDED 03/09/2013
|
|
|
|
builder.setUserLogged(new InfoContactModel(session.getUsername(), session.getUsername(), session.getUserFullName()));
|
|
|
|
|
2013-02-06 15:40:17 +01:00
|
|
|
session.setAttribute(WORKSPACEBUILDER_ATTRIBUTE, builder);
|
|
|
|
}
|
|
|
|
|
|
|
|
return workspace;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-10-04 13:58:07 +02:00
|
|
|
public static MetadataConverter getMetadataConverter(Logger logger, HttpSession httpSession)
|
2013-02-06 15:40:17 +01:00
|
|
|
{
|
|
|
|
MetadataConverter mc = (MetadataConverter) httpSession.getAttribute(METADATACONVERTER_ATTRIBUTE);
|
|
|
|
|
|
|
|
if (mc==null)
|
|
|
|
{
|
|
|
|
|
|
|
|
mc = new MetadataConverter(logger);
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
|
|
|
mc.setup(session);
|
|
|
|
session.setAttribute(METADATACONVERTER_ATTRIBUTE, mc);
|
|
|
|
}
|
|
|
|
|
|
|
|
mc.isReady();
|
|
|
|
|
|
|
|
return mc;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static WorkspaceEventCollector getEventCollector(HttpSession httpSession)
|
|
|
|
{
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
2013-06-13 18:44:46 +02:00
|
|
|
return (WorkspaceEventCollector) session.getAttribute(WsUtil.WORKSPACE_EVENT_COLLECTOR_ATTRIBUTE);
|
2013-02-06 15:40:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public static GWTWorkspaceBuilder getGWTWorkspaceBuilder(HttpSession httpSession)
|
|
|
|
{
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
2013-06-13 18:44:46 +02:00
|
|
|
return (GWTWorkspaceBuilder) session.getAttribute(WsUtil.WORKSPACEBUILDER_ATTRIBUTE);
|
2013-02-06 15:40:17 +01:00
|
|
|
}
|
2013-02-13 18:39:33 +01:00
|
|
|
|
|
|
|
public static NotificationsManager getNotificationManager(ASLSession session)
|
|
|
|
{
|
|
|
|
|
|
|
|
NotificationsManager notifMng = (NotificationsManager) session.getAttribute(NOTIFICATION_MANAGER);
|
|
|
|
|
|
|
|
if (notifMng == null) {
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.trace("Create new NotificationsManager for user: "+session.getUsername());
|
2013-02-13 18:39:33 +01:00
|
|
|
notifMng = new ApplicationNotificationsManager(session, NOTIFICATION_PORTLET_CLASS_ID);
|
|
|
|
session.setAttribute(NOTIFICATION_MANAGER, notifMng);
|
|
|
|
}
|
|
|
|
|
|
|
|
return notifMng;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static NotificationsProducer getNotificationProducer(ASLSession session)
|
|
|
|
{
|
|
|
|
|
|
|
|
NotificationsProducer notifProducer = (NotificationsProducer) session.getAttribute(NOTIFICATION_PRODUCER);
|
|
|
|
|
|
|
|
if (notifProducer == null) {
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.trace("Create new Notification Producer for user: "+session.getUsername());
|
2013-02-13 18:39:33 +01:00
|
|
|
notifProducer = new NotificationsProducer(session);
|
|
|
|
session.setAttribute(NOTIFICATION_PRODUCER, notifProducer);
|
|
|
|
}
|
|
|
|
|
|
|
|
return notifProducer;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getUserId(HttpSession httpSession) {
|
|
|
|
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
|
|
|
|
|
|
|
return session.getUsername();
|
|
|
|
}
|
2013-03-25 11:14:26 +01:00
|
|
|
|
|
|
|
public static boolean isVRE(ASLSession session){
|
|
|
|
|
|
|
|
String currentScope = session.getScopeName();
|
|
|
|
|
|
|
|
int slashCount = StringUtils.countMatches(currentScope, "/");
|
|
|
|
|
|
|
|
if(slashCount < 3){
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.trace("currentScope is not VRE");
|
2013-03-25 11:14:26 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.trace("currentScope is VRE");
|
2013-03-25 11:14:26 +01:00
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-03-27 17:30:37 +01:00
|
|
|
public static ScopeUtilFilter getScopeUtilFilter(HttpSession httpSession){
|
|
|
|
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
|
|
|
ScopeUtilFilter scopeUtil = null;
|
|
|
|
try{
|
2013-06-13 18:44:46 +02:00
|
|
|
scopeUtil = (ScopeUtilFilter) session.getAttribute(WsUtil.WORKSPACE_SCOPE_UTIL);
|
2013-03-27 17:30:37 +01:00
|
|
|
|
|
|
|
if(scopeUtil==null){
|
|
|
|
scopeUtil = new ScopeUtilFilter(session.getScopeName());
|
|
|
|
|
|
|
|
}
|
|
|
|
}catch (Exception e) {
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.error("an error occurred in getscope filter "+e);
|
2013-03-27 17:30:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return scopeUtil;
|
|
|
|
}
|
2013-02-06 15:40:17 +01:00
|
|
|
|
2013-07-01 15:54:54 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param session
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public static UrlShortener getUrlShortener(HttpSession httpSession) {
|
|
|
|
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
|
|
|
UrlShortener shortener = null;
|
|
|
|
try{
|
|
|
|
shortener = (UrlShortener) session.getAttribute(WsUtil.URL_SHORTENER_SERVICE);
|
|
|
|
|
|
|
|
if(shortener==null){
|
2013-10-22 16:43:50 +02:00
|
|
|
shortener = new UrlShortener(session.getScope().toString());
|
2013-07-01 15:54:54 +02:00
|
|
|
session.setAttribute(URL_SHORTENER_SERVICE, shortener);
|
|
|
|
}
|
|
|
|
|
|
|
|
}catch (Exception e) {
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.error("an error occurred in instancing url shortener ",e);
|
2013-07-01 15:54:54 +02:00
|
|
|
}
|
|
|
|
|
2013-07-01 17:58:57 +02:00
|
|
|
return shortener;
|
2013-07-01 15:54:54 +02:00
|
|
|
}
|
|
|
|
|
2013-07-08 17:42:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param session
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public static UriResolverReaderParameter getUriResolver(HttpSession httpSession) {
|
|
|
|
|
|
|
|
ASLSession session = getAslSession(httpSession);
|
2013-07-25 15:29:27 +02:00
|
|
|
|
2013-07-08 17:42:08 +02:00
|
|
|
UriResolverReaderParameter uriResolver = null;
|
|
|
|
try{
|
|
|
|
uriResolver = (UriResolverReaderParameter) session.getAttribute(WsUtil.URI_RESOLVER_SERVICE);
|
|
|
|
|
|
|
|
if(uriResolver==null){
|
2013-07-25 15:29:27 +02:00
|
|
|
uriResolver = new UriResolverReaderParameter(session.getScope().toString());
|
2013-07-08 17:42:08 +02:00
|
|
|
session.setAttribute(URI_RESOLVER_SERVICE, uriResolver);
|
|
|
|
}
|
|
|
|
|
|
|
|
}catch (Exception e) {
|
2013-10-04 13:58:07 +02:00
|
|
|
logger.error("an error occurred in instancing uri resolver ",e);
|
2013-07-08 17:42:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return uriResolver;
|
|
|
|
}
|
|
|
|
|
2013-02-06 15:40:17 +01:00
|
|
|
}
|