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