You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by at...@apache.org on 2009/03/06 17:11:52 UTC
svn commit: r750954 [4/5] - in /portals/pluto/trunk:
pluto-container/src/main/java/org/apache/pluto/core/
pluto-container/src/main/java/org/apache/pluto/descriptors/portlet/
pluto-container/src/main/java/org/apache/pluto/descriptors/services/jaxb/
plut...
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletResponseImpl.java Fri Mar 6 16:11:51 2009
@@ -16,399 +16,201 @@
*/
package org.apache.pluto.internal.impl;
-import java.io.IOException;
-import java.io.PrintWriter;
+import java.util.Enumeration;
+import javax.portlet.PortalContext;
+import javax.portlet.PortletMode;
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.om.portlet.Supports;
import org.apache.pluto.spi.ResourceURLProvider;
+import org.apache.pluto.spi.optional.PortletResponseContext;
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 HttpServletResponseWrapper
-implements PortletResponse, InternalPortletResponse {
+public abstract class PortletResponseImpl implements PortletResponse
+{
/** 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;
+ private String namespace;
+ private PortletResponseContext responseContext;
// 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();
+ public PortletResponseImpl(PortletResponseContext responseContext) {
+ this.responseContext = responseContext;
}
-
- // PortletResponse Impl ----------------------------------------------------
-
- public void addProperty(String name, String value) {
- ArgumentUtility.validateNotNull("propertyName", name);
- container.getRequiredContainerServices()
- .getPortalCallbackService().getPropertyManager()
- .addResponseProperty(
- getHttpServletRequest(), getHttpServletResponse(),
- portletWindow,
- container.getRequiredContainerServices().getContainerInvocationService().getInvocation().getMethod(),
- 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().getPropertyManager()
- .addResponseProperty(
- getHttpServletRequest(), getHttpServletResponse(),
- portletWindow,
- container.getRequiredContainerServices().getContainerInvocationService().getInvocation().getMethod(),
- name, value);
- }
-
- public void addProperty(String key, Element element) {
- container.getRequiredContainerServices()
- .getPortalCallbackService().getPropertyManager()
- .addResponseProperty(
- getHttpServletRequest(), getHttpServletResponse(),
- portletWindow,
- container.getRequiredContainerServices().getContainerInvocationService().getInvocation().getMethod(),
- key, element);
- }
-
-
- public void addProperty(Cookie cookie) {
- container.getRequiredContainerServices()
- .getPortalCallbackService().getPropertyManager()
- .addResponseProperty(
- getHttpServletRequest(), getHttpServletResponse(),
- portletWindow,
- container.getRequiredContainerServices().getContainerInvocationService().getInvocation().getMethod(),
- cookie);
- }
-
- public void setProperty(String name, String value) {
- ArgumentUtility.validateNotNull("propertyName", name);
- container.getRequiredContainerServices()
- .getPortalCallbackService().getPropertyManager()
- .setResponseProperty(
- getHttpServletRequest(), getHttpServletResponse(),
- portletWindow,
- container.getRequiredContainerServices().getContainerInvocationService().getInvocation().getMethod(),
- 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());
+ protected PortletResponseContext getResponseContext()
+ {
+ return responseContext;
}
-
- // InternalPortletResponse impl --------------------------------------------
-
- public PortletWindow getPortletWindow() {
- return portletWindow;
+ protected PortletWindow getPortletWindow()
+ {
+ return responseContext.getPortletWindow();
}
-
-
- // Internal Methods --------------------------------------------------------
-
- /**
- * Returns the portlet container.
- * @return the portlet container.
- */
- protected PortletContainer getContainer() {
- return container;
+
+ protected PortletContainer getPortletContainer()
+ {
+ return responseContext.getContainer();
}
- /**
- * Returns the nested HttpServletRequest instance.
- * @return the nested HttpServletRequest instance.
- */
- protected HttpServletRequest getHttpServletRequest() {
- return httpServletRequest;
+ protected PortalContext getPortalContext()
+ {
+ return getPortletContainer().getRequiredContainerServices().getPortalContext();
}
-
- /**
- * Returns the nested HttpServletResponse instance.
- * @return the nested HttpServletResponse instance.
- */
- public HttpServletResponse getHttpServletResponse() {
- return (HttpServletResponse) super.getResponse();
+
+ protected HttpServletRequest getServletRequest()
+ {
+ return responseContext.getServletRequest();
}
-
- // HttpServletResponse Methods ---------------------------------------------
-
- public String encodeUrl(String url) {
- return this.encodeURL(url);
+ protected HttpServletResponse getServletResponse()
+ {
+ return responseContext.getServletResponse();
}
-
- /**
- * 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) {
- try {
- wrappedWriter = getHttpServletResponse().getOutputStream();
- }
- catch (IllegalStateException ise) {
- // handle situation where underlying ServletResponse its getWriter()
- // has been called already anyway: return a wrapped PrintWriter in that case
- wrappedWriter = new PrintWriterServletOutputStream(getHttpServletResponse().getWriter(),
- getHttpServletResponse().getCharacterEncoding());
+
+ protected boolean isPortletModeAllowed(PortletMode mode)
+ {
+ return isPortletModeAllowedByPortlet(mode) && isPortletModeAllowedByPortal(mode);
+ }
+
+ protected boolean isPortletModeAllowedByPortlet(PortletMode portletMode)
+ {
+ //Not checking for VIEW mode in portetlDefinition, as VIEW mode is default
+ // as per specs.
+ if(PortletMode.VIEW.equals(portletMode))
+ return true;
+
+ String mode = portletMode.toString();
+ for (Supports sub : getPortletWindow().getPortletEntity().getPortletDefinition().getSupports())
+ {
+ for (String pm : sub.getPortletModes())
+ {
+ if (mode.equalsIgnoreCase(pm))
+ {
+ return true;
+ }
}
}
- usingStream = true;
- return wrappedWriter;
+ return false;
}
-
- public PrintWriter getWriter()
- throws IllegalStateException, IOException {
- if (usingStream) {
- throw new IllegalStateException(
- "getWriter can't be used "
- + "after getOutputStream was invoked.");
+
+ protected boolean isPortletModeAllowedByPortal(PortletMode mode)
+ {
+ Enumeration<PortletMode> supportedModes = getPortalContext().getSupportedPortletModes();
+ while (supportedModes.hasMoreElements())
+ {
+ if (supportedModes.nextElement().equals(mode))
+ {
+ return true;
+ }
}
- usingWriter = true;
- if (isRequestForwarded()&& !isForwarded() && !isIncluded()){
- return new DummyPrintWriter(super.getWriter());
- }
- return getHttpServletResponse().getWriter();
+ return false;
}
- public PortletURL createRenderURL() {
- return createURL(false,false);
- }
+
+ // PortletResponse Impl ----------------------------------------------------
+
+ public void addProperty(Cookie cookie)
+ {
+ ArgumentUtility.validateNotNull("cookie", cookie);
+ responseContext.addProperty(cookie);
+ }
+ public void addProperty(String key, Element element)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ responseContext.addProperty(key, element);
+ }
- 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 {
+ public void addProperty(String key, String value)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ responseContext.addProperty(key, value);
+ }
+
+ 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) {
+ 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;
+ throw new DOMException((short) 0, "Initialization failure");
+ }
}
-
- public boolean isIncluded() {
- return included;
+
+ 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 = getPortletContainer()
+ .getRequiredContainerServices()
+ .getPortalCallbackService()
+ .getResourceURLProvider(getServletRequest(), getPortletWindow());
+ if (path.indexOf("://") != -1) {
+ provider.setAbsoluteURL(path);
+ } else {
+ provider.setFullPath(path);
+ }
+ return getServletResponse().encodeURL(provider.toString());
}
- 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;
- }
-
-
+ public String getNamespace()
+ {
+ if (namespace == null)
+ {
+ namespace = getPortletContainer().getOptionalContainerServices().getNamespaceMapper().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('_');
+ }
+ }
+ namespace = validNamespace.toString();
+ }
+ return namespace;
+ }
+
+ public void setProperty(String key, String value)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ responseContext.setProperty(key, value);
+ }
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletSessionImpl.java Fri Mar 6 16:11:51 2009
@@ -31,14 +31,13 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.PortletWindow;
-import org.apache.pluto.internal.InternalPortletSession;
import org.apache.pluto.util.ArgumentUtility;
/**
* Implementation of the <code>javax.portlet.PortletSession</code> interface.
*
*/
-public class PortletSessionImpl implements InternalPortletSession {
+public class PortletSessionImpl implements PortletSession {
/** Logger. */
private static final Log LOG = LogFactory.getLog(PortletSessionImpl.class);
@@ -104,7 +103,7 @@
return httpSession.getAttribute(key);
}
- public Enumeration getAttributeNames() {
+ public Enumeration<String> getAttributeNames() {
return getAttributeNames(DEFAULT_SCOPE);
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletURLImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletURLImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletURLImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletURLImpl.java Fri Mar 6 16:11:51 2009
@@ -16,71 +16,403 @@
*/
package org.apache.pluto.internal.impl;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import javax.portlet.PortalContext;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
+import javax.portlet.PortletSecurityException;
import javax.portlet.PortletURL;
+import javax.portlet.ResourceURL;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.PortletWindow;
+import org.apache.pluto.om.portlet.PortletApplicationDefinition;
+import org.apache.pluto.om.portlet.PortletDefinition;
+import org.apache.pluto.om.portlet.Supports;
+import org.apache.pluto.spi.PortletURLListener;
+import org.apache.pluto.spi.PortletURLProvider;
+import org.apache.pluto.spi.optional.PortletResponseContext;
+import org.apache.pluto.util.ArgumentUtility;
/**
* Refactoring where functionality was pushed into JSR-286 <code>BaseURL</code>.
*
* @since 2.0
*/
-public class PortletURLImpl extends BaseURLImpl implements PortletURL {
+public class PortletURLImpl implements PortletURL, ResourceURL {
- public PortletURLImpl(PortletContainer container,
- PortletWindow portletWindow,
- javax.servlet.http.HttpServletRequest servletRequest,
- javax.servlet.http.HttpServletResponse servletResponse,
- boolean isAction) {
- super(container,portletWindow,servletRequest,
- servletResponse,isAction,false);
- }
-
- // javax.portlet.PortletURL -------------------------------------------------------------------
- public void setWindowState(WindowState windowState)
- throws WindowStateException {
- if (windowState != null && isWindowStateAllowed(windowState)) {
- state = windowState;
- return;
- }
-
- throw new WindowStateException(
- "unsupported Window State used: " + windowState, windowState);
- }
-
- public void setPortletMode(PortletMode portletMode)
- throws PortletModeException {
- // Test and throw exception if not allowed.
- isPortletModeAllowed(portletMode);
- mode = portletMode;
- }
-
- public javax.portlet.PortletMode getPortletMode(){
- return super.getPortletMode();
- }
- public javax.portlet.WindowState getWindowState(){
- return super.getWindowState();
- }
-
- public void removePublicRenderParameter(String name) {
- List<String> publicRenderParameterNames = portletWindow.getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();
-
- if (publicRenderParameterNames != null){
- if (publicRenderParameterNames.contains(name)){
- publicRenderParameters.put(name,new String[] {null});
- }
- else{
- throw new IllegalArgumentException(
- "name and value must not be null");
- }
- }
- }
+ private PortletResponseContext responseContext;
+ private PortalContext portalContext;
+ private PortletURLProvider urlProvider;
+ private String cacheLevel;
+ private boolean filtering;
+
+ public PortletURLImpl(PortletResponseContext responseContext, boolean actionURL, boolean resourceURL)
+ {
+ this.responseContext = responseContext;
+ this.portalContext = responseContext.getContainer().getRequiredContainerServices().getPortalContext();
+ // TODO: actionURL/resourceURL parameters
+ urlProvider = responseContext.getContainer().getRequiredContainerServices().getPortalCallbackService().getPortletURLProvider(responseContext.getServletRequest(), responseContext.getPortletWindow());
+ }
+
+ public PortletURLImpl(PortletResponseContext responseContext, boolean actionURL, boolean resourceURL, String cacheLevel)
+ {
+ this(responseContext, actionURL, resourceURL);
+ this.cacheLevel = cacheLevel == null ? ResourceURL.PAGE : cacheLevel;
+ }
+
+ private boolean isPortletModeAllowed(PortletMode mode)
+ {
+ return isPortletModeAllowedByPortlet(mode) && isPortletModeAllowedByPortal(mode);
+ }
+
+ private boolean isPortletModeAllowedByPortlet(PortletMode mode)
+ {
+ if(PortletMode.VIEW.equals(mode))
+ {
+ return true;
+ }
+
+ PortletDefinition dd = responseContext.getPortletWindow().getPortletEntity().getPortletDefinition();
+
+ for (Supports sup : dd.getSupports())
+ {
+ for (String m : sup.getPortletModes())
+ {
+ if (m.equalsIgnoreCase(mode.toString()))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isPortletModeAllowedByPortal(PortletMode mode)
+ {
+ Enumeration<PortletMode> supportedModes = portalContext.getSupportedPortletModes();
+ while (supportedModes.hasMoreElements())
+ {
+ if (supportedModes.nextElement().toString().equalsIgnoreCase(
+ (mode.toString())))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isWindowStateAllowed(WindowState state)
+ {
+ Enumeration<WindowState> supportedStates = portalContext.getSupportedWindowStates();
+ while (supportedStates.hasMoreElements()) {
+ if (supportedStates.nextElement().equals(state))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static String[] cloneParameterValues(String[] values)
+ {
+ int count = 0;
+ for (String s : values)
+ {
+ if (!(s == null || s.length() == 0))
+ {
+ count++;
+ }
+ }
+ if (count == 0)
+ {
+ return null;
+ }
+ else if (count < values.length)
+ {
+ String[] copy = new String[count];
+ count = 0;
+ for (String s : values)
+ {
+ if (!(s == null || s.length() == 0))
+ {
+ copy[count++] = s;
+ }
+ }
+ return copy;
+ }
+ else
+ {
+ return values.clone();
+ }
+ }
+
+ private void filterURL()
+ {
+ if (filtering)
+ {
+ throw new IllegalStateException("Calling PortletURL toString or write methods from a PortletURLGenerationListener not allowed");
+ }
+ filtering = true;
+ try
+ {
+ PortletURLListener portletURLFilterListener = responseContext.getContainer()
+ .getRequiredContainerServices()
+ .getPortalCallbackService().getPortletURLListener();
+ PortletApplicationDefinition portletApp = responseContext.getPortletWindow().getPortletEntity().getPortletDefinition().getApplication();
+ portletURLFilterListener.callListener(portletApp, this, urlProvider.isActionURL(), urlProvider.isResourceURL());
+
+ }
+ finally
+ {
+ filtering = false;
+ }
+ }
+
+
+ // BaseURL impl ------------------------------------------------------------
+
+ public void addProperty(String key, String value)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ if (value != null)
+ {
+ Map<String, List<String>> properties = urlProvider.getProperties();
+ List<String> values = properties.get(key);
+ if (values == null)
+ {
+ values = new ArrayList<String>();
+ urlProvider.getProperties().put(key, values);
+ }
+ values.add(value);
+ }
+ }
+
+ public Map<String, String[]> getParameterMap()
+ {
+ Map<String, String[]> parameters = urlProvider.getRenderParameters();
+ if (parameters.isEmpty())
+ {
+ parameters = Collections.emptyMap();
+ }
+ else
+ {
+ parameters = new HashMap<String,String[]>(parameters);
+ for (Map.Entry<String,String[]> entry : parameters.entrySet())
+ {
+ entry.setValue(entry.getValue().clone());
+ }
+ }
+ return parameters;
+ }
+
+ public void setParameter(String name, String value)
+ {
+ ArgumentUtility.validateNotEmpty("name", name);
+ Map<String, String[]> parameters = urlProvider.getRenderParameters();
+ if (value == null )
+ {
+ parameters.remove(name);
+ }
+ else
+ {
+ parameters.put(name, new String[]{value});
+ urlProvider.getRemovedPublicRenderParameters().remove(name);
+ }
+ }
+
+ public void setParameter(String name, String[] values)
+ {
+ ArgumentUtility.validateNotEmpty("name", name);
+ Map<String, String[]> parameters = urlProvider.getRenderParameters();
+ values = cloneParameterValues(values);
+ if (values == null )
+ {
+ parameters.remove(name);
+ }
+ else
+ {
+ parameters.put(name, values);
+ urlProvider.getRemovedPublicRenderParameters().remove(name);
+ }
+ }
+
+ public void setParameters(Map<String, String[]> parameters)
+ {
+ ArgumentUtility.validateNotNull("parameters", parameters);
+
+ // validate map first
+ for (Map.Entry<? extends Object, ? extends Object> entry : parameters.entrySet())
+ {
+ if (entry.getKey() == null || entry.getValue() == null)
+ {
+ throw new IllegalArgumentException("RenderParameters contains a null key or value entry");
+ }
+ if (!(entry.getKey() instanceof String))
+ {
+ throw new IllegalArgumentException("RenderParameters contains a key which is not of type String");
+ }
+ if (!(entry.getValue() instanceof String[]))
+ {
+ throw new IllegalArgumentException("RenderParameters contains a value which is not of type String[]");
+ }
+ }
+ Map<String, String[]> map = urlProvider.getRenderParameters();
+ map.clear();
+ for (Map.Entry<String,String[]> entry : parameters.entrySet())
+ {
+ String[] values = cloneParameterValues(entry.getValue());
+ if (values != null)
+ {
+ map.put(entry.getKey(), values);
+ urlProvider.getRemovedPublicRenderParameters().remove(entry.getKey());
+ }
+ }
+ }
+
+ public void setProperty(String key, String value)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ Map<String, List<String>> properties = urlProvider.getProperties();
+ if (value == null)
+ {
+ properties.remove(key);
+ }
+ else
+ {
+ List<String> values = properties.get(key);
+ if (values == null)
+ {
+ values = new ArrayList<String>();
+ properties.put(key,values);
+ }
+ else
+ {
+ values.clear();
+ }
+ values.add(value);
+ }
+ }
+
+ public void setSecure(boolean secure) throws PortletSecurityException
+ {
+ urlProvider.setSecure(secure);
+ }
+
+ public void write(Writer out, boolean escapeXML) throws IOException
+ {
+ filterURL();
+ urlProvider.write(out, escapeXML);
+ }
+
+ public void write(Writer out) throws IOException
+ {
+ filterURL();
+ urlProvider.write(out);
+ }
+
+ public String toString()
+ {
+ filterURL();
+ return urlProvider.toString();
+ }
+
+ // PortletURL impl ------------------------------------------------------------
+
+ public PortletMode getPortletMode()
+ {
+ return urlProvider.getPortletMode();
+ }
+
+ public WindowState getWindowState()
+ {
+ return urlProvider.getWindowState();
+ }
+
+ public void setPortletMode(PortletMode portletMode) throws PortletModeException
+ {
+ ArgumentUtility.validateNotNull("portletMode", portletMode);
+ if (isPortletModeAllowed(portletMode))
+ {
+ urlProvider.setPortletMode(portletMode);
+ }
+ else
+ {
+ throw new PortletModeException("Can't set this PortletMode", portletMode);
+ }
+ }
+
+ public void setWindowState(WindowState windowState) throws WindowStateException
+ {
+ ArgumentUtility.validateNotNull("windowState", windowState);
+ if (isWindowStateAllowed(windowState))
+ {
+ urlProvider.setWindowState(windowState);
+ }
+ else
+ {
+ throw new WindowStateException("Can't set this WindowState", windowState);
+ }
+ }
+
+ public void removePublicRenderParameter(String name)
+ {
+ ArgumentUtility.validateNotEmpty("name", name);
+ urlProvider.getRemovedPublicRenderParameters().add(name);
+ urlProvider.getRenderParameters().remove(name);
+ }
+
+ // ResourceURL impl ------------------------------------------------------------
+
+ public String getCacheability()
+ {
+ String cacheability = urlProvider.getCacheability();
+ return cacheability == null ? this.cacheLevel : cacheability;
+ }
+
+ public void setCacheability(String cacheLevel)
+ {
+ ArgumentUtility.validateNotEmpty("cachelevel", cacheLevel);
+ if (FULL.equals(cacheLevel))
+ {
+ // always OK
+ }
+ else if (PORTLET.equals(cacheLevel))
+ {
+ if (FULL.equals(cacheLevel))
+ {
+ throw new IllegalStateException("Current Cachelevel is FULL: URLs with cacheability PORTLET not allowed");
+ }
+
+ }
+ else if (PAGE.equals(cacheLevel))
+ {
+ if (FULL.equals(cacheLevel))
+ {
+ throw new IllegalStateException("Current Cachelevel is FULL: URLs with cacheability PORTLET not allowed");
+ }
+ else if (PORTLET.equals(cacheLevel))
+ {
+ throw new IllegalStateException("Current Cachelevel is PORTLET: URLs with cacheability PAGE not allowed");
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unknown cacheLevel: "+cacheLevel);
+ }
+ urlProvider.setCacheability(cacheLevel);
+ }
+ public void setResourceID(String resourceID)
+ {
+ urlProvider.setResourceID(resourceID);
+ }
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderRequestImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderRequestImpl.java Fri Mar 6 16:11:51 2009
@@ -16,120 +16,34 @@
*/
package org.apache.pluto.internal.impl;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
+import javax.portlet.CacheControl;
+import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.pluto.Constants;
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.PortletWindow;
-import org.apache.pluto.internal.InternalPortletRequest;
-import org.apache.pluto.internal.InternalRenderRequest;
+import org.apache.pluto.spi.optional.PortletRequestContext;
/**
* Implementation of the <code>javax.portlet.RenderRequest</code> interface.
*
*/
-public class RenderRequestImpl extends PortletRequestImpl
- implements RenderRequest, InternalRenderRequest
+public class RenderRequestImpl extends PortletRequestImpl implements RenderRequest
{
- private static final Log LOG = LogFactory.getLog(RenderRequestImpl.class);
-
- public RenderRequestImpl(InternalPortletRequest request)
- {
- super(request);
- }
-
- public RenderRequestImpl(PortletContainer container,
- PortletWindow portletWindow,
- HttpServletRequest servletRequest)
- {
- super(container, portletWindow, servletRequest);
- if (LOG.isDebugEnabled())
- {
- LOG.debug("Created render request for: " + portletWindow);
- }
- }
-
- protected Integer getRequestMethod()
- {
- return Constants.METHOD_RENDER;
- }
+ private CacheControl cacheControl;
- public String getMethod()
+ public RenderRequestImpl(PortletRequestContext requestContext, CacheControl cacheControl)
{
- return "GET";
+ super(requestContext, PortletRequest.RENDER_PHASE);
+ this.cacheControl = cacheControl;
}
-
- // Included HttpServletRequest (Limited) Impl ------------------------------
-
- public String getCharacterEncoding()
- {
- return (super.isIncluded() || super.isForwarded()) ? null : super.getCharacterEncoding();
- }
-
- public void setCharacterEncoding(String encoding)
- throws UnsupportedEncodingException
- {
- if (!super.isIncluded() && !super.isForwarded())
- {
- super.setCharacterEncoding(encoding);
- }
- }
- public String getETag()
- {
- // TODO Return ETag
- return null;
- }
-
- public String getLifecyclePhase()
- {
- return RENDER_PHASE;
- }
-
- /* TODO: DST: not sure of the requirements for these */
- /**
- * Checks the included flag and returns the content type. If the included
- * flag is set to true, this method returns null.
- */
- public String getContentType()
- {
- return (super.isIncluded() || super.isForwarded()) ? null : super.getContentType();
- }
-
- /**
- * Checks the included flag and returns the content length. If the included
- * flag is set to true, this method returns 0.
- */
- public int getContentLength()
+ @Override
+ public String getProperty(String name)
{
- return (super.isIncluded() || super.isForwarded()) ? 0 : super.getContentLength();
- }
-
- /**
- * Checks the included flag and returns the reader to this rende response.
- * If the included flag is set to true, this method returns null.
- */
- public BufferedReader getReader()
- throws UnsupportedEncodingException, IOException
- {
- return (super.isIncluded() || super.isForwarded()) ? null : super.getReader();
+ return getMimeRequestProperty(name, cacheControl);
}
- /**
- * Checks the included flag and returns the input stream to this render
- * response. If the included flag is set to true, this method returns null.
- */
- public ServletInputStream getInputStream() throws IOException
+ public String getETag()
{
- return (super.isIncluded() || super.isForwarded()) ? null : super.getInputStream();
+ return cacheControl.getETag();
}
-
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderResponseImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RenderResponseImpl.java Fri Mar 6 16:11:51 2009
@@ -16,22 +16,13 @@
*/
package org.apache.pluto.internal.impl;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.Locale;
import javax.portlet.PortletMode;
-import javax.portlet.PortletModeException;
import javax.portlet.RenderResponse;
-import javax.portlet.StateAwareResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-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.internal.InternalRenderResponse;
-import org.apache.pluto.spi.PortalCallbackService;
+import org.apache.pluto.spi.optional.PortletRenderResponseContext;
import org.apache.pluto.util.ArgumentUtility;
import org.apache.pluto.util.StringUtils;
@@ -40,104 +31,91 @@
* Implementation of the <code>javax.portlet.RenderResponse</code> interface.
*
*/
-public class RenderResponseImpl extends MimeResponseImpl
-implements RenderResponse, InternalRenderResponse {
-
- /** Logger. */
- private static final Log LOG = LogFactory.getLog(RenderResponseImpl.class);
- private String contenType;
+public class RenderResponseImpl extends MimeResponseImpl implements RenderResponse
+{
+ private PortletRenderResponseContext responseContext;
- public RenderResponseImpl(PortletContainer container,
- PortletWindow portletWindow,
- HttpServletRequest servletRequest,
- HttpServletResponse servletResponse) {
- super(container, portletWindow, servletRequest, servletResponse);
+ public RenderResponseImpl(PortletRenderResponseContext responseContext)
+ {
+ super(responseContext);
+ this.responseContext = responseContext;
}
-
- public void setTitle(String title) {
- PortalCallbackService callback = getContainer()
- .getRequiredContainerServices()
- .getPortalCallbackService();
- callback.setTitle(this.getHttpServletRequest(),
- getPortletWindow(),
- title);
+
+ /**
+ * Checks if the specified content type is valid (supported by the portlet).
+ * The specified content type should be a tripped mime type without any
+ * character encoding suffix.
+ * @param contentType the content type to check.
+ * @return true if the content type is valid, false otherwise.
+ */
+ protected boolean isValidContentType(String contentType)
+ {
+ boolean valid = false;
+ for (String supportedType : getResponseContentTypes())
+ {
+ // Content type is supported by an exact match.
+ if (supportedType.equals(contentType))
+ {
+ valid = true;
+ }
+ // The supported type contains a wildcard.
+ else if (supportedType.indexOf("*") >= 0)
+ {
+ int index = supportedType.indexOf("/");
+ String supportedPrefix = supportedType.substring(0, index);
+ String supportedSuffix = supportedType.substring(index + 1);
+ index = contentType.indexOf("/");
+ String typePrefix = contentType.substring(0, index);
+ String typeSuffix = contentType.substring(index + 1);
+ // Check if the prefixes match AND the suffixes match.
+ if (supportedPrefix.equals("*") || supportedPrefix.equals(typePrefix))
+ {
+ if (supportedSuffix.equals("*") || supportedSuffix.equals(typeSuffix))
+ {
+ valid = true;
+ }
+ }
+ }
+ }
+ // Return the check result.
+ return valid;
}
-
- public void setNextPossiblePortletModes(Collection<PortletMode> portletModes) {
- PortletMode tmpPortletMode = super.getPortletWindow().getPortletMode();
- PortletMode portletMode = PortletMode.VIEW;
- boolean next = false;
- boolean first = true;
- for (PortletMode mode : portletModes) {
- if (first)
- portletMode = mode;
- if (next){
- portletMode = mode;
- next = false;
- }
- if (mode.equals(tmpPortletMode)){
- next = true;
- }
- }
- try {
- ((StateAwareResponse)(super.getResponse())).setPortletMode(portletMode) ;
- } catch (PortletModeException e) {
- LOG.warn(e);
- }
- }
-
- @Override
- public void setCharacterEncoding(String arg0) {
- if (super.isIncluded() || super.isForwarded()){
- //no operation
- }
- else
- super.setCharacterEncoding(arg0);
- }
-
- @Override
- public void setContentLength(int arg0) {
- if (super.isIncluded() || super.isForwarded()){
- //no operation
- }
- else
- super.setContentLength(arg0);
- }
-
- @Override
- public void setLocale(Locale arg0) {
- if (super.isIncluded() || super.isForwarded()){
- //no operation
- }
- else
- super.setLocale(arg0);
- }
-
- @Override
- public int getBufferSize() {
- return 0;
- }
-
- @Override
- public void setContentType(String contentType){
-
- if (super.isIncluded()){
- //no operation
- }
- else{
- ArgumentUtility.validateNotNull("contentType", contentType);
- String mimeType = StringUtils.getMimeTypeWithoutEncoding(contentType);
- if (!isValidContentType(mimeType)) {
- throw new IllegalArgumentException("Specified content type '"
- + mimeType + "' is not supported.");
+
+ public void setContentType(String contentType)
+ {
+ ArgumentUtility.validateNotNull("contentType", contentType);
+ String mimeType = StringUtils.getMimeTypeWithoutEncoding(contentType);
+ if (!isValidContentType(mimeType))
+ {
+ throw new IllegalArgumentException("Specified content type '" + mimeType + "' is not supported.");
+ }
+ responseContext.setContentType(mimeType);
+ }
+
+ public void setNextPossiblePortletModes(Collection<PortletMode> portletModes)
+ {
+ ArgumentUtility.validateNotNull("portletModes", portletModes);
+ if (portletModes.isEmpty())
+ {
+ throw new IllegalArgumentException("At least one possible PortletMode should be specified.");
+ }
+ ArrayList<PortletMode> modes = new ArrayList<PortletMode>();
+ for (PortletMode mode : portletModes)
+ {
+ if (isPortletModeAllowed(mode))
+ {
+ modes.add(mode);
}
- getHttpServletResponse().setContentType(mimeType);
- this.contenType = contentType;
- }
+ }
+ if (modes.isEmpty())
+ {
+ modes.add(getPortletWindow().getPortletMode());
+ }
+ responseContext.setNextPossiblePortletModes(modes);
}
-
- @Override
- public String getContentType() {
- return contenType;
+
+ public void setTitle(String title)
+ {
+ responseContext.setTitle(title);
}
}
Added: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java?rev=750954&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java (added)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java Fri Mar 6 16:11:51 2009
@@ -0,0 +1,76 @@
+/*
+ * 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 org.apache.pluto.internal.RequestDispatcherPathInfo;
+
+/**
+ * @author <a href="mailto:ate@douma.nu">Ate Douma</a>
+ * @version $Id$
+ */
+public class RequestDispatcherPathInfoImpl implements RequestDispatcherPathInfo
+{
+ private final boolean named;
+ private final String requestURI;
+ private final String servletPath;
+ private final String pathInfo;
+ private final String queryString;
+
+ public RequestDispatcherPathInfoImpl()
+ {
+ named = true;
+ this.requestURI = null;
+ this.servletPath = null;
+ this.pathInfo = null;
+ this.queryString = null;
+ }
+
+ public RequestDispatcherPathInfoImpl(String contextPath, String servletPath, String pathInfo, String queryString)
+ {
+ this.named = false;
+ this.requestURI = contextPath + (servletPath != null ? servletPath : "") + (pathInfo != null ? pathInfo : "");
+ this.servletPath = servletPath;
+ this.pathInfo = pathInfo;
+ this.queryString = queryString;
+ }
+
+ public boolean isNamedRequestDispatcher()
+ {
+ return named;
+ }
+
+ public String getRequestURI()
+ {
+ return requestURI;
+ }
+
+ public String getServletPath()
+ {
+ return servletPath;
+ }
+
+ public String getPathInfo()
+ {
+ return pathInfo;
+ }
+
+ public String getQueryString()
+ {
+ return queryString;
+ }
+}
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/RequestDispatcherPathInfoImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceRequestImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceRequestImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceRequestImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceRequestImpl.java Fri Mar 6 16:11:51 2009
@@ -16,121 +16,61 @@
*/
package org.apache.pluto.internal.impl;
-import java.io.IOException;
+import java.util.Enumeration;
import java.util.Map;
+import javax.portlet.CacheControl;
+import javax.portlet.PortletRequest;
import javax.portlet.ResourceRequest;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.pluto.Constants;
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.PortletWindow;
-import org.apache.pluto.internal.InternalResourceRequest;
+import org.apache.pluto.spi.optional.PortletResourceRequestContext;
-public class ResourceRequestImpl extends ClientDataRequestImpl
-implements ResourceRequest, InternalResourceRequest {
-
- /** Logger. */
- private static final Log LOG = LogFactory.getLog(ResourceRequestImpl.class);
-
-
- // Constructor -------------------------------------------------------------
-
- public ResourceRequestImpl(PortletContainer container,
- PortletWindow portletWindow,
- HttpServletRequest servletRequest) {
- super(container, portletWindow, servletRequest);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Created action request for: " + portletWindow);
- }
+public class ResourceRequestImpl extends ClientDataRequestImpl implements ResourceRequest
+{
+ private PortletResourceRequestContext requestContext;
+ private CacheControl cacheControl;
+
+ public ResourceRequestImpl(PortletResourceRequestContext requestContext, CacheControl cacheControl)
+ {
+ super(requestContext, PortletRequest.RESOURCE_PHASE);
+ this.requestContext = requestContext;
+ this.cacheControl = cacheControl;
}
- // ResourceRequest impl ------------------------------------------------------
-
- protected Integer getRequestMethod()
+ @Override
+ public String getProperty(String name)
{
- return Constants.METHOD_RESOURCE;
+ return getMimeRequestProperty(name, cacheControl);
}
- public String getResponseContentType(){
- return super.getResponseContentType();
+ public String getCacheability()
+ {
+ return requestContext.getCacheability();
}
- @SuppressWarnings("unchecked")
- public java.util.Enumeration getResponseContentTypes(){
- return super.getResponseContentTypes();
+ public String getETag()
+ {
+ return cacheControl.getETag();
}
- public String[] getParameterValues(String name) {
- String values1[] = super.getParameterValues(name);
- String values2[] = urlProvider.getPrivateRenderParameters(name);
- String values[] = null;
- int length1 = 0;
- int length2 = 0;
- if (values1 != null)
- length1 = values1.length;
- if (values2 != null){
- length2 += values2.length;
- values = new String[length1+length2];
- System.arraycopy(values2, 0, values, length1, length2);
- }
- else if (length1>0){
- values = new String[length1];
- }
-
- if (length1>0){
- System.arraycopy(values1, 0, values, 0, length1);
- }
- if ((length1+length2) == 0){
- values = null;
- }
- if (values != null) {
- values = values.clone();
- }
- return values;
- }
-
- public String getParameter(String name) {
- String value = super.getParameter(name);
- if (value == null){
- String[] values1 = urlProvider.getPrivateRenderParameters(name);
- if (values1!= null){
- if (values1.length>0){
- value = values1[0];
- }
- }
- }
- return value;
- }
-
- // PortletRequestImpl impl -------------------------------------------------
-
- public String getETag() {
- // TODO: get ETag
- return null;
- }
+ public Map<String, String[]> getPrivateRenderParameterMap()
+ {
+ return cloneParameterMap(requestContext.getPrivateRenderParameterMap());
+ }
- public String getLifecyclePhase()
+ public String getResourceID()
{
- return RESOURCE_PHASE;
- }
-
- public String getResourceID() {
- return getParameter("resourceID");
+ return requestContext.getResourceID();
}
- public ServletInputStream getInputStream() throws IOException {
- return (super.isIncluded() || super.isForwarded()) ? (ServletInputStream)getPortletInputStream() : super.getInputStream();
+ public String getResponseContentType()
+ {
+ return getServletRequest().getHeader("accept");
}
- public Map<String, String[]> getPrivateRenderParameterMap() {
- return super.getPrivateParameterMap();
- }
-
- public String getCacheability() {
- return null;
- }
+ @SuppressWarnings("unchecked")
+ public Enumeration<String> getResponseContentTypes()
+ {
+ return getServletRequest().getHeaders("accept");
+ }
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceResponseImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/ResourceResponseImpl.java Fri Mar 6 16:11:51 2009
@@ -18,96 +18,52 @@
import java.util.Locale;
+import javax.portlet.PortletURL;
import javax.portlet.ResourceResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import javax.portlet.ResourceURL;
-import org.apache.pluto.PortletContainer;
-import org.apache.pluto.PortletWindow;
-import org.apache.pluto.internal.InternalResourceResponse;
-import org.apache.pluto.util.ArgumentUtility;
-import org.apache.pluto.util.StringUtils;
+import org.apache.pluto.spi.optional.PortletResourceResponseContext;
-public class ResourceResponseImpl extends MimeResponseImpl
-implements ResourceResponse, InternalResourceResponse {
-
-
- public ResourceResponseImpl(PortletContainer container,
- PortletWindow portletWindow,
- HttpServletRequest servletRequest,
- HttpServletResponse servletResponse) {
- super(container, portletWindow, servletRequest,
- servletResponse);
+public class ResourceResponseImpl extends MimeResponseImpl implements ResourceResponse
+{
+ private String requestCacheLevel;
+ private PortletResourceResponseContext responseContext;
+
+ public ResourceResponseImpl(PortletResourceResponseContext responseContext, String requestCachelevel)
+ {
+ super(responseContext);
+ this.responseContext = responseContext;
+ this.requestCacheLevel = requestCachelevel;
}
- @Override
- public void setCharacterEncoding(String arg0) {
- if (super.isIncluded()){
- //no operation
- }
- else
- super.setCharacterEncoding(arg0);
- }
-
- @Override
- public void setContentLength(int arg0) {
- if (super.isIncluded()){
- //no operation
- }
- else
- super.setContentLength(arg0);
- }
-
- @Override
- public void setLocale(Locale arg0) {
- if (super.isIncluded()){
- //no operation
- }
- else
- super.setLocale(arg0);
- }
-
- @Override
- public int getBufferSize() {
- return 0;
- }
-
- @Override
- public void setContentType(String contentType)
- throws IllegalArgumentException {
-
- if (super.isIncluded()){
- //no operation
- }
- else{
- ArgumentUtility.validateNotNull("contentType", contentType);
- String mimeType = StringUtils.getMimeTypeWithoutEncoding(contentType);
- /*
- if (!isValidContentType(mimeType)) {
- throw new IllegalArgumentException("Specified content type '"
- + mimeType + "' is not supported.");
- }
- */
- getHttpServletResponse().setContentType(mimeType);
- }
+ public PortletURL createActionURL()
+ {
+ return new PortletURLImpl(responseContext, true, false, requestCacheLevel);
}
-
- @Override
- public String getContentType() {
- return getHttpServletResponse().getContentType();
+
+ public PortletURL createRenderURL()
+ {
+ return new PortletURLImpl(responseContext, false, false, requestCacheLevel);
}
- public String getCacheability() {
- return null;
- }
-
- public javax.portlet.PortletURL createRenderURL() throws java.lang.IllegalStateException{
- return super.createRenderURL();
+
+ public ResourceURL createResourceURL()
+ {
+ return new PortletURLImpl(responseContext, false, true, requestCacheLevel);
+ }
+
+ public void setCharacterEncoding(String charset)
+ {
+ responseContext.setCharacterEncoding(charset);
}
- public javax.portlet.PortletURL createActionURL() throws java.lang.IllegalStateException{
- return super.createActionURL();
+
+ public void setContentLength(int len)
+ {
+ responseContext.setContentLength(len);
}
- public javax.portlet.ResourceURL createResourceURL() throws java.lang.IllegalStateException{
- return super.createResourceURL();
+
+ public void setLocale(Locale locale)
+ {
+ responseContext.setLocale(locale);
}
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/internal/impl/StateAwareResponseImpl.java Fri Mar 6 16:11:51 2009
@@ -16,582 +16,223 @@
*/
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.Event;
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.spi.optional.PortletStateAwareResponseContext;
+import org.apache.pluto.util.ArgumentUtility;
/**
* 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, 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});
+public abstract class StateAwareResponseImpl extends PortletResponseImpl implements StateAwareResponse
+{
+ private PortletStateAwareResponseContext responseContext;
+
+ public StateAwareResponseImpl(PortletStateAwareResponseContext responseContext)
+ {
+ super(responseContext);
+ this.responseContext = responseContext;
+ }
+
+ private static String[] cloneParameterValues(String[] values)
+ {
+ int count = 0;
+ for (String s : values)
+ {
+ if (!(s == null || s.length() == 0))
+ {
+ count++;
}
- 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, values.clone());
- }
- else{
- renderParameters.put(key, values.clone());
- }
+ if (count == 0)
+ {
+ return null;
}
- else{
- renderParameters.put(key, values.clone());
+ else if (count < values.length)
+ {
+ String[] copy = new String[count];
+ count = 0;
+ for (String s : values)
+ {
+ if (!(s == null || s.length() == 0))
+ {
+ copy[count++] = s;
+ }
+ }
+ return copy;
+ }
+ else
+ {
+ return values.clone();
}
- }
- // --------------------------------------------------------------------------------------------
-
- // 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;
- }
-
- public PortletMode getPortletMode() {
- return getChangedPortletMode();
- }
-
- public WindowState getChangedWindowState() {
- return this.windowState;
- }
-
- public WindowState getWindowState() {
- return getChangedWindowState();
}
-
- protected boolean isPortletModeAllowed(PortletMode mode) {
- return isPortletModeAllowedByPortlet(mode)
- && isPortletModeAllowedByPortal(mode);
- }
-
- protected boolean isPortletModeAllowedByPortlet(PortletMode mode) {
-
- //Not checking for VIEW mode in portetlDefinition, as VIEW mode is default
- // as per specs.
- if(PortletMode.VIEW.equals(mode))
- return true;
-
- PortletDefinition dd = getPortletWindow().getPortletEntity()
- .getPortletDefinition();
-
- Iterator supports = dd.getSupports().iterator();
- while(supports.hasNext()) {
- Supports sup = (Supports)supports.next();
- List<String> portletModes = sup.getPortletModes();
- if (portletModes == null)
- return false;
- Iterator modes = portletModes.iterator();
- while(modes.hasNext()) {
- if (modes.next().toString().equalsIgnoreCase(mode.toString())) {
- return true;
- }
- }
- }
- return false;
- }
-
- protected boolean isPortletModeAllowedByPortal(PortletMode mode) {
- Enumeration supportedModes = context.getSupportedPortletModes();
- while (supportedModes.hasMoreElements()) {
- if (supportedModes.nextElement().toString().equalsIgnoreCase(
- (mode.toString()))) {
- return true;
- }
- }
- return false;
- }
-
- protected boolean isWindowStateAllowed(WindowState state) {
- Enumeration supportedStates = context.getSupportedWindowStates();
+
+ protected abstract void checkSetStateChanged();
+
+ protected boolean isWindowStateAllowed(WindowState state)
+ {
+ Enumeration<WindowState> supportedStates = getPortalContext().getSupportedWindowStates();
while (supportedStates.hasMoreElements()) {
- if (supportedStates.nextElement().toString().equalsIgnoreCase(
- (state.toString()))) {
+ if (supportedStates.nextElement().equals(state))
+ {
return true;
}
}
return false;
}
-
- // access to a limited set of HttpServletResponse methods ------------------
-
- @Override
- public void reset() {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.reset();
- }
-
- @Override
- public void resetBuffer() {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.resetBuffer();
- }
-
- @Override
- public void setBufferSize(int arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setBufferSize(arg0);
- }
-
- @Override
- public void setCharacterEncoding(String arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setCharacterEncoding(arg0);
- }
-
- @Override
- public void setContentLength(int arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setContentLength(arg0);
+
+ public PortletMode getPortletMode()
+ {
+ return responseContext.getPortletMode();
+ }
+
+ public Map<String, String[]> getRenderParameterMap()
+ {
+ Map<String, String[]> parameters = new HashMap<String, String[]>(responseContext.getRenderParameters());
+ for (Map.Entry<String,String[]> entry : parameters.entrySet())
+ {
+ entry.setValue(entry.getValue().clone());
+ }
+ return parameters;
+ }
+
+ public WindowState getWindowState()
+ {
+ return responseContext.getWindowState();
+ }
+
+ public void removePublicRenderParameter(String name)
+ {
+ ArgumentUtility.validateNotEmpty("name", name);
+ checkSetStateChanged();
+ responseContext.getRemovedPublicRenderParameters().add(name);
+ responseContext.getRenderParameters().remove(name);
+ }
+
+ public void setEvent(QName qname, Serializable value)
+ {
+ ArgumentUtility.validateNotNull("qname", qname);
+ PortalCallbackService callback = getPortletContainer().getRequiredContainerServices().getPortalCallbackService();
+ Event event = callback.getEventProvider(getServletRequest(),getPortletWindow()).createEvent(qname, value);
+ responseContext.getEvents().add(event);
}
- @Override
- public void setContentType(String arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setContentType(arg0);
- }
-
- @Override
- public void setLocale(Locale arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setLocale(arg0);
- }
-
- @Override
- public ServletOutputStream getOutputStream() throws IllegalStateException, IOException {
- if (super.isForwarded() || super.isIncluded()){
- return new DummyServletOutputStream();
- }
- else
- return super.getOutputStream();
- }
-
- @Override
- public PrintWriter getWriter() throws IllegalStateException, IOException {
- if (super.isForwarded() || super.isIncluded()){
- return new DummyPrintWriter(super.getWriter());
- }
- else
- return super.getWriter();
- }
-
- @Override
- public void addDateHeader(String arg0, long arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.addDateHeader(arg0, arg1);
- }
-
- @Override
- public void addHeader(String arg0, String arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.addHeader(arg0, arg1);
- }
-
- @Override
- public void addIntHeader(String arg0, int arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.addIntHeader(arg0, arg1);
- }
-
- @Override
- public void setStatus(int arg0, String arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setStatus(arg0, arg1);
- }
-
- @Override
- public void setDateHeader(String arg0, long arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setDateHeader(arg0, arg1);
- }
-
- @Override
- public void setHeader(String arg0, String arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setHeader(arg0, arg1);
- }
-
- @Override
- public void setIntHeader(String arg0, int arg1) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setIntHeader(arg0, arg1);
- }
-
- @Override
- public void setStatus(int arg0) {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.setStatus(arg0);
- }
-
- @Override
- public void flushBuffer() throws IOException {
- if (super.isForwarded() || super.isIncluded()){
- // no operation
- }
- else
- super.flushBuffer();
- }
-
- /*
- * The pluto implementation don't works with buffering.
- * @see javax.servlet.ServletResponseWrapper#getBufferSize()
- */
- @Override
- public int getBufferSize() {
- if (super.isForwarded() || super.isIncluded()){
- return 0;
- }
- else
- return 0;
- }
-
- @Override
- public String getCharacterEncoding() {
- if (super.isForwarded() || super.isIncluded()){
- return null;
- }
- else
- return super.getCharacterEncoding();
- }
-
- @Override
- public String getContentType() {
- if (super.isForwarded() || super.isIncluded()){
- return null;
- }
- else
- return super.getContentType();
- }
-
- @Override
- public Locale getLocale() {
- if (super.isForwarded() || super.isIncluded()){
- return null;
- }
- else
- return super.getLocale();
- }
-
- @Override
- public boolean isCommitted() {
- if (super.isForwarded()){
- return false;
- }
- else if (super.isIncluded()){
- return true;
- }
- else
- return super.isCommitted();
- }
-
- public void removePublicRenderParameter(String name) {
- List<String> publicRenderParameterNames = super.getPortletWindow().getPortletEntity().getPortletDefinition().getSupportedPublicRenderParameters();
- if (publicRenderParameterNames != null){
- if (publicRenderParameterNames.contains(name)){
- publicRenderParameter.put(name,new String[] {null});
- }
- else{
- throw new IllegalArgumentException(
- "name and values must not be null or values be an empty array");
- }
- }
- redirectAllowed = false;
- }
-
- public void setEventRequest(EventRequest eventRequest) {
- this.eventRequest = eventRequest;
+ 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);
}
+ public void setPortletMode(PortletMode portletMode) throws PortletModeException
+ {
+ ArgumentUtility.validateNotNull("portletMode", portletMode);
+ if (isPortletModeAllowed(portletMode))
+ {
+ checkSetStateChanged();
+ responseContext.setPortletMode(portletMode);
+ }
+ else
+ {
+ throw new PortletModeException("Can't set this PortletMode", portletMode);
+ }
+ }
+
+ public void setWindowState(WindowState windowState) throws WindowStateException
+ {
+ ArgumentUtility.validateNotNull("windowState", windowState);
+ if (isWindowStateAllowed(windowState))
+ {
+ checkSetStateChanged();
+ responseContext.setWindowState(windowState);
+ }
+ else
+ {
+ throw new WindowStateException("Can't set this WindowState", windowState);
+ }
+ }
+
+ public void setRenderParameters(java.util.Map<String, String[]> parameters)
+ {
+ ArgumentUtility.validateNotNull("parameters", parameters);
+
+ // validate map first
+ for (Map.Entry<? extends Object, ? extends Object> entry : parameters.entrySet())
+ {
+ if (entry.getKey() == null || entry.getValue() == null)
+ {
+ throw new IllegalArgumentException("RenderParameters contains a null key or value entry");
+ }
+ if (!(entry.getKey() instanceof String))
+ {
+ throw new IllegalArgumentException("RenderParameters contains a key which is not of type String");
+ }
+ if (!(entry.getValue() instanceof String[]))
+ {
+ throw new IllegalArgumentException("RenderParameters contains a value which is not of type String[]");
+ }
+ }
+ checkSetStateChanged();
+ Map<String, String[]> map = responseContext.getRenderParameters();
+ map.clear();
+ for (Map.Entry<String,String[]> entry : parameters.entrySet())
+ {
+ String[] values = cloneParameterValues(entry.getValue());
+ if (values != null)
+ {
+ map.put(entry.getKey(), values);
+ responseContext.getRemovedPublicRenderParameters().remove(entry.getKey());
+ }
+ }
+ }
+
+ public void setRenderParameter(String key, String value)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+
+ checkSetStateChanged();
+ if (value == null || value.length() == 0)
+ {
+ responseContext.getRenderParameters().remove(key);
+ }
+ else
+ {
+ responseContext.getRenderParameters().put(key, new String[]{value});
+ responseContext.getRemovedPublicRenderParameters().remove(key);
+ }
+ }
+
+ public void setRenderParameter(String key, String[] values)
+ {
+ ArgumentUtility.validateNotEmpty("key", key);
+ ArgumentUtility.validateNotNull("values", values);
+ String[] copy = cloneParameterValues(values);
+ checkSetStateChanged();
+ if (copy == null)
+ {
+ responseContext.getRenderParameters().remove(key);
+ }
+ else
+ {
+ responseContext.getRenderParameters().put(key, copy);
+ responseContext.getRemovedPublicRenderParameters().remove(key);
+ }
+ }
}
Modified: portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/util/DummyPrintWriter.java
URL: http://svn.apache.org/viewvc/portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/util/DummyPrintWriter.java?rev=750954&r1=750953&r2=750954&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/util/DummyPrintWriter.java (original)
+++ portals/pluto/trunk/pluto-container/src/main/java/org/apache/pluto/util/DummyPrintWriter.java Fri Mar 6 16:11:51 2009
@@ -16,34 +16,42 @@
*/
package org.apache.pluto.util;
+import java.io.OutputStream;
import java.io.PrintWriter;
-import java.io.Writer;
import java.util.Locale;
-public class DummyPrintWriter extends PrintWriter{
-
- public DummyPrintWriter(Writer out) {
+public final class DummyPrintWriter extends PrintWriter
+{
+ private static final DummyPrintWriter instance = new DummyPrintWriter(DummyServletOutputStream.getInstance());
+
+ public static PrintWriter getInstance()
+ {
+ return instance;
+ }
+
+ private DummyPrintWriter(OutputStream out)
+ {
super(out);
}
@Override
public PrintWriter append(char c) {
- return super.append(null);
+ return this;
}
@Override
public PrintWriter append(CharSequence csq, int start, int end) {
- return super.append(null);
+ return this;
}
@Override
public PrintWriter append(CharSequence csq) {
- return super.append(null);
+ return this;
}
@Override
public boolean checkError() {
- return super.checkError();
+ return false;
}
@Override
@@ -56,12 +64,12 @@
@Override
public PrintWriter format(Locale l, String format, Object... args) {
- return super.format(null, null, null);
+ return this;
}
@Override
public PrintWriter format(String format, Object... args) {
- return super.format(null, null);
+ return this;
}
@Override
@@ -102,12 +110,12 @@
@Override
public PrintWriter printf(Locale l, String format, Object... args) {
- return super.printf(null, null, null);
+ return this;
}
@Override
public PrintWriter printf(String format, Object... args) {
- return super.printf(null, null);
+ return this;
}
@Override
@@ -152,7 +160,6 @@
@Override
protected void setError() {
- super.setError();
}
@Override
@@ -174,5 +181,4 @@
@Override
public void write(String s) {
}
-
}