Search in sources :

Example 1 with WindowState

use of javax.portlet.WindowState in project uPortal by Jasig.

the class UrlSyntaxProviderImpl method addPortletUrlData.

/** Add the provided portlet url builder data to the url string builder */
protected void addPortletUrlData(final HttpServletRequest request, final UrlStringBuilder url, final UrlType urlType, final IPortletUrlBuilder portletUrlBuilder, final IPortletWindowId targetedPortletWindowId, final boolean statelessUrl) {
    final IPortletWindowId portletWindowId = portletUrlBuilder.getPortletWindowId();
    final boolean targeted = portletWindowId.equals(targetedPortletWindowId);
    IPortletWindow portletWindow = null;
    //The targeted portlet doesn't need namespaced parameters
    final String prefixedPortletWindowId;
    final String suffixedPortletWindowId;
    // Track whether or not we are adding parameters to the URL for non-targeted or delegate portlets.
    boolean addedNonTargetedPortletParam = false;
    if (targeted) {
        prefixedPortletWindowId = "";
        suffixedPortletWindowId = "";
    } else {
        final String portletWindowIdStr = portletWindowId.toString();
        prefixedPortletWindowId = SEPARATOR + portletWindowIdStr;
        suffixedPortletWindowId = portletWindowIdStr + SEPARATOR;
        //targeted portlets can never be delegates (it is always the top most parent that is targeted)
        portletWindow = this.portletWindowRegistry.getPortletWindow(request, portletWindowId);
        final IPortletWindowId delegationParentId = portletWindow.getDelegationParentId();
        if (delegationParentId != null) {
            url.addParameter(PARAM_DELEGATE_PARENT + prefixedPortletWindowId, delegationParentId.getStringId());
            addedNonTargetedPortletParam = true;
        }
    }
    switch(urlType) {
        case RESOURCE:
            {
                final String cacheability = portletUrlBuilder.getCacheability();
                if (cacheability != null) {
                    url.addParameter(PARAM_CACHEABILITY + prefixedPortletWindowId, cacheability);
                    addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
                }
                final String resourceId = portletUrlBuilder.getResourceId();
                if (!targeted && resourceId != null) {
                    url.addParameter(PARAM_RESOURCE_ID + prefixedPortletWindowId, resourceId);
                    // We know we are !targeted, but kept the assignement consistent with the other similar
                    // assignments for clarity.
                    addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
                }
                break;
            }
        default:
            {
                //Add requested portlet mode
                final PortletMode portletMode = portletUrlBuilder.getPortletMode();
                if (portletMode != null) {
                    url.addParameter(PARAM_PORTLET_MODE + prefixedPortletWindowId, portletMode.toString());
                    addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
                } else if (targeted && statelessUrl) {
                    portletWindow = portletWindow != null ? portletWindow : this.portletWindowRegistry.getPortletWindow(request, portletWindowId);
                    final PortletMode currentPortletMode = portletWindow.getPortletMode();
                    url.addParameter(PARAM_PORTLET_MODE + prefixedPortletWindowId, currentPortletMode.toString());
                    // We know we are targeted, but kept the assignement consistent with the other similar
                    // assignments for clarity. Will always be a nop.
                    addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
                }
                //Add requested window state if it isn't included on the path
                final WindowState windowState = portletUrlBuilder.getWindowState();
                if (windowState != null && (!targeted || !PATH_WINDOW_STATES.contains(windowState))) {
                    url.addParameter(PARAM_WINDOW_STATE + prefixedPortletWindowId, windowState.toString());
                    addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
                }
                break;
            }
    }
    if (portletUrlBuilder.getCopyCurrentRenderParameters()) {
        url.addParameter(PARAM_COPY_PARAMETERS + suffixedPortletWindowId);
        addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
    }
    final Map<String, String[]> parameters = portletUrlBuilder.getParameters();
    if (!parameters.isEmpty()) {
        url.addParametersArray(PORTLET_PARAM_PREFIX + suffixedPortletWindowId, parameters);
        addedNonTargetedPortletParam = !targeted ? true : addedNonTargetedPortletParam;
    }
    // URL since there are no parameters actually being passed to the searched portlets.
    if (addedNonTargetedPortletParam) {
        url.addParameter(PARAM_ADDITIONAL_PORTLET, portletWindowId.toString());
    }
}
Also used : WindowState(javax.portlet.WindowState) IPortletWindowId(org.apereo.portal.portlet.om.IPortletWindowId) IPortletWindow(org.apereo.portal.portlet.om.IPortletWindow) PortletMode(javax.portlet.PortletMode)

Example 2 with WindowState

use of javax.portlet.WindowState in project uPortal by Jasig.

the class UrlSyntaxProviderImpl method parseLegacyPortalUrl.

protected IPortalRequestInfo parseLegacyPortalUrl(HttpServletRequest request, Map<String, String[]> parameterMap) {
    final PortalRequestInfoImpl portalRequestInfo = new PortalRequestInfoImpl();
    final String[] fname = parameterMap.remove(LEGACY_PARAM_PORTLET_FNAME);
    if (fname != null && fname.length > 0) {
        final IPortletWindow portletWindow = this.portletWindowRegistry.getOrCreateDefaultPortletWindowByFname(request, fname[0]);
        if (portletWindow != null) {
            logger.debug("Legacy fname parameter {} resolved to {}", fname[0], portletWindow);
            final IPortletWindowId portletWindowId = portletWindow.getPortletWindowId();
            portalRequestInfo.setTargetedPortletWindowId(portletWindowId);
            final PortletRequestInfoImpl portletRequestInfo = portalRequestInfo.getPortletRequestInfo(portletWindowId);
            //Check the portlet request type
            final String[] type = parameterMap.remove(LEGACY_PARAM_PORTLET_REQUEST_TYPE);
            if (type != null && type.length > 0 && "ACTION".equals(type[0])) {
                portalRequestInfo.setUrlType(UrlType.ACTION);
            }
            //Set the window state
            final String[] state = parameterMap.remove(LEGACY_PARAM_PORTLET_STATE);
            if (state != null && state.length > 0) {
                final WindowState windowState = PortletUtils.getWindowState(state[0]);
                //If this isn't an action request only allow PATH communicated WindowStates as none of the other options make sense
                if (portalRequestInfo.getUrlType() == UrlType.ACTION || PATH_WINDOW_STATES.contains(windowState)) {
                    portletRequestInfo.setWindowState(windowState);
                }
            }
            //If no window state was set assume MAXIMIZED
            if (portletRequestInfo.getWindowState() == null) {
                portletRequestInfo.setWindowState(WindowState.MAXIMIZED);
            }
            //Set the portlet mode
            final String[] mode = parameterMap.remove(LEGACY_PARAM_PORTLET_MODE);
            if (mode != null && mode.length > 0) {
                final PortletMode portletMode = PortletUtils.getPortletMode(mode[0]);
                portletRequestInfo.setPortletMode(portletMode);
            }
            //Set the parameters
            final Map<String, List<String>> portletParameters = portletRequestInfo.getPortletParameters();
            for (final Map.Entry<String, String[]> parameterEntry : parameterMap.entrySet()) {
                final String prefixedName = parameterEntry.getKey();
                //If the parameter starts with the portlet param prefix
                if (prefixedName.startsWith(LEGACY_PARAM_PORTLET_PARAM_PREFX)) {
                    final String name = prefixedName.substring(LEGACY_PARAM_PORTLET_PARAM_PREFX.length());
                    portletParameters.put(name, Arrays.asList(parameterEntry.getValue()));
                }
            }
            //Set the url state based on the window state
            final UrlState urlState = this.determineUrlState(portletWindow, portletRequestInfo.getWindowState());
            portalRequestInfo.setUrlState(urlState);
        } else {
            logger.debug("Could not find portlet for legacy fname fname parameter {}", fname[0]);
        }
    }
    //Check root=uP_root
    final String[] root = parameterMap.remove(LEGACY_PARAM_LAYOUT_ROOT);
    if (root != null && root.length > 0) {
        if (LEGACY_PARAM_LAYOUT_ROOT_VALUE.equals(root[0])) {
            //Check uP_sparam=activeTab
            final String[] structParam = parameterMap.remove(LEGACY_PARAM_LAYOUT_STRUCT_PARAM);
            if (structParam != null && structParam.length > 0) {
                if (LEGACY_PARAM_LAYOUT_TAB_ID.equals(structParam[0])) {
                    //Get the active tab id
                    final String[] activeTabId = parameterMap.remove(LEGACY_PARAM_LAYOUT_TAB_ID);
                    if (activeTabId != null && activeTabId.length > 0) {
                        //Get the user's layout and do xpath for tab at index=activeTabId[0]
                        final IUserInstance userInstance = this.userInstanceManager.getUserInstance(request);
                        final IUserPreferencesManager preferencesManager = userInstance.getPreferencesManager();
                        final IUserLayoutManager userLayoutManager = preferencesManager.getUserLayoutManager();
                        final IUserLayout userLayout = userLayoutManager.getUserLayout();
                        final String nodeId = this.xpathOperations.doWithExpression("/layout/folder/folder[@type='regular' and @hidden='false'][position() = $activeTabId]/@ID", Collections.singletonMap("activeTabId", activeTabId[0]), new Function<XPathExpression, String>() {

                            @Override
                            public String apply(XPathExpression xPathExpression) {
                                return userLayout.findNodeId(xPathExpression);
                            }
                        });
                        //Found nodeId for activeTabId
                        if (nodeId != null) {
                            logger.debug("Found layout node {} for legacy activeTabId parameter {}", nodeId, activeTabId[0]);
                            portalRequestInfo.setTargetedLayoutNodeId(nodeId);
                        } else {
                            logger.debug("No layoout node found for legacy activeTabId parameter {}", activeTabId[0]);
                        }
                    }
                }
            }
        }
    }
    return portalRequestInfo;
}
Also used : WindowState(javax.portlet.WindowState) XPathExpression(javax.xml.xpath.XPathExpression) IUserLayout(org.apereo.portal.layout.IUserLayout) IPortletWindow(org.apereo.portal.portlet.om.IPortletWindow) PortletMode(javax.portlet.PortletMode) IUserInstance(org.apereo.portal.user.IUserInstance) LinkedList(java.util.LinkedList) List(java.util.List) IUserPreferencesManager(org.apereo.portal.IUserPreferencesManager) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) IUserLayoutManager(org.apereo.portal.layout.IUserLayoutManager) IPortletWindowId(org.apereo.portal.portlet.om.IPortletWindowId)

Example 3 with WindowState

use of javax.portlet.WindowState in project uPortal by Jasig.

the class UrlSyntaxProviderImpl method determineUrlState.

/** Determine the {@link UrlState} to use for the targeted portlet window */
protected UrlState determineUrlState(final IPortletWindow portletWindow, final WindowState requestedWindowState) {
    //Determine the UrlState based on the WindowState of the targeted portlet
    final WindowState currentWindowState = portletWindow.getWindowState();
    final WindowState urlWindowState = requestedWindowState != null ? requestedWindowState : currentWindowState;
    if (WindowState.MAXIMIZED.equals(urlWindowState)) {
        return UrlState.MAX;
    }
    if (IPortletRenderer.DETACHED.equals(urlWindowState)) {
        return UrlState.DETACHED;
    }
    if (IPortletRenderer.EXCLUSIVE.equals(urlWindowState)) {
        return UrlState.EXCLUSIVE;
    }
    if (!WindowState.NORMAL.equals(urlWindowState) && !WindowState.MINIMIZED.equals(urlWindowState)) {
        this.logger.warn("Unknown WindowState '" + urlWindowState + "' specified for portlet window " + portletWindow + ", defaulting to UrlState.NORMAL");
    }
    return UrlState.NORMAL;
}
Also used : WindowState(javax.portlet.WindowState)

Example 4 with WindowState

use of javax.portlet.WindowState in project uPortal by Jasig.

the class PortletWindowAttributeSource method getCacheKey.

@Override
public final CacheKey getCacheKey(HttpServletRequest request, HttpServletResponse response) {
    final Set<IPortletWindow> portletWindows = this.portletWindowRegistry.getAllLayoutPortletWindows(request);
    final CacheKeyBuilder cacheKeyBuilder = CacheKey.builder(this.name);
    for (final IPortletWindow portletWindow : portletWindows) {
        if (portletWindow != null) {
            final IPortletWindowId portletWindowId = portletWindow.getPortletWindowId();
            final WindowState windowState = portletWindow.getWindowState();
            final PortletMode portletMode = portletWindow.getPortletMode();
            cacheKeyBuilder.addAll(portletWindowId, windowState.toString(), portletMode.toString());
        } else {
            this.logger.warn("portletWindowRegistry#getAllLayoutPortletWindows() returned a null portletWindow");
        }
    }
    return cacheKeyBuilder.build();
}
Also used : WindowState(javax.portlet.WindowState) CacheKeyBuilder(org.apereo.portal.utils.cache.CacheKey.CacheKeyBuilder) IPortletWindow(org.apereo.portal.portlet.om.IPortletWindow) IPortletWindowId(org.apereo.portal.portlet.om.IPortletWindowId) PortletMode(javax.portlet.PortletMode)

Example 5 with WindowState

use of javax.portlet.WindowState in project uPortal by Jasig.

the class PortletWindowRegistryImpl method storePortletWindow.

@Override
public void storePortletWindow(HttpServletRequest request, IPortletWindow portletWindow) {
    if (isDisablePersistentWindowStates(request)) {
        return;
    }
    final IUserInstance userInstance = this.userInstanceManager.getUserInstance(request);
    final IPerson person = userInstance.getPerson();
    if (person.isGuest()) {
        //Never persist things for the guest user, just rely on in-memory storage
        return;
    }
    final IStylesheetDescriptor themeStylesheetDescriptor = this.getThemeStylesheetDescriptor(request);
    final WindowState windowState = portletWindow.getWindowState();
    final IPortletEntity portletEntity = portletWindow.getPortletEntity();
    final WindowState entityWindowState = portletEntity.getWindowState(themeStylesheetDescriptor);
    //If the window and entity states are different
    if (windowState != entityWindowState && !windowState.equals(entityWindowState)) {
        final WindowState defaultWindowState = this.getDefaultWindowState(themeStylesheetDescriptor);
        //If a window state is set and is one of the persistent states set it on the entity
        if (!defaultWindowState.equals(windowState) && persistentWindowStates.contains(windowState)) {
            portletEntity.setWindowState(themeStylesheetDescriptor, windowState);
        } else //If not remove the state from the entity
        if (entityWindowState != null) {
            portletEntity.setWindowState(themeStylesheetDescriptor, null);
        }
        //Persist the modified entity
        this.portletEntityRegistry.storePortletEntity(request, portletEntity);
    }
}
Also used : IUserInstance(org.apereo.portal.user.IUserInstance) WindowState(javax.portlet.WindowState) IPerson(org.apereo.portal.security.IPerson) IPortletEntity(org.apereo.portal.portlet.om.IPortletEntity) IStylesheetDescriptor(org.apereo.portal.layout.om.IStylesheetDescriptor)

Aggregations

WindowState (javax.portlet.WindowState)19 PortletMode (javax.portlet.PortletMode)11 IPortletWindowId (org.apereo.portal.portlet.om.IPortletWindowId)10 IPortletWindow (org.apereo.portal.portlet.om.IPortletWindow)7 Map (java.util.Map)4 IStylesheetDescriptor (org.apereo.portal.layout.om.IStylesheetDescriptor)4 IPortletEntity (org.apereo.portal.portlet.om.IPortletEntity)4 List (java.util.List)3 StringWriter (java.io.StringWriter)2 HashMap (java.util.HashMap)2 LinkedHashMap (java.util.LinkedHashMap)2 LinkedList (java.util.LinkedList)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 Transformer (javax.xml.transform.Transformer)2 StreamResult (javax.xml.transform.stream.StreamResult)2 DelegateState (org.apereo.portal.api.portlet.DelegateState)2 DelegationRequest (org.apereo.portal.api.portlet.DelegationRequest)2 MockPortletWindowId (org.apereo.portal.mock.portlet.om.MockPortletWindowId)2 IPerson (org.apereo.portal.security.IPerson)2 IPortalRequestInfo (org.apereo.portal.url.IPortalRequestInfo)2