Search in sources :

Example 26 with IStylesheetDescriptor

use of org.apereo.portal.layout.om.IStylesheetDescriptor in project uPortal by Jasig.

the class PortletWindowRegistryImpl method initializePortletWindowData.

/**
     * Initializes a newly created {@link PortletWindow}, the default implementation sets up the
     * appropriate {@link WindowState} and {@link javax.portlet.PortletMode}
     */
protected void initializePortletWindowData(HttpServletRequest request, PortletWindowData portletWindowData) {
    final IStylesheetDescriptor stylesheetDescriptor = getThemeStylesheetDescriptor(request);
    final IPortletEntityId portletEntityId = portletWindowData.getPortletEntityId();
    final IPortletEntity portletEntity = this.portletEntityRegistry.getPortletEntity(request, portletEntityId);
    final WindowState entityWindowState = portletEntity.getWindowState(stylesheetDescriptor);
    if (persistentWindowStates.contains(entityWindowState)) {
        portletWindowData.setWindowState(entityWindowState);
    } else if (entityWindowState != null) {
        //Set of persistent window states must have changed, nuke the old value
        this.logger.warn("PortletEntity.windowState=" + entityWindowState + " but that state is not in the set of persistent WindowStates. PortletEntity.windowState will be set to null");
        portletEntity.setWindowState(stylesheetDescriptor, null);
        this.portletEntityRegistry.storePortletEntity(request, portletEntity);
    }
}
Also used : WindowState(javax.portlet.WindowState) IPortletEntity(org.apereo.portal.portlet.om.IPortletEntity) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor) IPortletEntityId(org.apereo.portal.portlet.om.IPortletEntityId)

Example 27 with IStylesheetDescriptor

use of org.apereo.portal.layout.om.IStylesheetDescriptor in project uPortal by Jasig.

the class StylesheetUserPreferencesServiceImpl method setLayoutAttribute.

@Transactional
@Override
public String setLayoutAttribute(HttpServletRequest request, PreferencesScope prefScope, String nodeId, String name, String value) {
    final StylesheetPreferencesKey stylesheetPreferencesKey = this.getStylesheetPreferencesKey(request, prefScope);
    final IStylesheetDescriptor stylesheetDescriptor = stylesheetPreferencesKey.stylesheetDescriptor;
    final ILayoutAttributeDescriptor layoutAttributeDescriptor = stylesheetDescriptor.getLayoutAttributeDescriptor(name);
    if (layoutAttributeDescriptor == null) {
        logger.warn("Attempted to set layout attribute {}={} on node with ID=\"{}\" but no such stylesheet parameter is defined in stylesheet descriptor {}. It will be ignored.", new Object[] { name, value, nodeId, stylesheetDescriptor.getName() });
        return null;
    }
    if (this.compareValues(value, layoutAttributeDescriptor.getDefaultValue())) {
        //Value matches the default value, remove the attribute
        return this.removeLayoutAttribute(request, prefScope, nodeId, name);
    }
    final IStylesheetUserPreferences distributedStylesheetUserPreferences = this.getDistributedStylesheetUserPreferences(request, prefScope);
    if (distributedStylesheetUserPreferences != null) {
        final String defaultValue = distributedStylesheetUserPreferences.getLayoutAttribute(nodeId, name);
        if (this.compareValues(value, defaultValue)) {
            //Value matches the DLM preferences value, remove the value
            return this.removeLayoutAttribute(request, prefScope, nodeId, name);
        }
    }
    final Scope scope = this.getWriteScope(request, prefScope, stylesheetPreferencesKey, layoutAttributeDescriptor);
    switch(scope) {
        case PERSISTENT:
            {
                IStylesheetUserPreferences stylesheetUserPreferences = this.getStylesheetUserPreferences(request, stylesheetPreferencesKey);
                if (stylesheetUserPreferences == null) {
                    stylesheetUserPreferences = this.stylesheetUserPreferencesDao.createStylesheetUserPreferences(stylesheetDescriptor, stylesheetPreferencesKey.person, stylesheetPreferencesKey.userProfile);
                    this.clearStylesheetUserPreferencesCache(request, stylesheetPreferencesKey);
                }
                final String oldValue = stylesheetUserPreferences.setLayoutAttribute(nodeId, name, value);
                this.stylesheetUserPreferencesDao.storeStylesheetUserPreferences(stylesheetUserPreferences);
                return oldValue;
            }
        default:
            {
                //Determine the mutex to use for accessing the nodeAttributes map
                final Object mutex;
                switch(scope) {
                    case REQUEST:
                        {
                            mutex = PortalWebUtils.getRequestAttributeMutex(request);
                            break;
                        }
                    case SESSION:
                        {
                            final HttpSession session = request.getSession();
                            mutex = WebUtils.getSessionMutex(session);
                            break;
                        }
                    default:
                        {
                            mutex = new Object();
                            break;
                        }
                }
                //Get/Create the nodeAttributes map
                Map<String, String> nodeAttributes;
                synchronized (mutex) {
                    nodeAttributes = this.getDataValue(request, stylesheetPreferencesKey, scope, LAYOUT_ATTRIBUTES_KEY, nodeId);
                    if (nodeAttributes == null) {
                        nodeAttributes = new ConcurrentHashMap<String, String>();
                        this.putDataValue(request, stylesheetPreferencesKey, scope, LAYOUT_ATTRIBUTES_KEY, nodeId, nodeAttributes);
                    }
                }
                return nodeAttributes.put(name, value);
            }
    }
}
Also used : Scope(org.apereo.portal.layout.om.IStylesheetData.Scope) HttpSession(javax.servlet.http.HttpSession) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor) IStylesheetUserPreferences(org.apereo.portal.layout.om.IStylesheetUserPreferences) ILayoutAttributeDescriptor(org.apereo.portal.layout.om.ILayoutAttributeDescriptor) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Transactional(org.springframework.transaction.annotation.Transactional)

Example 28 with IStylesheetDescriptor

use of org.apereo.portal.layout.om.IStylesheetDescriptor in project uPortal by Jasig.

the class StylesheetUserPreferencesServiceImpl method getLayoutAttribute.

@Override
public String getLayoutAttribute(HttpServletRequest request, PreferencesScope prefScope, String nodeId, String name) {
    final StylesheetPreferencesKey stylesheetPreferencesKey = this.getStylesheetPreferencesKey(request, prefScope);
    final IStylesheetDescriptor stylesheetDescriptor = stylesheetPreferencesKey.stylesheetDescriptor;
    final ILayoutAttributeDescriptor layoutAttributeDescriptor = stylesheetDescriptor.getLayoutAttributeDescriptor(name);
    if (layoutAttributeDescriptor == null) {
        logger.warn("Attempted to get layout attribute {} for ID=\"{}\" but no such stylesheet parameter is defined in stylesheet descriptor {}. Null will be returned", new Object[] { name, nodeId, stylesheetDescriptor.getName() });
        return null;
    }
    //Load the default value
    String defaultValue = null;
    final IStylesheetUserPreferences distributedStylesheetUserPreferences = this.getDistributedStylesheetUserPreferences(request, prefScope);
    if (distributedStylesheetUserPreferences != null) {
        defaultValue = distributedStylesheetUserPreferences.getLayoutAttribute(nodeId, name);
        // special handling for fragment owner
        if (this.isFragmentOwnerStylesheetPreferencesKey(stylesheetPreferencesKey)) {
            return defaultValue;
        }
        if (this.compareValues(defaultValue, layoutAttributeDescriptor.getDefaultValue())) {
            //DLM attribute value matches the stylesheet descriptor default, remove the DLM value
            distributedStylesheetUserPreferences.removeLayoutAttribute(nodeId, name);
            defaultValue = null;
        }
    }
    final String value;
    final Scope scope = layoutAttributeDescriptor.getScope();
    switch(scope) {
        case PERSISTENT:
            {
                final IStylesheetUserPreferences stylesheetUserPreferences = this.getStylesheetUserPreferences(request, stylesheetPreferencesKey);
                if (stylesheetUserPreferences == null) {
                    value = null;
                    break;
                }
                value = stylesheetUserPreferences.getLayoutAttribute(nodeId, name);
                break;
            }
        default:
            {
                final Map<String, String> nodeAttributes = this.getDataValue(request, stylesheetPreferencesKey, scope, LAYOUT_ATTRIBUTES_KEY, nodeId);
                if (nodeAttributes == null) {
                    value = null;
                    break;
                }
                value = nodeAttributes.get(name);
                break;
            }
    }
    if (value == null) {
        return defaultValue;
    }
    if (!this.isFragmentOwnerStylesheetPreferencesKey(stylesheetPreferencesKey)) {
        if (this.compareValues(value, layoutAttributeDescriptor.getDefaultValue()) || //Value is equal to stylesheet descriptor default
        (defaultValue != null && this.compareValues(value, defaultValue))) {
            //Value is equal to DLM stylesheet preferences default
            //Remove the user's customized value
            this.removeLayoutAttribute(request, prefScope, nodeId, name);
            return null;
        }
    }
    return value;
}
Also used : Scope(org.apereo.portal.layout.om.IStylesheetData.Scope) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor) IStylesheetUserPreferences(org.apereo.portal.layout.om.IStylesheetUserPreferences) ILayoutAttributeDescriptor(org.apereo.portal.layout.om.ILayoutAttributeDescriptor) ConcurrentMap(java.util.concurrent.ConcurrentMap) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Example 29 with IStylesheetDescriptor

use of org.apereo.portal.layout.om.IStylesheetDescriptor in project uPortal by Jasig.

the class StylesheetUserPreferencesServiceImpl method populateStylesheetParameters.

@Override
public <P extends Populator<String, String>> P populateStylesheetParameters(HttpServletRequest request, PreferencesScope prefScope, P stylesheetParameters) {
    final StylesheetPreferencesKey stylesheetPreferencesKey = this.getStylesheetPreferencesKey(request, prefScope);
    final IStylesheetDescriptor stylesheetDescriptor = stylesheetPreferencesKey.stylesheetDescriptor;
    //Get the scoped sources once
    final IStylesheetUserPreferences stylesheetUserPreferences = this.getStylesheetUserPreferences(request, stylesheetPreferencesKey);
    final Map<String, String> sessionStylesheetParameters;
    final HttpSession session = request.getSession(false);
    if (session == null) {
        sessionStylesheetParameters = null;
    } else {
        sessionStylesheetParameters = PortalWebUtils.getMapSessionAttribute(session, STYLESHEET_PARAMETERS_KEY + stylesheetPreferencesKey.toString(), false);
    }
    final Map<String, String> requestStylesheetParameters = PortalWebUtils.getMapRequestAttribute(request, STYLESHEET_PARAMETERS_KEY + stylesheetPreferencesKey.toString(), false);
    //Try getting each stylesheet parameter to populate the Map
    for (final IStylesheetParameterDescriptor stylesheetParameterDescriptor : stylesheetDescriptor.getStylesheetParameterDescriptors()) {
        final String name = stylesheetParameterDescriptor.getName();
        final String value;
        final Scope scope = stylesheetParameterDescriptor.getScope();
        switch(scope) {
            case PERSISTENT:
                {
                    if (stylesheetUserPreferences == null) {
                        value = null;
                        break;
                    }
                    value = stylesheetUserPreferences.getStylesheetParameter(name);
                    break;
                }
            case SESSION:
                {
                    if (sessionStylesheetParameters == null) {
                        value = null;
                        break;
                    }
                    value = sessionStylesheetParameters.get(name);
                    break;
                }
            case REQUEST:
                {
                    if (requestStylesheetParameters == null) {
                        value = null;
                        break;
                    }
                    value = requestStylesheetParameters.get(name);
                    break;
                }
            default:
                {
                    value = null;
                    break;
                }
        }
        //Don't add unset properties
        if (value == null) {
            continue;
        }
        //If the value is equal to the default value remove the property and return null
        if (this.compareValues(value, stylesheetParameterDescriptor.getDefaultValue())) {
            this.removeStylesheetParameter(request, prefScope, name);
            continue;
        }
        stylesheetParameters.put(name, value);
    }
    return stylesheetParameters;
}
Also used : IStylesheetParameterDescriptor(org.apereo.portal.layout.om.IStylesheetParameterDescriptor) Scope(org.apereo.portal.layout.om.IStylesheetData.Scope) HttpSession(javax.servlet.http.HttpSession) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor) IStylesheetUserPreferences(org.apereo.portal.layout.om.IStylesheetUserPreferences)

Example 30 with IStylesheetDescriptor

use of org.apereo.portal.layout.om.IStylesheetDescriptor in project uPortal by Jasig.

the class StylesheetUserPreferencesServiceImpl method populateOutputProperties.

@Override
public <P extends Populator<String, String>> P populateOutputProperties(HttpServletRequest request, PreferencesScope prefScope, P properties) {
    final StylesheetPreferencesKey stylesheetPreferencesKey = this.getStylesheetPreferencesKey(request, prefScope);
    final IStylesheetDescriptor stylesheetDescriptor = stylesheetPreferencesKey.stylesheetDescriptor;
    //Get the scoped sources once
    final IStylesheetUserPreferences stylesheetUserPreferences = this.getStylesheetUserPreferences(request, stylesheetPreferencesKey);
    final Map<String, String> sessionOutputProperties;
    final HttpSession session = request.getSession(false);
    if (session == null) {
        sessionOutputProperties = null;
    } else {
        sessionOutputProperties = PortalWebUtils.getMapSessionAttribute(session, OUTPUT_PROPERTIES_KEY + stylesheetPreferencesKey.toString(), false);
    }
    final Map<String, String> requestOutputProperties = PortalWebUtils.getMapRequestAttribute(request, OUTPUT_PROPERTIES_KEY + stylesheetPreferencesKey.toString(), false);
    //Try getting each output property to populate the Properties
    for (final IOutputPropertyDescriptor outputPropertyDescriptor : stylesheetDescriptor.getOutputPropertyDescriptors()) {
        final String name = outputPropertyDescriptor.getName();
        final String value;
        final Scope scope = outputPropertyDescriptor.getScope();
        switch(scope) {
            case PERSISTENT:
                {
                    if (stylesheetUserPreferences == null) {
                        value = null;
                        break;
                    }
                    value = stylesheetUserPreferences.getOutputProperty(name);
                    break;
                }
            case SESSION:
                {
                    if (sessionOutputProperties == null) {
                        value = null;
                        break;
                    }
                    value = sessionOutputProperties.get(name);
                    break;
                }
            case REQUEST:
                {
                    if (requestOutputProperties == null) {
                        value = null;
                        break;
                    }
                    value = requestOutputProperties.get(name);
                    break;
                }
            default:
                {
                    value = null;
                    break;
                }
        }
        //Don't add unset properties
        if (value == null) {
            continue;
        }
        //If the value is equal to the default value remove the property and return null
        if (this.compareValues(value, outputPropertyDescriptor.getDefaultValue())) {
            this.removeOutputProperty(request, prefScope, name);
            continue;
        }
        properties.put(name, value);
    }
    return properties;
}
Also used : IOutputPropertyDescriptor(org.apereo.portal.layout.om.IOutputPropertyDescriptor) Scope(org.apereo.portal.layout.om.IStylesheetData.Scope) HttpSession(javax.servlet.http.HttpSession) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor) IStylesheetUserPreferences(org.apereo.portal.layout.om.IStylesheetUserPreferences)

Aggregations

IStylesheetDescriptor (org.apereo.portal.layout.om.IStylesheetDescriptor)31 IStylesheetUserPreferences (org.apereo.portal.layout.om.IStylesheetUserPreferences)15 Scope (org.apereo.portal.layout.om.IStylesheetData.Scope)11 IStylesheetParameterDescriptor (org.apereo.portal.layout.om.IStylesheetParameterDescriptor)10 Map (java.util.Map)7 ILayoutAttributeDescriptor (org.apereo.portal.layout.om.ILayoutAttributeDescriptor)7 Transactional (org.springframework.transaction.annotation.Transactional)6 ConcurrentMap (java.util.concurrent.ConcurrentMap)5 ImmutableMap (com.google.common.collect.ImmutableMap)4 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)4 WindowState (javax.portlet.WindowState)4 HttpSession (javax.servlet.http.HttpSession)4 IUserProfile (org.apereo.portal.IUserProfile)4 IOutputPropertyDescriptor (org.apereo.portal.layout.om.IOutputPropertyDescriptor)4 IPerson (org.apereo.portal.security.IPerson)4 IUserInstance (org.apereo.portal.user.IUserInstance)4 MapPopulator (org.apereo.portal.utils.MapPopulator)4 IUserPreferencesManager (org.apereo.portal.IUserPreferencesManager)3 PreferencesScope (org.apereo.portal.layout.IStylesheetUserPreferencesService.PreferencesScope)3 IPortletEntity (org.apereo.portal.portlet.om.IPortletEntity)3