⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portleturlimpl.java

📁 GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。GridSphere 是在欧盟提供基金的 GridLab 项目下开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @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 + -