You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
workspace-tree-widget/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java

417 lines
14 KiB
Java

/**
*
*/
package org.gcube.portlets.user.workspace.server.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
import org.gcube.applicationsupportlayer.social.NotificationsManager;
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
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.portal.PortalContext;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.urlshortener.UrlShortener;
import org.gcube.portlets.user.workspace.client.model.InfoContactModel;
import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder;
import org.gcube.portlets.user.workspace.server.notifications.NotificationsProducer;
import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameterForResolverIndex;
import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameterForResolverIndex.RESOLVER_TYPE;
import org.gcube.portlets.user.workspace.server.util.resource.PropertySpecialFolderReader;
import org.gcube.portlets.user.workspace.server.util.scope.ScopeUtilFilter;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
import com.liferay.portal.service.UserLocalServiceUtil;
/**
* The Class WsUtil.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Nov 25, 2016
*/
public class WsUtil {
/**
*
*/
public static final String FOLDER_PUBLISHING_ON_THREDDS = "FolderPublishingOnThredds";
protected static Logger logger = Logger.getLogger(WsUtil.class);
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";
public static final String NOTIFICATION_MANAGER = "NOTIFICATION_MANAGER";
public static final String NOTIFICATION_PRODUCER = "NOTIFICATION_PRODUCER";
public static final String WS_RUN_IN_TEST_MODE = "WS_RUN_IN_TEST_MODE";
public static final String WORKSPACE_SCOPE_UTIL = "WORKSPACE_SCOPE_UTIL";
public static final String URL_SHORTENER_SERVICE = "URL_SHORTENER_SERVICE";
public static final String URI_RESOLVER_SERVICE = "URI_RESOLVER_SERVICE";
public static final String PROPERTY_SPECIAL_FOLDER = "PROPERTY_SPECIAL_FOLDER";
public static final String NOTIFICATION_PORTLET_CLASS_ID = "org.gcube.portlets.user.workspace.server.GWTWorkspaceServiceImpl"; //IN DEV
/**
* Checks if is within portal.
*
* @return true if you're running into the portal, false if in development
*/
public static boolean isWithinPortal() {
try {
UserLocalServiceUtil.getService();
return true;
}
catch (Exception ex) {
logger.trace("Development Mode ON");
return false;
}
}
/**
* Gets the portal context.
*
* @param httpServletRequest the http servlet request
* @return the portal context
*/
public static PortalContextInfo getPortalContext(HttpServletRequest httpServletRequest){
PortalContext pContext = PortalContext.getConfiguration();
//USER
GCubeUser user = pContext.getCurrentUser(httpServletRequest);
String username = user.getUsername();
String fullName = user.getFullname();
String email = user.getEmail();
String avatarID = user.getUserAvatarId();
String avatarURL = user.getUserAvatarURL();
//SESSION
String currentScope = pContext.getCurrentScope(httpServletRequest);
String userToken = pContext.getCurrentUserToken(httpServletRequest);
long currGroupId = pContext.getCurrentGroupId(httpServletRequest);
return new PortalContextInfo(username, fullName, email, avatarID, avatarURL, currentScope, userToken, currGroupId);
}
/**
* Gets the portal context.
*
* @param httpServletRequest the http servlet request
* @param overrideScope the override scope
* @return the portal context
*/
public static PortalContextInfo getPortalContext(HttpServletRequest httpServletRequest, String overrideScope){
PortalContextInfo info = getPortalContext(httpServletRequest);
info.setCurrentScope(overrideScope);
return info;
}
/**
* Checks if is session expired.
*
* @param httpServletRequest the http servlet request
* @return true, if is session expired
* @throws Exception the exception
*/
public static boolean isSessionExpired(HttpServletRequest httpServletRequest) throws Exception {
logger.trace("workspace session validating...");
return PortalContext.getConfiguration().getCurrentUser(httpServletRequest)==null;
}
/**
* Gets the workspace.
*
* @param httpServletRequest the http servlet request
* @return the workspace
* @throws InternalErrorException the internal error exception
* @throws HomeNotFoundException the home not found exception
* @throws WorkspaceFolderNotFoundException the workspace folder not found exception
*/
public static Workspace getWorkspace(HttpServletRequest httpServletRequest) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException
{
logger.trace("Get Workspace");
PortalContextInfo info = getPortalContext(httpServletRequest);
logger.trace("PortalContextInfo: "+info);
ScopeProvider.instance.set(info.getCurrentScope());
logger.trace("Scope provider instancied");
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
return workspace;
}
/**
* Gets the workspace.
*
* @param httpServletRequest the http servlet request
* @param contextID the context id
* @param user the user
* @return the workspace
* @throws InternalErrorException the internal error exception
* @throws HomeNotFoundException the home not found exception
* @throws WorkspaceFolderNotFoundException the workspace folder not found exception
*/
public static Workspace getWorkspace(HttpServletRequest httpServletRequest, String contextID, GCubeUser user) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException
{
logger.info("Get workspace using contextID: "+contextID +", current user: "+user.getUsername());
String currentScope;
if(isWithinPortal())
currentScope = PortalContext.getConfiguration().getCurrentScope(contextID);
else{
currentScope = PortalContext.getConfiguration().getCurrentScope(httpServletRequest);
logger.warn("STARTING IN TEST MODE!!!! USING SCOPE: "+currentScope);
}
logger.info("For ContextID: "+contextID +", read scope from Portal Context: "+currentScope);
PortalContextInfo info = getPortalContext(httpServletRequest, currentScope);
logger.trace("PortalContextInfo: "+info);
ScopeProvider.instance.set(info.getCurrentScope());
logger.trace("Scope provider instancied");
String username = null;
try {
if(user.getUsername().compareTo(info.getUsername())!=0){
logger.debug("Gcube user read from Portal Context "+user.getUsername()+" is different by GCubeUser passed, using the second one: "+info.getUsername());
username = user.getUsername();
}
} catch (Exception e) {
logger.error("Error comparing username read from input parameter and Portal context");
}
if(username!=null)
info.setUsername(username);
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
return workspace;
}
/**
* Gets the GWT workspace builder.
*
* @param httpServletRequest the http servlet request
* @return the GWT workspace builder
*/
public static GWTWorkspaceBuilder getGWTWorkspaceBuilder(HttpServletRequest httpServletRequest)
{
PortalContextInfo info = getPortalContext(httpServletRequest);
logger.trace("PortalContextInfo: "+info);
HttpSession session = httpServletRequest.getSession();
GWTWorkspaceBuilder builder = (GWTWorkspaceBuilder) session.getAttribute(WORKSPACEBUILDER_ATTRIBUTE);
if (builder == null){
logger.info("Initializing the workspace area builder");
builder = new GWTWorkspaceBuilder();
//ADDED 03/09/2013
builder.setUserLogged(new InfoContactModel(info.getUsername(), info.getUsername(), info.getUserFullName(), false));
session.setAttribute(WORKSPACEBUILDER_ATTRIBUTE, builder);
}
return builder;
}
/**
* Gets the notification manager.
*
* @param httpServletRequest the http servlet request
* @return the notification manager
*/
public static NotificationsManager getNotificationManager(HttpServletRequest httpServletRequest)
{
PortalContextInfo info = getPortalContext(httpServletRequest);
HttpSession session = httpServletRequest.getSession();
NotificationsManager notifMng = (NotificationsManager) session.getAttribute(NOTIFICATION_MANAGER);
if (notifMng == null) {
try{
logger.trace("Create new NotificationsManager for user: "+info.getUsername());
logger.trace("New ApplicationNotificationsManager with portlet class name: "+NOTIFICATION_PORTLET_CLASS_ID);
SocialNetworkingSite site = new SocialNetworkingSite(httpServletRequest);
SocialNetworkingUser curser = new SocialNetworkingUser(info.getUsername(), info.getUserEmail(), info.getUserFullName(), info.getUserAvatarID());
notifMng = new ApplicationNotificationsManager(site, info.getCurrentScope(), curser, NOTIFICATION_PORTLET_CLASS_ID);
session.setAttribute(NOTIFICATION_MANAGER, notifMng);
}catch (Exception e) {
logger.error("An error occurred instancing ApplicationNotificationsManager for user: "+info.getUsername(),e);
}
}
return notifMng;
}
/**
* Gets the notification producer.
*
* @param httpServletRequest the http servlet request
* @return the notification producer
*/
public static NotificationsProducer getNotificationProducer(HttpServletRequest httpServletRequest)
{
PortalContextInfo info = getPortalContext(httpServletRequest);
HttpSession session = httpServletRequest.getSession();
NotificationsProducer notifProducer = (NotificationsProducer) session.getAttribute(NOTIFICATION_PRODUCER);
if (notifProducer == null) {
logger.trace("Create new Notification Producer for user: "+info.getUsername());
notifProducer = new NotificationsProducer(httpServletRequest);
session.setAttribute(NOTIFICATION_PRODUCER, notifProducer);
}
return notifProducer;
}
/**
* Gets the user id.
*
* @param httpServletRequest the http servlet request
* @return the user id
*/
public static String getUserId(HttpServletRequest httpServletRequest) {
PortalContextInfo info = getPortalContext(httpServletRequest);
return info.getUsername();
}
/**
* Checks if is vre.
*
* @param scope the scope
* @return true, if is vre
*/
public static boolean isVRE(String scope){
int slashCount = StringUtils.countMatches(scope, "/");
if(slashCount < 3){
logger.trace("currentScope is not VRE");
return false;
}
logger.trace("currentScope is VRE");
return true;
}
/**
* Gets the scope util filter.
*
* @param httpServletRequest the http servlet request
* @return the scope util filter
*/
public static ScopeUtilFilter getScopeUtilFilter(HttpServletRequest httpServletRequest){
PortalContextInfo info = getPortalContext(httpServletRequest);
HttpSession session = httpServletRequest.getSession();
ScopeUtilFilter scopeUtil = null;
try{
scopeUtil = (ScopeUtilFilter) session.getAttribute(WsUtil.WORKSPACE_SCOPE_UTIL);
if(scopeUtil==null){
scopeUtil = new ScopeUtilFilter(info.getCurrentScope(),true);
}
}catch (Exception e) {
logger.error("an error occurred in getscope filter "+e);
}
return scopeUtil;
}
/**
* Gets the url shortener.
*
* @param httpServletRequest the http servlet request
* @return the url shortener
*/
public static UrlShortener getUrlShortener(HttpServletRequest httpServletRequest) {
HttpSession session = httpServletRequest.getSession();
PortalContextInfo info = getPortalContext(httpServletRequest);
UrlShortener shortener = null;
try{
shortener = (UrlShortener) session.getAttribute(WsUtil.URL_SHORTENER_SERVICE);
if(shortener==null){
shortener = new UrlShortener();
session.setAttribute(URL_SHORTENER_SERVICE, shortener);
}
}catch (Exception e) {
logger.error("an error occurred in instancing url shortener ",e);
}
return shortener;
}
/**
* Gets the uri resolver.
*
* @param httpServletRequest the http servlet request
* @return the uri resolver
*/
public static UriResolverReaderParameterForResolverIndex getUriResolver(HttpServletRequest httpServletRequest) {
HttpSession session = httpServletRequest.getSession();
PortalContextInfo info = getPortalContext(httpServletRequest);
UriResolverReaderParameterForResolverIndex uriResolver = null;
try{
uriResolver = (UriResolverReaderParameterForResolverIndex) session.getAttribute(WsUtil.URI_RESOLVER_SERVICE);
if(uriResolver==null){
uriResolver = new UriResolverReaderParameterForResolverIndex(info.getCurrentScope(),RESOLVER_TYPE.SMP_ID);
session.setAttribute(URI_RESOLVER_SERVICE, uriResolver);
}
}catch (Exception e) {
logger.error("an error occurred instancing URI Resolver ",e);
}
return uriResolver;
}
/**
* Gets the property special folder reader.
*
* @param httpServletRequest the http servlet request
* @param pathProperty the path property
* @return the property special folder reader
*/
public static PropertySpecialFolderReader getPropertySpecialFolderReader(HttpServletRequest httpServletRequest, String pathProperty) {
HttpSession session = httpServletRequest.getSession();
PropertySpecialFolderReader psFolderReader = null;
try{
psFolderReader = (PropertySpecialFolderReader) session.getAttribute(WsUtil.PROPERTY_SPECIAL_FOLDER);
if(psFolderReader==null){
psFolderReader = new PropertySpecialFolderReader(pathProperty);
session.setAttribute(PROPERTY_SPECIAL_FOLDER, psFolderReader);
}
}catch (Exception e) {
logger.error("an error occurred instancing PropertySpecialFolderReader ",e);
}
return psFolderReader;
}
}