Author: julien(a)jboss.com
Date: 2008-02-28 09:45:26 -0500 (Thu, 28 Feb 2008)
New Revision: 10156
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/aspects/portlet/PortletCustomizationInterceptor.java
Removed:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/TestInstanceContext.java
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/PageRenderer.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalRenderResponse.java
modules/portlet/trunk/test/src/test/resources/portlet-tck-war/WEB-INF/jboss-beans.xml
modules/portlet/trunk/test/src/test/resources/portlet-test-war/WEB-INF/jboss-beans.xml
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/jboss-beans.xml
Log:
replace TestInstanceContext by an interceptor placed on the consumer side.
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/aspects/portlet/PortletCustomizationInterceptor.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/aspects/portlet/PortletCustomizationInterceptor.java
(rev 0)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/aspects/portlet/PortletCustomizationInterceptor.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -0,0 +1,136 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.aspects.portlet;
+
+import org.jboss.portal.portlet.invocation.PortletInterceptor;
+import org.jboss.portal.portlet.invocation.PortletInvocation;
+import org.jboss.portal.portlet.invocation.ActionInvocation;
+import org.jboss.portal.portlet.invocation.EventInvocation;
+import org.jboss.portal.portlet.spi.InstanceContext;
+import org.jboss.portal.portlet.state.AccessMode;
+import org.jboss.portal.portlet.StateEvent;
+import org.jboss.portal.portlet.PortletContext;
+import org.jboss.portal.common.invocation.InvocationException;
+import org.jboss.portal.common.invocation.AttributeResolver;
+
+/**
+ * <p>This interceptor takes in charge the management of portlet customization when
the invocation carries
+ * an read only access mode. The customizations will be stored in the principal scope of
the portlet
+ * invocation for security reasons.</p>
+ *
+ * <p>This interceptor must not be used in a production environment.</p>
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class PortletCustomizationInterceptor extends PortletInterceptor
+{
+ protected Object invoke(PortletInvocation invocation) throws Exception,
InvocationException
+ {
+ InstanceContext oldContext = invocation.getInstanceContext();
+ if ((invocation instanceof ActionInvocation || invocation instanceof
EventInvocation) && oldContext.getAccessMode() == AccessMode.READ_ONLY)
+ {
+ PortletContext oldTarget = invocation.getTarget();
+ try
+ {
+ AttributeResolver resolver =
invocation.getContext().getAttributeResolver(PortletInvocation.PRINCIPAL_SCOPE);
+ PortletInstanceContext newContext = new PortletInstanceContext(resolver,
oldTarget);
+
+ //
+ invocation.setInstanceContext(newContext);
+ invocation.setTarget(newContext.getTarget());
+
+ //
+ return invocation.invokeNext();
+ }
+ finally
+ {
+ invocation.setTarget(oldTarget);
+ invocation.setInstanceContext(oldContext);
+ }
+ }
+ else
+ {
+ return invocation.invokeNext();
+ }
+ }
+
+ private static class PortletInstanceContext implements InstanceContext
+ {
+
+ /** . */
+ private AttributeResolver resolver;
+
+ /** . */
+ private PortletContext target;
+
+ /** . */
+ private boolean useClone;
+
+ /** . */
+ private String id;
+
+ public PortletInstanceContext(
+ AttributeResolver resolver,
+ PortletContext portletContext)
+ {
+ String id = portletContext.getId();
+ PortletContext target = portletContext;
+ boolean useClone = false;
+ PortletContext clone = (PortletContext)resolver.getAttribute("clone."
+ id);
+ if (clone != null)
+ {
+ target = clone;
+ useClone = true;
+ }
+
+ //
+ this.resolver = resolver;
+ this.useClone = useClone;
+ this.target = target;
+ this.id = id;
+ }
+
+ public PortletContext getTarget()
+ {
+ return target;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public AccessMode getAccessMode()
+ {
+ return useClone ? AccessMode.READ_WRITE : AccessMode.CLONE_BEFORE_WRITE;
+ }
+
+ public void onStateEvent(StateEvent event)
+ {
+ target = event.getPortletContext();
+ useClone = true;
+ resolver.setAttribute("clone." + id, target);
+ }
+ }
+}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -318,6 +318,7 @@
instanceCtx.onStateEvent(event);
}
}
+ break;
}
case READ_WRITE:
{
@@ -346,6 +347,7 @@
StateEvent event = new StateEvent(modifiedCtx,
StateEvent.Type.PORTLET_MODIFIED_EVENT);
instanceCtx.onStateEvent(event);
}
+ break;
}
case READ_ONLY:
{
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/AbstractPortletControllerContext.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -37,6 +37,7 @@
import org.jboss.portal.portlet.impl.spi.AbstractServerContext;
import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
+import org.jboss.portal.portlet.impl.spi.AbstractInstanceContext;
import org.jboss.portal.portlet.info.PortletInfo;
import org.jboss.portal.portlet.invocation.ActionInvocation;
import org.jboss.portal.portlet.invocation.EventInvocation;
@@ -125,17 +126,15 @@
Portlet portlet = getPortlet(windowId);
- TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
-
actionInvocation.setClientContext(new AbstractClientContext(req));
actionInvocation.setServerContext(new AbstractServerContext(req, resp));
- actionInvocation.setInstanceContext(instanceContext);
+ actionInvocation.setInstanceContext(new
AbstractInstanceContext(portlet.getContext().getId()));
actionInvocation.setUserContext(new AbstractUserContext(req));
actionInvocation.setWindowContext(new AbstractWindowContext(windowId));
actionInvocation.setPortalContext(new TestPortalContext());
actionInvocation.setSecurityContext(new AbstractSecurityContext(req));
actionInvocation.setRequestContext(new AbstractRequestContext(req));
- actionInvocation.setTarget(instanceContext.getTarget());
+ actionInvocation.setTarget(portlet.getContext());
return invoke((PortletInvocation)actionInvocation);
}
@@ -147,16 +146,16 @@
Portlet portlet = getPortlet(windowId);
- TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
+// TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
eventInvocation.setClientContext(new AbstractClientContext(req, requestCookies));
eventInvocation.setServerContext(new AbstractServerContext(req, resp));
- eventInvocation.setInstanceContext(instanceContext);
+ eventInvocation.setInstanceContext(new
AbstractInstanceContext(portlet.getContext().getId()));
eventInvocation.setUserContext(new AbstractUserContext(req));
eventInvocation.setWindowContext(new AbstractWindowContext(windowId));
eventInvocation.setPortalContext(new TestPortalContext());
eventInvocation.setSecurityContext(new AbstractSecurityContext(req));
- eventInvocation.setTarget(instanceContext.getTarget());
+ eventInvocation.setTarget(portlet.getContext());
return invoke(eventInvocation);
}
@@ -168,17 +167,15 @@
Portlet portlet = getPortlet(windowId);
- TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
-
resourceInvocation.setClientContext(new AbstractClientContext(req));
resourceInvocation.setServerContext(new AbstractServerContext(req, resp));
- resourceInvocation.setInstanceContext(instanceContext);
+ resourceInvocation.setInstanceContext(new
AbstractInstanceContext(portlet.getContext().getId()));
resourceInvocation.setUserContext(new AbstractUserContext(req));
resourceInvocation.setWindowContext(new AbstractWindowContext(windowId));
resourceInvocation.setPortalContext(new TestPortalContext());
resourceInvocation.setSecurityContext(new AbstractSecurityContext(req));
resourceInvocation.setRequestContext(new AbstractRequestContext(req));
- resourceInvocation.setTarget(instanceContext.getTarget());
+ resourceInvocation.setTarget(portlet.getContext());
//
return invoke((PortletInvocation)resourceInvocation);
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/PageRenderer.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/PageRenderer.java 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/PageRenderer.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -37,6 +37,7 @@
import org.jboss.portal.portlet.impl.spi.AbstractServerContext;
import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
+import org.jboss.portal.portlet.impl.spi.AbstractInstanceContext;
import org.jboss.portal.portlet.invocation.RenderInvocation;
import org.jboss.portal.portlet.invocation.response.ErrorResponse;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
@@ -220,20 +221,18 @@
HttpServletResponse resp = context.getClientResponse();
//
- TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), false);
-
PortletInvocationContext renderContext =
context.getPortletControllerContext().createPortletInvocationContext(portlet.getContext().getId(),
pageNS);
//
RenderInvocation render = new RenderInvocation(renderContext);
render.setClientContext(new AbstractClientContext(req,
pageProperties.getCookies()));
render.setServerContext(new AbstractServerContext(req, resp));
- render.setInstanceContext(instanceContext);
+ render.setInstanceContext(new
AbstractInstanceContext(portlet.getContext().getId()));
render.setUserContext(new AbstractUserContext(req));
render.setWindowContext(new AbstractWindowContext(portlet.getContext().getId()));
render.setPortalContext(new TestPortalContext());
render.setSecurityContext(new AbstractSecurityContext(req));
- render.setTarget(instanceContext.getTarget());
+ render.setTarget(portlet.getContext());
render.setMode(mode);
render.setWindowState(windowState);
render.setNavigationalState(portletNS);
Deleted:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/TestInstanceContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/TestInstanceContext.java 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/controller/TestInstanceContext.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -1,103 +0,0 @@
-/******************************************************************************
- * JBoss, a division of Red Hat *
- * Copyright 2008, Red Hat Middleware, LLC, and individual *
- * contributors as indicated by the @authors tag. See the *
- * copyright.txt in the distribution for a full listing of *
- * individual contributors. *
- * *
- * This is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU Lesser General Public License as *
- * published by the Free Software Foundation; either version 2.1 of *
- * the License, or (at your option) any later version. *
- * *
- * This software is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this software; if not, write to the Free *
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
- ******************************************************************************/
-
-package org.jboss.portal.portlet.test.controller;
-
-import org.jboss.portal.portlet.PortletContext;
-import org.jboss.portal.portlet.StateEvent;
-import org.jboss.portal.portlet.spi.InstanceContext;
-import org.jboss.portal.portlet.state.AccessMode;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-public class TestInstanceContext implements InstanceContext
-{
-
- /** . */
- private HttpServletRequest req;
-
- /** . */
- private boolean modifiable;
-
- /** . */
- private PortletContext target;
-
- /** . */
- private boolean useClone;
-
- /** . */
- private String id;
-
- public TestInstanceContext(
- HttpServletRequest req,
- PortletContext portletContext,
- boolean modifiable)
- {
- String id = portletContext.getId();
- PortletContext target = portletContext;
- boolean useClone = false;
- HttpSession session = req.getSession(false);
- if (session != null)
- {
- PortletContext clone = (PortletContext)session.getAttribute("clone." +
id);
- if (clone != null)
- {
- target = clone;
- useClone = true;
- }
- }
-
- //
- this.req = req;
- this.useClone = useClone;
- this.target = target;
- this.id = id;
- this.modifiable = modifiable;
- }
-
- public PortletContext getTarget()
- {
- return target;
- }
-
- public String getId()
- {
- return id;
- }
-
- public AccessMode getAccessMode()
- {
- return modifiable ? (useClone ? AccessMode.READ_WRITE :
AccessMode.CLONE_BEFORE_WRITE) : AccessMode.READ_ONLY;
- }
-
- public void onStateEvent(StateEvent event)
- {
- target = event.getPortletContext();
- req.getSession().setAttribute("clone." + id, target);
- }
-}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalRenderResponse.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalRenderResponse.java 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalRenderResponse.java 2008-02-28
14:45:26 UTC (rev 10156)
@@ -22,9 +22,7 @@
******************************************************************************/
package org.jboss.portal.portlet.test.jsp;
-import org.jboss.portal.portlet.test.controller.TestInstanceContext;
import org.jboss.portal.portlet.test.controller.TestPortalContext;
-import org.jboss.portal.portlet.test.jsp.WindowResult;
import org.jboss.portal.portlet.controller.state.PageNavigationalState;
import org.jboss.portal.portlet.controller.state.WindowNavigationalState;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
@@ -37,6 +35,7 @@
import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
import org.jboss.portal.portlet.impl.spi.AbstractSecurityContext;
+import org.jboss.portal.portlet.impl.spi.AbstractInstanceContext;
import org.jboss.portal.portlet.spi.PortletInvocationContext;
import org.jboss.portal.WindowState;
import org.jboss.portal.Mode;
@@ -169,7 +168,7 @@
RenderInvocation render = new RenderInvocation(renderContext);
render.setClientContext(new
AbstractClientContext(portletControllerContext.getClientRequest()));
render.setServerContext(new
AbstractServerContext(portletControllerContext.getClientRequest(),
portletControllerContext.getClientResponse()));
- render.setInstanceContext(new
TestInstanceContext(portletControllerContext.getClientRequest(), portlet.getContext(),
false));
+ render.setInstanceContext(new
AbstractInstanceContext(portlet.getContext().getId()));
render.setUserContext(new
AbstractUserContext(portletControllerContext.getClientRequest()));
render.setWindowContext(new AbstractWindowContext(windowId));
render.setPortalContext(new TestPortalContext());
Modified:
modules/portlet/trunk/test/src/test/resources/portlet-tck-war/WEB-INF/jboss-beans.xml
===================================================================
---
modules/portlet/trunk/test/src/test/resources/portlet-tck-war/WEB-INF/jboss-beans.xml 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/test/resources/portlet-tck-war/WEB-INF/jboss-beans.xml 2008-02-28
14:45:26 UTC (rev 10156)
@@ -56,10 +56,13 @@
<!-- Consumer stack -->
<bean name="ConsumerCacheInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.ConsumerCacheInterceptor">
</bean>
+ <bean name="PortletCustomizationInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.PortletCustomizationInterceptor">
+ </bean>
<bean name="ConsumerStackFactory"
class="org.jboss.portal.portlet.test.InterceptorStackFactoryImpl">
<property name="interceptors">
<array>
<inject bean="ConsumerCacheInterceptor"/>
+ <inject bean="PortletCustomizationInterceptor"/>
</array>
</property>
</bean>
Modified:
modules/portlet/trunk/test/src/test/resources/portlet-test-war/WEB-INF/jboss-beans.xml
===================================================================
---
modules/portlet/trunk/test/src/test/resources/portlet-test-war/WEB-INF/jboss-beans.xml 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/test/resources/portlet-test-war/WEB-INF/jboss-beans.xml 2008-02-28
14:45:26 UTC (rev 10156)
@@ -56,10 +56,13 @@
<!-- Consumer stack -->
<bean name="ConsumerCacheInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.ConsumerCacheInterceptor">
</bean>
+ <bean name="PortletCustomizationInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.PortletCustomizationInterceptor">
+ </bean>
<bean name="ConsumerStackFactory"
class="org.jboss.portal.portlet.test.InterceptorStackFactoryImpl">
<property name="interceptors">
<array>
<inject bean="ConsumerCacheInterceptor"/>
+ <inject bean="PortletCustomizationInterceptor"/>
</array>
</property>
</bean>
Modified:
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/jboss-beans.xml
===================================================================
---
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/jboss-beans.xml 2008-02-28
13:41:58 UTC (rev 10155)
+++
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/jboss-beans.xml 2008-02-28
14:45:26 UTC (rev 10156)
@@ -43,10 +43,13 @@
<!-- Consumer stack -->
<bean name="ConsumerCacheInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.ConsumerCacheInterceptor">
</bean>
+ <bean name="PortletCustomizationInterceptor"
class="org.jboss.portal.portlet.aspects.portlet.PortletCustomizationInterceptor">
+ </bean>
<bean name="ConsumerStackFactory"
class="org.jboss.portal.portlet.test.InterceptorStackFactoryImpl">
<property name="interceptors">
<array>
<inject bean="ConsumerCacheInterceptor"/>
+ <inject bean="PortletCustomizationInterceptor"/>
</array>
</property>
</bean>