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

📄 portletresponseimpl.java.svn-base

📁 portal越来越流行了
💻 SVN-BASE
字号:
/* * 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 javax.portlet.PortletResponse;import javax.portlet.PortletURL;import javax.portlet.ResourceURL;import javax.servlet.ServletOutputStream;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.pluto.NamespaceMapper;import org.apache.pluto.PortletContainer;import org.apache.pluto.PortletWindow;import org.apache.pluto.internal.InternalPortletResponse;import org.apache.pluto.spi.ResourceURLProvider;import org.apache.pluto.util.ArgumentUtility;import org.apache.pluto.util.DummyPrintWriter;import org.apache.pluto.util.PrintWriterServletOutputStream;import org.w3c.dom.DOMException;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * Abstract <code>javax.portlet.PortletResponse</code> implementation. * This class also implements InternalPortletResponse. * */public abstract class PortletResponseImpl extends HttpServletResponseWrapperimplements PortletResponse, InternalPortletResponse {		/** Logger. */    private static final Log LOG = LogFactory.getLog(PortletResponseImpl.class);	// Private Member Variables ------------------------------------------------		/** The portlet container. */    private PortletContainer container;        /** The portlet window. */    private PortletWindow portletWindow;    /** The servlet request of the target/portlet's web module. */    private HttpServletRequest httpServletRequest;        private boolean usingWriter;    private boolean usingStream;    private ServletOutputStream wrappedWriter;        private NamespaceMapper mapper;        /** True if we are in an include call. */    private boolean included = false;        /** True if we are in an forwarded call. */    private boolean forwarded = false;        private boolean requestForwarded = false;        // Constructor -------------------------------------------------------------        public PortletResponseImpl(PortletContainer container,                               PortletWindow portletWindow,                               HttpServletRequest servletRequest,                               HttpServletResponse servletResponse) {        super(servletResponse);        this.container = container;        this.httpServletRequest = servletRequest;        this.portletWindow = portletWindow;        this.mapper = container.getOptionalContainerServices().getNamespaceMapper();    }            // PortletResponse Impl ----------------------------------------------------        public void addProperty(String name, String value) {    	ArgumentUtility.validateNotNull("propertyName", name);        container.getRequiredContainerServices()        		.getPortalCallbackService().getRequestPropertyProvider()        		.addProperty(        				getHttpServletRequest(),        				portletWindow,        				name, value);    }        public void addProperty(String name, String value, int scope) {    	// FIXME: What should this do? (scope seems to be new)    	ArgumentUtility.validateNotNull("propertyName", name);        container.getRequiredContainerServices()        		.getPortalCallbackService().getRequestPropertyProvider()        		.addProperty(        				getHttpServletRequest(),        				portletWindow,        				name, value);    }        public void addProperty(String key, Element element) {    	container.getRequiredContainerServices().getPortalCallbackService().getRequestPropertyProvider().addProperty(getHttpServletRequest(), portletWindow, key, element);	}	public void addProperty(Cookie cookie) {		container.getRequiredContainerServices().getPortalCallbackService().getRequestPropertyProvider().addCookieProperty(getHttpServletRequest(), portletWindow, cookie);	}    public void setProperty(String name, String value) {    	ArgumentUtility.validateNotNull("propertyName", name);        container.getRequiredContainerServices()                .getPortalCallbackService().getRequestPropertyProvider()                .setProperty(                        getHttpServletRequest(),                        portletWindow,                        name, value);    }    public String encodeURL(String path) {        if (path.indexOf("://") == -1 && !path.startsWith("/")) {            throw new IllegalArgumentException(                "only absolute URLs or full path URIs are allowed");        }                ResourceURLProvider provider = getContainer()        		.getRequiredContainerServices()        		.getPortalCallbackService()        		.getResourceURLProvider(        				httpServletRequest,        				portletWindow);        if (path.indexOf("://") != -1) {            provider.setAbsoluteURL(path);        } else {            provider.setFullPath(path);        }        return getHttpServletResponse().encodeURL(provider.toString());    }            // InternalPortletResponse impl --------------------------------------------        public PortletWindow getPortletWindow() {        return portletWindow;    }            // Internal Methods --------------------------------------------------------        /**     * Returns the portlet container.     * @return the portlet container.     */    protected PortletContainer getContainer() {        return container;    }        /**     * Returns the nested HttpServletRequest instance.     * @return the nested HttpServletRequest instance.     */    protected HttpServletRequest getHttpServletRequest() {        return httpServletRequest;    }        /**     * Returns the nested HttpServletResponse instance.     * @return the nested HttpServletResponse instance.     */    public HttpServletResponse getHttpServletResponse() {        return (HttpServletResponse) super.getResponse();    }            // HttpServletResponse Methods ---------------------------------------------        public String encodeUrl(String url) {        return this.encodeURL(url);    }        /**     * TODO: javadoc about why we are using a wrapped writer here.     * @see org.apache.pluto.util.PrintWriterServletOutputStream     */    public ServletOutputStream getOutputStream()    throws IllegalStateException, IOException {        if (usingWriter) {            throw new IllegalStateException(            		"getPortletOutputStream can't be used "            		+ "after getWriter was invoked.");        }        if (wrappedWriter == null) {            wrappedWriter = new PrintWriterServletOutputStream(            		getHttpServletResponse().getWriter());        }        usingStream = true;        return wrappedWriter;    }        public PrintWriter getWriter()    throws IllegalStateException, IOException {        if (usingStream) {            throw new IllegalStateException(            		"getWriter can't be used "            		+ "after getOutputStream was invoked.");        }        usingWriter = true;        if (isRequestForwarded()&& !isForwarded() && !isIncluded()){			return new DummyPrintWriter(super.getWriter());		}        return getHttpServletResponse().getWriter();    }    public PortletURL createRenderURL() {	    return createURL(false,false);	}	public PortletURL createActionURL() {	    return createURL(true,false);	}		public ResourceURL createResourceURL(){		return new ResourceURLImpl(getContainer(),	                              getPortletWindow(),	                              getHttpServletRequest(),	                              getHttpServletResponse());	}		public ResourceURL createResourceURL(boolean markupContainsPortletURLs){		throw new UnsupportedOperationException("This method needs to be implemented.");	}	/**	 * Creates a portlet URL.	 * TODO: make dynamic? as service?	 * @param isAction  true for an action URL, false for a render URL.	 * @return the created portlet (action/render) URL.	 */	private PortletURL createURL(boolean isAction, boolean isResourceServing) {	    return new PortletURLImpl(getContainer(),	                              getPortletWindow(),	                              getHttpServletRequest(),	                              getHttpServletResponse(),	                              isAction);	}	public String getNamespace() {	     String namespace = mapper.encode(getPortletWindow().getId(), "");	     StringBuffer validNamespace = new StringBuffer();	     for (int i = 0; i < namespace.length(); i++) {	     	char ch = namespace.charAt(i);	     	if (Character.isJavaIdentifierPart(ch)) {	     		validNamespace.append(ch);	     	} else {	     		validNamespace.append('_');	     	}	     }	     return validNamespace.toString();	}	    @Override	public void addCookie(Cookie arg0) {		if (isIncluded()){			//no operation		}		else if (isForwarded()){			addProperty(arg0);		}		else			super.addCookie(arg0);	}	    @Override	public boolean containsHeader(String arg0) {		if (isForwarded() || isIncluded()){			return false;		}		else			return super.containsHeader(arg0);	}		@Override	public String encodeRedirectUrl(String arg0) {		if (isForwarded() || isIncluded()){			return null;		}		else		return super.encodeRedirectUrl(arg0);	}	@Override	public String encodeRedirectURL(String arg0) {		if (isForwarded() || isIncluded()){			return null;		}		else			return super.encodeRedirectURL(arg0);	}		@Override	public void sendError(int arg0) throws IOException {		if (isForwarded() || isIncluded()){			// no operation		}		else			super.sendError(arg0);	}			@Override	public void sendError(int arg0, String arg1) throws IOException {		if (isForwarded() || isIncluded()){			// no operation		}		else			super.sendError(arg0, arg1);	}		public Element createElement(String tagName) throws DOMException {        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();        DocumentBuilder docBuilder;		try {			docBuilder = dbfac.newDocumentBuilder();			Document doc = docBuilder.newDocument();			return doc.createElement(tagName);		} catch (ParserConfigurationException e) {            LOG.warn(e);		}		throw new DOMException((short) 0, "Initialization fail");	}// InternalRenderResponse Impl ---------------------------------------------	public void setIncluded(boolean included) {        this.included = included;    }    public boolean isIncluded() {        return included;    }        public boolean isForwarded() {		return forwarded;	}	public void setForwarded(boolean forwared) {		this.forwarded = forwared;			}	public boolean isForwardedAllowed(){		if (usingWriter || usingStream)			return false;		else			return true;	}	public boolean isRequestForwarded() {		return requestForwarded;	}	public void setRequestForwarded() {		requestForwarded = true;	}		}

⌨️ 快捷键说明

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