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

📄 stateawareresponseimpl.java.svn-base

📁 portal越来越流行了
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.pluto.internal.impl;import java.io.IOException;import java.io.PrintWriter;import java.io.Serializable;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Locale;import java.util.Map;import javax.portlet.EventRequest;import javax.portlet.PortalContext;import javax.portlet.PortletMode;import javax.portlet.PortletModeException;import javax.portlet.StateAwareResponse;import javax.portlet.WindowState;import javax.portlet.WindowStateException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;import javax.xml.namespace.QName;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.pluto.PortletContainer;import org.apache.pluto.PortletWindow;import org.apache.pluto.om.portlet.PortletDefinition;import org.apache.pluto.om.portlet.Supports;import org.apache.pluto.spi.EventProvider;import org.apache.pluto.spi.PortalCallbackService;import org.apache.pluto.spi.ResourceURLProvider;import org.apache.pluto.util.DummyPrintWriter;import org.apache.pluto.util.DummyServletOutputStream;import org.apache.pluto.util.StringUtils;/** * Implementation of JSR-286 <code>StateAwareResponse</code>. * * @since 2.0 */public class StateAwareResponseImpl extends PortletResponseImpl implements		StateAwareResponse {		/** Logger. */    private static final Log LOG = LogFactory.getLog(StateAwareResponseImpl.class);	boolean redirectAllowed = true;	protected boolean redirected;	private String redirectLocation;    	private Map<String, String[]> publicRenderParameter = new HashMap<String, String[]>();	    private Map<String, String[]> renderParameters = new HashMap<String, String[]>();    private WindowState windowState = null;    private PortletMode portletMode = null;	protected PortalCallbackService callback;    private PortalContext context;    private EventRequest eventRequest;    	public StateAwareResponseImpl(PortletContainer container,			            PortletWindow portletWindow,			            HttpServletRequest servletRequest,			            HttpServletResponse servletResponse) {		super(container, portletWindow, servletRequest,		servletResponse);		context = container.getRequiredContainerServices().getPortalContext();		callback = container.getRequiredContainerServices().getPortalCallbackService();	}		/* (non-Javadoc)	 * @see javax.portlet.StateAwareResponse#setEvent(javax.xml.namespace.QName, java.lang.Object)	 */	public void setEvent(QName qname, Serializable value){		if (qname == null) {			throw new IllegalArgumentException();		}				EventProvider provider = callback.getEventProvider(				getHttpServletRequest(),getPortletWindow()); 			provider.registerToFireEvent(qname, value);		redirectAllowed = false;	}	/* (non-Javadoc)	 * @see javax.portlet.StateAwareResponse#setEvent(java.lang.String, java.lang.Object)	 */	public void setEvent(String name, Serializable value) {	    PortletWindow window = getPortletWindow();        String defaultNamespace;        defaultNamespace = window.getPortletEntity().getPortletDefinition().getApplication().getDefaultNamespace();        QName qname = new QName(defaultNamespace, name);        setEvent(qname, value);        redirectAllowed = false;	}	/* (non-Javadoc)	 * @see javax.servlet.http.HttpServletResponseWrapper#sendRedirect(java.lang.String)	 */	public void sendRedirect(String location) throws java.io.IOException {        if (redirectAllowed) {            if (location != null) {                HttpServletResponse redirectResponse = getHttpServletResponse();                while (redirectResponse instanceof HttpServletResponseWrapper) {                    redirectResponse = (HttpServletResponse)                        ((HttpServletResponseWrapper)redirectResponse).getResponse();                }                ResourceURLProvider provider = callback.getResourceURLProvider(                                getHttpServletRequest(),                                getPortletWindow()                );                if (location.indexOf("://") != -1) {                    provider.setAbsoluteURL(location);                } else {                    provider.setFullPath(location);                }                location =                redirectResponse.encodeRedirectURL(provider.toString());                if (location.indexOf("/") == -1)                	throw new IllegalArgumentException("There is a relative path given, an IllegalArgumentException must be thrown.");                //redirectResponse.sendRedirect(location);                redirectLocation = location;                redirected = true;            }        } else {            throw new java.lang.IllegalStateException(                "Can't invoke sendRedirect() after certain methods have been called");        }    }        public String getRedirectLocation() {        return redirectLocation;    }	////	 javax.portlet.ActionResponse	//    public void setWindowState(WindowState windowState)        throws WindowStateException {        if (redirected) {            throw new IllegalStateException(                "it is not allowed to invoke setWindowState after sendRedirect has been called");        }        if (isWindowStateAllowed(windowState)) {            this.windowState = windowState;        } else {            throw new WindowStateException("Can't set this WindowState",                                           windowState);        }        redirectAllowed = false;    }	        public void setPortletMode(PortletMode portletMode)        throws PortletModeException {        if (redirected) {            throw new IllegalStateException(                "it is not allowed to invoke setPortletMode after sendRedirect has been called");        }        // check if portal supports portlet mode        boolean supported = isPortletModeAllowed(portletMode);        // if porlet mode is allowed        if (supported) {            this.portletMode = portletMode;        } else {            throw new PortletModeException("Can't set this PortletMode",                                           portletMode);        }        redirectAllowed = false;    }        public void setRenderParameters(java.util.Map<String, String[]> parameters) {        if (redirected) {            throw new IllegalStateException(                "Can't invoke setRenderParameters() after sendRedirect() has been called");        }        if (parameters == null) {            throw new IllegalArgumentException(                "Render parameters must not be null.");        }        for (Iterator iter = parameters.entrySet().iterator(); iter.hasNext();) {            Map.Entry entry = (Map.Entry) iter.next();            if (!(entry.getKey() instanceof String)) {                throw new IllegalArgumentException(                    "Key must not be null and of type java.lang.String.");            }            if (!(entry.getValue() instanceof String[])) {                throw new IllegalArgumentException(                    "Value must not be null and of type java.lang.String[].");            }        }                renderParameters.clear();        publicRenderParameter.clear();        if (parameters.keySet()!= null){        	for (Object key : parameters.keySet()) {        		this.setRenderParameter((String)key, (String[])parameters.get(key));    		}        }                redirectAllowed = false;    }        public void setRenderParameter(String key, String value) {        if (redirected) {            throw new IllegalStateException(                "Can't invoke setRenderParameter() after sendRedirect() has been called");        }        if ((key == null || value == null)) {            throw new IllegalArgumentException(                "Render parameter key must not be null.");        }        List<String> publicRenderParameterNames = super.getPortletWindow().getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();        if (publicRenderParameterNames != null){	    	if (publicRenderParameterNames.contains(key)){	        	publicRenderParameter.put(key, new String[] {value});	        }	        else{	        	renderParameters.put(key, new String[]{value});	        }        }        else{        	renderParameters.put(key, new String[]{value});        }        redirectAllowed = false;    }        public void setRenderParameter(String key, String[] values) {    	if (redirected) {            throw new IllegalStateException(                "Can't invoke setRenderParameter() after sendRedirect() has been called");        }                        if (key == null || values == null) {	        throw new IllegalArgumentException(	        	"name and values must not be null or values be an empty array");	    }	    List<String> publicRenderParameterNames = super.getPortletWindow().getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();	    if (publicRenderParameterNames != null){		    if (publicRenderParameterNames.contains(key)){		    	publicRenderParameter.put(key,StringUtils.copy(values));		    }		    else{		    	renderParameters.put(key, StringUtils.copy(values));		    }	    }	    else{	    	renderParameters.put(key, StringUtils.copy(values));	    }    }    // --------------------------------------------------------------------------------------------        // org.apache.pluto.core.InternalActionResponse implementation --------------------------------    public Map getRenderParameters() {        return renderParameters;    }        public Map<String, String[]> getRenderParameterMap() {		return renderParameters;	}        public Map<String, String[]> getPublicRenderParameter(){    	return publicRenderParameter;    }    public PortletMode getChangedPortletMode() {        return this.portletMode;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -