Author: cziegeler
Date: Fri Nov 23 13:07:18 2012
New Revision: 1412867

URL: http://svn.apache.org/viewvc?rev=1412867&view=rev
Log:
Support portals bridge

Modified:
    
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletRequestContextImpl.java
    
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletResourceRequestContextImpl.java
    
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/services/DefaultPortletInvokerService.java

Modified: 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletRequestContextImpl.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletRequestContextImpl.java?rev=1412867&r1=1412866&r2=1412867&view=diff
==============================================================================
--- 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletRequestContextImpl.java
 (original)
+++ 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletRequestContextImpl.java
 Fri Nov 23 13:07:18 2012
@@ -25,12 +25,16 @@ import java.util.Locale;
 import java.util.Map;
 
 import javax.portlet.PortletConfig;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletResponse;
 import javax.servlet.ServletContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.pluto.container.PortletContainer;
+import org.apache.pluto.container.PortletInvokerService;
 import org.apache.pluto.container.PortletRequestContext;
 import org.apache.pluto.container.PortletWindow;
 import org.apache.sling.portal.container.internal.request.PortalRequestContext;
@@ -54,9 +58,16 @@ public class PortletRequestContextImpl i
     private Cookie cookies[];
     private boolean useRequestParameters;
 
-    public PortletRequestContextImpl(PortletContainer container, 
HttpServletRequest containerRequest,
-                                     HttpServletResponse containerResponse, 
PortletWindow window, boolean useRequestParameters)
-    {
+    private PortletRequest portletRequest;
+    private PortletResponse portletResponse;
+
+    private HttpServletRequest wrappedRequest;
+
+    public PortletRequestContextImpl(final PortletContainer container,
+            final HttpServletRequest containerRequest,
+            final HttpServletResponse containerResponse,
+            final PortletWindow window,
+            final boolean useRequestParameters) {
         this.container = container;
         this.containerRequest = containerRequest;
         this.containerResponse = containerResponse;
@@ -68,154 +79,157 @@ public class PortletRequestContextImpl i
     /**
      * Is this a reserved attribute?
      */
-    protected boolean isReservedAttributeName(String name) {
+    private boolean isReservedAttributeName(final String name) {
         return name.startsWith("javax.servlet.");
     }
 
-    protected String encodeAttributeName(String name)
-    {
-        if (isReservedAttributeName(name))
-        {
+    private String encodeAttributeName(final String name) {
+        if (isReservedAttributeName(name)) {
             return name;
         }
         return 
container.getContainerServices().getNamespaceMapper().encode(window.getId(), 
name);
     }
 
-    protected String decodeAttributeName(String name)
-    {
-        if (isReservedAttributeName(name))
-        {
+    private String decodeAttributeName(String name) {
+        if (isReservedAttributeName(name)) {
             return name;
         }
         String result = 
container.getContainerServices().getNamespaceMapper().decode(window.getId(), 
name);
         return result != null ? result : name;
     }
 
-    protected Map<String, String[]> getPrivateRenderParameterMap()
-    {
+    private Map<String, String[]> getPrivateRenderParameterMap() {
         return Collections.emptyMap();
     }
 
-    protected PortalURL getPortalURL()
-    {
-        return url;
-    }
-
-    protected boolean isPublicRenderParameter(String name)
-    {
+    private boolean isPublicRenderParameter(final String name) {
         List<String> publicRenderParameterNames = 
window.getPortletDefinition().getSupportedPublicRenderParameters();
         return publicRenderParameterNames.isEmpty() ? false : 
publicRenderParameterNames.contains(name);
     }
 
-    public void init(PortletConfig portletConfig, ServletContext 
servletContext, HttpServletRequest servletRequest, HttpServletResponse 
servletResponse)
-    {
+    protected PortalURL getPortalURL() {
+        return this.url;
+    }
+
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#init(javax.portlet.PortletConfig,
 javax.servlet.ServletContext, javax.servlet.http.HttpServletRequest, 
javax.servlet.http.HttpServletResponse)
+     */
+    public void init(final PortletConfig portletConfig,
+            final ServletContext servletContext,
+            final HttpServletRequest servletRequest,
+            final HttpServletResponse servletResponse) {
         this.portletConfig = portletConfig;
         this.servletContext = servletContext;
         this.servletRequest = servletRequest;
         this.servletResponse = servletResponse;
     }
 
-    public Object getAttribute(String name)
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getAttribute(java.lang.String)
+     */
+    public Object getAttribute(final String name) {
         Object value = servletRequest.getAttribute(encodeAttributeName(name));
         return value != null ? value : servletRequest.getAttribute(name);
     }
 
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getAttributeNames()
+     */
     @SuppressWarnings("unchecked")
-    public Enumeration<String> getAttributeNames()
-    {
-        ArrayList<String> names = new ArrayList<String>();
-        for (Enumeration<String> e = servletRequest.getAttributeNames(); 
e.hasMoreElements();)
-        {
+    public Enumeration<String> getAttributeNames() {
+        final ArrayList<String> names = new ArrayList<String>();
+        for (Enumeration<String> e = servletRequest.getAttributeNames(); 
e.hasMoreElements();) {
             names.add(decodeAttributeName(e.nextElement()));
         }
         return Collections.enumeration(names);
     }
 
-    public void setAttribute(String name, Object value)
-    {
-        if (value == null)
-        {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#setAttribute(java.lang.String, 
java.lang.Object)
+     */
+    public void setAttribute(final String name, final Object value) {
+        if (value == null) {
             servletRequest.removeAttribute(encodeAttributeName(name));
-        }
-        else
-        {
+        } else {
             servletRequest.setAttribute(encodeAttributeName(name), value);
         }
     }
 
-    public PortletContainer getContainer()
-    {
+    /**
+     * @see org.apache.pluto.container.PortletRequestContext#getContainer()
+     */
+    public PortletContainer getContainer() {
         return container;
     }
 
-    public Cookie[] getCookies()
-    {
-        if (cookies == null)
-        {
+    /**
+     * @see org.apache.pluto.container.PortletRequestContext#getCookies()
+     */
+    public Cookie[] getCookies() {
+        if (cookies == null)  {
             cookies = servletRequest.getCookies();
-            if (cookies == null)
-            {
+            if (cookies == null) {
                 cookies = new Cookie[0];
             }
         }
         return cookies.length > 0 ? cookies.clone() : null;
     }
 
-    public PortletConfig getPortletConfig()
-    {
+    /**
+     * @see org.apache.pluto.container.PortletRequestContext#getPortletConfig()
+     */
+    public PortletConfig getPortletConfig() {
         return portletConfig;
     }
 
-    public ServletContext getServletContext()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getServletContext()
+     */
+    public ServletContext getServletContext() {
         return servletContext;
     }
 
-    public PortletWindow getPortletWindow()
-    {
+    /**
+     * @see org.apache.pluto.container.PortletRequestContext#getPortletWindow()
+     */
+    public PortletWindow getPortletWindow() {
         return window;
     }
 
-    public Locale getPreferredLocale()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getPreferredLocale()
+     */
+    public Locale getPreferredLocale() {
         return servletRequest.getLocale();
     }
 
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getPrivateParameterMap()
+     */
     @SuppressWarnings("unchecked")
-    public Map<String, String[]> getPrivateParameterMap()
-    {
-        HashMap<String, String[]> parameters = new HashMap<String, String[]>();
+    public Map<String, String[]> getPrivateParameterMap() {
+        final Map<String, String[]> parameters = new HashMap<String, 
String[]>();
         if (useRequestParameters) {
             parameters.putAll(servletRequest.getParameterMap());
         }
-        for (Map.Entry<String, String[]> entry : 
getPrivateRenderParameterMap().entrySet())
-        {
-            String[] values = parameters.get(entry.getKey());
-            if (values == null)
-            {
+        for (Map.Entry<String, String[]> entry : 
getPrivateRenderParameterMap().entrySet()) {
+            final String[] values = parameters.get(entry.getKey());
+            if (values == null) {
                 parameters.put(entry.getKey(), entry.getValue());
-            }
-            else
-            {
-                String[] copy = new 
String[values.length+entry.getValue().length];
+            } else {
+                final String[] copy = new 
String[values.length+entry.getValue().length];
                 System.arraycopy(values, 0, copy, 0, values.length);
                 System.arraycopy(entry.getValue(), 0, copy, values.length, 
entry.getValue().length);
                 parameters.put(entry.getKey(), copy);
             }
         }
-        String windowId = window.getId().getStringId();
-        for (PortalURLParameter parm : url.getParameters())
-        {
-            if (windowId.equals(parm.getWindowId()))
-            {
+        final String windowId = window.getId().getStringId();
+        for (PortalURLParameter parm : url.getParameters()) {
+            if (windowId.equals(parm.getWindowId())) {
                 String[] values = parameters.get(parm.getName());
-                if (values == null)
-                {
+                if (values == null) {
                     parameters.put(parm.getName(), parm.getValues());
-                }
-                else
-                {
+                } else {
                     String[] copy = new 
String[values.length+parm.getValues().length];
                     System.arraycopy(values, 0, copy, 0, values.length);
                     System.arraycopy(parm.getValues(), 0, copy, values.length, 
parm.getValues().length);
@@ -226,57 +240,112 @@ public class PortletRequestContextImpl i
         return parameters;
     }
 
+    /**
+     * @see org.apache.pluto.container.PortletRequestContext#getProperties()
+     */
     @SuppressWarnings("unchecked")
-    public Map<String, String[]> getProperties()
-    {
-        HashMap<String, String[]> properties = new HashMap<String, String[]>();
-        for (Enumeration<String> names = servletRequest.getHeaderNames(); 
names.hasMoreElements(); )
-        {
-            String name = names.nextElement();
-            ArrayList<String> values = new ArrayList<String>();
-            for (Enumeration<String> headers = 
servletRequest.getHeaders(name); headers.hasMoreElements(); )
-            {
+    public Map<String, String[]> getProperties() {
+        final Map<String, String[]> properties = new HashMap<String, 
String[]>();
+        for (Enumeration<String> names = servletRequest.getHeaderNames(); 
names.hasMoreElements(); ) {
+            final String name = names.nextElement();
+            final List<String> values = new ArrayList<String>();
+            for (Enumeration<String> headers = 
servletRequest.getHeaders(name); headers.hasMoreElements(); ) {
                 values.add(headers.nextElement());
             }
-            int size = values.size();
-            if (size > 0)
-            {
+            final int size = values.size();
+            if (size > 0) {
                 properties.put(name, values.toArray(new String[size]));
             }
         }
         return properties;
     }
 
-    public Map<String, String[]> getPublicParameterMap()
-    {
-        HashMap<String, String[]> parameters = new HashMap<String, String[]>();
-        for (Map.Entry<String, String[]> entry : 
url.getPublicParameters().entrySet())
-        {
-            if (isPublicRenderParameter(entry.getKey()))
-            {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getPublicParameterMap()
+     */
+    public Map<String, String[]> getPublicParameterMap() {
+        final Map<String, String[]> parameters = new HashMap<String, 
String[]>();
+        for (Map.Entry<String, String[]> entry : 
url.getPublicParameters().entrySet()) {
+            if (isPublicRenderParameter(entry.getKey())) {
                 parameters.put(entry.getKey(), entry.getValue());
             }
         }
         return parameters;
     }
 
-    public HttpServletRequest getContainerRequest()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getContainerRequest()
+     */
+    public HttpServletRequest getContainerRequest() {
         return containerRequest;
     }
 
-    public HttpServletResponse getContainerResponse()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getContainerResponse()
+     */
+    public HttpServletResponse getContainerResponse() {
         return containerResponse;
     }
 
-    public HttpServletRequest getServletRequest()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getServletRequest()
+     */
+    public HttpServletRequest getServletRequest() {
         return servletRequest;
     }
 
-    public HttpServletResponse getServletResponse()
-    {
+    /**
+     * @see 
org.apache.pluto.container.PortletRequestContext#getServletResponse()
+     */
+    public HttpServletResponse getServletResponse() {
         return servletResponse;
     }
+
+    public void init(final PortletRequest portletRequest,
+            final PortletResponse portletResponse) {
+        this.portletRequest = portletRequest;
+        this.portletResponse = portletResponse;
+    }
+
+    public HttpServletRequest getWrappedRequest() {
+        if ( wrappedRequest == null ) {
+            wrappedRequest = new 
HttpServletRequestWrapper(this.getServletRequest()) {
+                @Override
+                public Object getAttribute(final String name) {
+                    return PortletRequestContextImpl.this.getAttribute(name);
+                }
+
+                @Override
+                public Enumeration getAttributeNames() {
+                    return PortletRequestContextImpl.this.getAttributeNames();
+                }
+
+                @Override
+                public void setAttribute(final String name, final Object 
value) {
+                    PortletRequestContextImpl.this.setAttribute(name, value);
+                }
+
+                @Override
+                public void removeAttribute(final String name) {
+                    PortletRequestContextImpl.this.setAttribute(name, null);
+                }
+
+            };
+            wrappedRequest.setAttribute(PortletInvokerService.PORTLET_CONFIG, 
PortletRequestContextImpl.this.getPortletConfig());
+            wrappedRequest.setAttribute(PortletInvokerService.PORTLET_REQUEST, 
PortletRequestContextImpl.this.portletRequest);
+            
wrappedRequest.setAttribute(PortletInvokerService.PORTLET_RESPONSE, 
PortletRequestContextImpl.this.portletResponse);
+        }
+        return wrappedRequest;
+    }
+
+    public void cleanup() {
+        if ( wrappedRequest != null ) {
+            
wrappedRequest.removeAttribute(PortletInvokerService.PORTLET_CONFIG);
+            
wrappedRequest.removeAttribute(PortletInvokerService.PORTLET_REQUEST);
+            
wrappedRequest.removeAttribute(PortletInvokerService.PORTLET_RESPONSE);
+            wrappedRequest = null;
+        }
+        this.portletRequest = null;
+        this.portletResponse = null;
+    }
 }

Modified: 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletResourceRequestContextImpl.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletResourceRequestContextImpl.java?rev=1412867&r1=1412866&r2=1412867&view=diff
==============================================================================
--- 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletResourceRequestContextImpl.java
 (original)
+++ 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/PortletResourceRequestContextImpl.java
 Fri Nov 23 13:07:18 2012
@@ -25,10 +25,6 @@ import org.apache.pluto.container.Portle
 import org.apache.pluto.container.PortletResourceRequestContext;
 import org.apache.pluto.container.PortletWindow;
 
-/**
- * @version $Id$
- *
- */
 public class PortletResourceRequestContextImpl extends 
PortletRequestContextImpl implements
                 PortletResourceRequestContext
 {

Modified: 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/services/DefaultPortletInvokerService.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/services/DefaultPortletInvokerService.java?rev=1412867&r1=1412866&r2=1412867&view=diff
==============================================================================
--- 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/services/DefaultPortletInvokerService.java
 (original)
+++ 
sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/services/DefaultPortletInvokerService.java
 Fri Nov 23 13:07:18 2012
@@ -53,6 +53,7 @@ import org.apache.sling.portal.container
 import org.apache.sling.portal.container.SlingPortletWindow;
 import org.apache.sling.portal.container.api.Container;
 import org.apache.sling.portal.container.api.SlingRequestDispatcher;
+import org.apache.sling.portal.container.internal.PortletRequestContextImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -276,49 +277,55 @@ public class DefaultPortletInvokerServic
 
         // initialize
         requestContext.init(portletConfig, portletContext.getServletContext(), 
new RequestWrapper(request, portletContext.getServletContext()), response);
+        ((PortletRequestContextImpl)requestContext).init(portletRequest, 
portletResponse);
+
         responseContext.init(request, response);
 
-        // The requested method is RENDER: call Portlet.render(..)
-        if (methodId == PortletInvokerService.METHOD_RENDER) {
-            RenderRequest renderRequest = (RenderRequest) portletRequest;
-            RenderResponse renderResponse = (RenderResponse) portletResponse;
-            filterManager.processFilter(renderRequest, renderResponse,
-                    info.getPortlet(), portletContext);
-        }
+        try {
+            // The requested method is RENDER: call Portlet.render(..)
+            if (methodId == PortletInvokerService.METHOD_RENDER) {
+                RenderRequest renderRequest = (RenderRequest) portletRequest;
+                RenderResponse renderResponse = (RenderResponse) 
portletResponse;
+                filterManager.processFilter(renderRequest, renderResponse,
+                        info.getPortlet(), portletContext);
+            }
 
-        // The requested method is RESOURCE: call
-        // ResourceServingPortlet.serveResource(..)
-        else if (methodId == PortletInvokerService.METHOD_RESOURCE) {
-            ResourceRequest resourceRequest = (ResourceRequest) portletRequest;
-            ResourceResponse resourceResponse = (ResourceResponse) 
portletResponse;
-            filterManager.processFilter(resourceRequest, resourceResponse,
-                    (ResourceServingPortlet)info.getPortlet(), portletContext);
-        }
+            // The requested method is RESOURCE: call
+            // ResourceServingPortlet.serveResource(..)
+            else if (methodId == PortletInvokerService.METHOD_RESOURCE) {
+                ResourceRequest resourceRequest = (ResourceRequest) 
portletRequest;
+                ResourceResponse resourceResponse = (ResourceResponse) 
portletResponse;
+                filterManager.processFilter(resourceRequest, resourceResponse,
+                        (ResourceServingPortlet)info.getPortlet(), 
portletContext);
+            }
 
-        // The requested method is ACTION: call Portlet.processAction(..)
-        else if (methodId == PortletInvokerService.METHOD_ACTION) {
-            ActionRequest actionRequest = (ActionRequest) portletRequest;
-            ActionResponse actionResponse = (ActionResponse) portletResponse;
-            filterManager.processFilter(actionRequest, actionResponse,
-                    info.getPortlet(), portletContext);
-        }
+            // The requested method is ACTION: call Portlet.processAction(..)
+            else if (methodId == PortletInvokerService.METHOD_ACTION) {
+                ActionRequest actionRequest = (ActionRequest) portletRequest;
+                ActionResponse actionResponse = (ActionResponse) 
portletResponse;
+                filterManager.processFilter(actionRequest, actionResponse,
+                        info.getPortlet(), portletContext);
+            }
 
-        // The request method is Event: call Portlet.processEvent(..)
-        else if (methodId == PortletInvokerService.METHOD_EVENT) {
-            EventRequest eventRequest = (EventRequest) portletRequest;
-            EventResponse eventResponse = (EventResponse) portletResponse;
-            filterManager.processFilter(eventRequest, eventResponse,
-                    (EventPortlet)info.getPortlet(), portletContext);
-        }
-        // the request method is Load
-        else if (methodId == PortletInvokerService.METHOD_LOAD) {
-            try {
-                this.registry.loadPortlet(info);
-            } catch (PortletContainerException e) {
-                throw new PortletException(e);
+            // The request method is Event: call Portlet.processEvent(..)
+            else if (methodId == PortletInvokerService.METHOD_EVENT) {
+                EventRequest eventRequest = (EventRequest) portletRequest;
+                EventResponse eventResponse = (EventResponse) portletResponse;
+                filterManager.processFilter(eventRequest, eventResponse,
+                        (EventPortlet)info.getPortlet(), portletContext);
+            }
+            // the request method is Load
+            else if (methodId == PortletInvokerService.METHOD_LOAD) {
+                try {
+                    this.registry.loadPortlet(info);
+                } catch (PortletContainerException e) {
+                    throw new PortletException(e);
+                }
             }
+            request.setAttribute(ATTR_PROCESSED, Boolean.TRUE);
+        } finally {
+            ((PortletRequestContextImpl)requestContext).cleanup();
         }
-        request.setAttribute(ATTR_PROCESSED, Boolean.TRUE);
     }
 
     public static final class RequestWrapper extends HttpServletRequestWrapper 
{


Reply via email to