📄 portleturlimpl.java
字号:
/* * @author <a href="mailto:novotny@gridsphere.org">Jason Novotny</a> * @version $Id: PortletURLImpl.java 5032 2006-08-17 18:15:06Z novotny $ */package org.gridsphere.portlet.impl;import org.gridsphere.portlet.service.spi.PortletServiceFactory;import org.gridsphere.services.core.portal.PortalConfigService;import javax.portlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.*;/** * The <CODE>PortletURL</CODE> interface represents a URL * that reference the portlet itself. * <p/> * A PortletURL is created through the <CODE>RenderResponse</CODE>. * Parameters, a portlet mode, a window state and a security level * can be added to <CODE>PortletURL</CODE> objects. The PortletURL * must be converted to a String in order to embed it into * the markup generated by the portlet. * <p/> * There are two types of PortletURLs: * <ul> * <li>Action URLs, they are created with <CODE>RenderResponse.createActionURL</CODE>, and * trigger an action request followed by a render request. * <li>Render URLs, they are created with <CODE>RenderResponse.createRenderURL</CODE>, and * trigger a render request. * </ul> * <p/> * The string reprensentation of a PortletURL does not need to be a valid * URL at the time the portlet is generating its content. It may contain * special tokens that will be converted to a valid URL, by the portal, * before the content is returned to the client. */public class PortletURLImpl implements PortletURL { private HttpServletResponse res = null; private HttpServletRequest req = null; private boolean isSecure = false; private Map<String, Object> store = null; private boolean redirect = false; private boolean encoding = true; private boolean isRender = false; private String label = null; private String layout = null; private PortalConfigService configService = null; private PortletMode mode = null; private WindowState state = null; protected PortletURLImpl() { } /** * Constructs a PortletURL from a servlet request and response * * @param req the servlet request * @param res the servlet response * @param isRender true if this is a render url, false if an action url */ public PortletURLImpl(HttpServletRequest req, HttpServletResponse res, boolean isRender) { this.store = new HashMap<String, Object>(); this.res = res; this.req = req; this.isSecure = req.isSecure(); this.isRender = isRender; configService = (PortalConfigService) PortletServiceFactory.createPortletService(PortalConfigService.class, true); } /** * Indicates the window state the portlet should be in, if this * portlet URL triggers a request. * <p/> * A URL can not have more than one window state attached to it. * If more than one window state is set only the last one set * is attached to the URL. * * @param windowState the portlet window state * @throws WindowStateException if the portlet cannot switch to this state, * because the portal does not support this state, the portlet has not * declared in its deployment descriptor that it supports this state, or the current * user is not allowed to switch to this state. * The <code>PortletRequest.isWindowStateAllowed()</code> method can be used * to check if the portlet can set a given window state. * @see PortletRequest#isWindowStateAllowed */ public void setWindowState(WindowState windowState) throws WindowStateException { if (windowState == null) throw new IllegalArgumentException("Window state cannot be null"); boolean isSupported = false; PortalContext context = (PortalContext) req.getAttribute(SportletProperties.PORTAL_CONTEXT); Enumeration e = context.getSupportedWindowStates(); while (e.hasMoreElements()) { WindowState supported = (WindowState) e.nextElement(); if (supported.equals(windowState)) { isSupported = true; break; } } if (isSupported) { state = windowState; } else { throw new WindowStateException("Illegal window state", windowState); } } /** * Indicates the portlet mode the portlet must be in, if this * portlet URL triggers a request. * <p/> * A URL can not have more than one portlet mode attached to it. * If more than one portlet mode is set only the last one set * is attached to the URL. * * @param portletMode the portlet mode * @throws PortletModeException if the portlet cannot switch to this mode, * because the portal does not support this mode, the portlet has not * declared in its deployment descriptor that it supports this mode for the current markup, * or the current user is not allowed to switch to this mode. * The <code>PortletRequest.isPortletModeAllowed()</code> method can be used * to check if the portlet can set a given portlet mode. * @see PortletRequest#isPortletModeAllowed */ public void setPortletMode(PortletMode portletMode) throws PortletModeException { if (portletMode == null) throw new IllegalArgumentException("Portlet mode cannot be null"); Set allowedModes = (Set) req.getAttribute(SportletProperties.ALLOWED_MODES); if (allowedModes.contains(portletMode.toString())) { // hack to handle config mode if (portletMode.toString().equals("config")) portletMode = new PortletMode("configure"); mode = portletMode; } else { throw new PortletModeException("Illegal portlet mode", portletMode); } } /** * Sets the given String parameter to this URL. * <p/> * This method replaces all parameters with the given key. * <p/> * The <code>PortletURL</code> implementation 'x-www-form-urlencoded' encodes * all parameter names and values. Developers should not encode them. * <p/> * A portlet container may prefix the attribute names internally * in order to preserve a unique namespace for the portlet. * * @param name the parameter name * @param value the parameter value * @throws IllegalArgumentException if name or value are <code>null</code>. */ public void setParameter(String name, String value) { if ((name == null) || !(name instanceof String)) throw new IllegalArgumentException("name must be a non-null string"); if (value == null) throw new IllegalArgumentException("value is NULL"); if (isRender) { store.put(SportletProperties.RENDER_PARAM_PREFIX + name, value); } else { store.put(name, value); } } /** * Sets the given String array parameter to this URL. * <p/> * This method replaces all parameters with the given key. * <p/> * The <code>PortletURL</code> implementation 'x-www-form-urlencoded' encodes * all parameter names and values. Developers should not encode them. * <p/> * A portlet container may prefix the attribute names internally * in order to preserve a unique namespace for the portlet. * * @param name the parameter name * @param values the parameter values * @throws IllegalArgumentException if name or values are <code>null</code>. */ public void setParameter(String name, String[] values) { if ((name == null) || !(name instanceof String)) throw new IllegalArgumentException("name must be a non-null string"); if (values == null) throw new IllegalArgumentException("values is NULL"); if (values.length == 0) throw new IllegalArgumentException("values is NULL"); if (isRender) { store.put(SportletProperties.RENDER_PARAM_PREFIX + name, values); } else { store.put(name, values); } } /** * Sets a parameter map for this URL. * <p/> * All previously set parameters are cleared. * <p/> * The <code>PortletURL</code> implementation 'x-www-form-urlencoded' encodes * all parameter names and values. Developers should not encode them. * <p/> * A portlet container may prefix the attribute names internally, * in order to preserve a unique namespace for the portlet. * * @param parameters Map containing parameter names for * the render phase as * keys and parameter values as map * values. The keys in the parameter * map must be of type String. The values * in the parameter map must be of type * String array (<code>String[]</code>). * @throws IllegalArgumentException if parameters is <code>null</code>, if * any of the key/values in the Map are <code>null</code>, * if any of the keys is not a String, or if any of * the values is not a String array. */ public void setParameters(java.util.Map parameters) { if (parameters == null) { throw new IllegalArgumentException("parameters is NULL"); } // All previously set parameters are cleared.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -