[portal-commits] JBoss Portal SVN: r5776 - in trunk: core/src/main/org/jboss/portal/core/impl/model/instance core/src/main/org/jboss/portal/core/portlet/management core/src/main/org/jboss/portal/test/core/state federation/src/main/org/jboss/portal/federation/impl portlet/src/main/org/jboss/portal/portlet portlet/src/main/org/jboss/portal/portlet/container portlet/src/main/org/jboss/portal/portlet/state portlet/src/main/org/jboss/portal/portlet/state/consumer portlet/src/main/org/jboss/portal/portlet/state/producer portlet/src/main/org/jboss/portal/portlet/tck portlet/src/main/org/jboss/portal/portlet/test portlet/src/main/org/jboss/portal/portlet/test/support wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer wsrp/src/main/org/jboss/portal/wsrp wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet wsrp/src/main/org/jboss/portal/wsrp/producer

portal-commits at lists.jboss.org portal-commits at lists.jboss.org
Sat Dec 9 14:13:10 EST 2006


Author: chris.laprun at jboss.com
Date: 2006-12-09 14:12:54 -0500 (Sat, 09 Dec 2006)
New Revision: 5776

Added:
   trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/PortletStateChangeRequiredException.java
Modified:
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
   trunk/core/src/main/org/jboss/portal/core/portlet/management/PortletManagerBean.java
   trunk/core/src/main/org/jboss/portal/test/core/state/ProducerTestCase.java
   trunk/federation/src/main/org/jboss/portal/federation/impl/FederatedPortletInvokerService.java
   trunk/portlet/src/main/org/jboss/portal/portlet/PortletContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/StatefulPortletContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/container/PortletContainerInvoker.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/AbstractPropertyContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/AbstractPropertyMap.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/AccessMode.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/DestroyCloneFailure.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/InvalidStateIdException.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/NoSuchStateException.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/PortletClonedEvent.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/PortletModifiedEvent.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/Property.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyChange.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyMap.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/SimplePropertyMap.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/StateConversionException.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/StateConverter.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/StateManagementPolicy.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPersistenceManager.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPortletInvoker.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerState.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerStateContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPersistenceManager.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerState.java
   trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerStateContext.java
   trunk/portlet/src/main/org/jboss/portal/portlet/tck/TCKPortletController.java
   trunk/portlet/src/main/org/jboss/portal/portlet/test/PortletController.java
   trunk/portlet/src/main/org/jboss/portal/portlet/test/support/PortletInvokerSupport.java
   trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/MarkupTestCase.java
   trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/ServiceDescriptionTestCase.java
   trunk/wsrp/src/main/org/jboss/portal/wsrp/WSRPUtils.java
   trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/WSRPPortlet.java
   trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/MarkupHandler.java
   trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
Log:
- Refactored PortletContext to encapsulate state better (in particular, uses a factory method to create the appropriate object).
- Added PortletStateChangeRequiredException thrown by ProducerPortletInvoker.invoke so that the WSRP can know when an attempt
to modify a read-only portlet was made.
- Tried to set up properties (how can we do that automatically instead of having to do it manually?)

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -31,7 +31,6 @@
 import org.jboss.portal.portlet.PortletContext;
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
-import org.jboss.portal.portlet.StatefulPortletContext;
 import org.jboss.portal.portlet.invocation.PortletInvocation;
 import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
 import org.jboss.portal.portlet.state.AccessMode;
@@ -107,30 +106,13 @@
 
    public PortletContext getPortletContext()
    {
-      if (state != null)
-      {
-         return new StatefulPortletContext(portletRef, state);
-      }
-      else
-      {
-         return new PortletContext(portletRef);
-      }
+      return PortletContext.createPortletContext(portletRef, state);
    }
 
    public void setPortletContext(PortletContext portletContext)
    {
       portletRef = portletContext.getId();
-
-      //
-      if (portletContext instanceof StatefulPortletContext)
-      {
-         StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
-         state = statefulPortletContext.getMarshalledState();
-      }
-      else
-      {
-         state = null;
-      }
+      state = portletContext.getState();
    }
 
    protected abstract boolean isModifiable();

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -22,9 +22,10 @@
  ******************************************************************************/
 package org.jboss.portal.core.impl.model.instance;
 
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+import org.hibernate.Criteria;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
-import org.hibernate.Criteria;
 import org.hibernate.criterion.Restrictions;
 import org.hibernate.exception.ConstraintViolationException;
 import org.jboss.portal.common.invocation.InterceptorStackFactory;
@@ -66,8 +67,6 @@
 import java.util.List;
 import java.util.Set;
 
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
-
 /**
  * Instance Container that is persistent
  *
@@ -81,7 +80,7 @@
 {
 
    private List listeners = new ArrayList();
-   
+
    /** . */
    protected InterceptorStackFactory stackFactory;
 
@@ -141,7 +140,7 @@
       contextualizer = new ObjectContextualizer(ctx);
       cache = new ConcurrentReaderHashMap();
    }
-   
+
    public void flushNaturalIdCache()
    {
       cache.clear();
@@ -268,7 +267,7 @@
       }
 
       //
-      PortletContext portletContext = new PortletContext(portletId);
+      PortletContext portletContext = PortletContext.createPortletContext(portletId);
 
       // Check that the portlet exist before creating an instance of it
       portletInvoker.getPortlet(portletContext);
@@ -311,7 +310,7 @@
       }
 
       raiseCreatedPortletInstanceEvent(instance);
-      
+
       //
       return instance;
    }
@@ -404,10 +403,10 @@
       // Delete instance
       removeBindings(session, instance);
       session.delete(instance);
-      
+
       //
       session.flush();
-      
+
       raiseDestroyedPortletInstanceEvent(instance);
    }
 
@@ -449,11 +448,11 @@
       {
          if (e instanceof PortletInvokerException)
          {
-            throw(PortletInvokerException)e;
+            throw (PortletInvokerException)e;
          }
          else if (e instanceof RuntimeException)
          {
-            throw(RuntimeException)e;
+            throw (RuntimeException)e;
          }
          else
          {
@@ -492,7 +491,7 @@
       Long pk = cacheNaturalId ? (Long)cache.get(id) : null;
 
       //
-      InstanceDefinitionImpl instance ;
+      InstanceDefinitionImpl instance;
 
       //
       if (pk == null)
@@ -667,7 +666,7 @@
    {
       return this;
    }
-   
+
    public void addListener(InstanceContainerListener listener)
    {
       listeners.add(listener);

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/management/PortletManagerBean.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/management/PortletManagerBean.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/management/PortletManagerBean.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -248,7 +248,7 @@
       {
          try
          {
-            return getPortletInvoker().getPortlet(new PortletContext(selectedPortletId));
+            return getPortletInvoker().getPortlet(PortletContext.createPortletContext(selectedPortletId));
          }
          catch (PortletInvokerException e)
          {

Modified: trunk/core/src/main/org/jboss/portal/test/core/state/ProducerTestCase.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/test/core/state/ProducerTestCase.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/core/src/main/org/jboss/portal/test/core/state/ProducerTestCase.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -31,10 +31,10 @@
 import org.apache.log4j.SimpleLayout;
 import org.jboss.portal.Mode;
 import org.jboss.portal.common.junit.TransactionAssert;
-import org.jboss.portal.common.value.StringValue;
 import org.jboss.portal.common.test.TestParametrization;
 import org.jboss.portal.common.test.junit.JUnitAdapter;
 import org.jboss.portal.common.test.junit.POJOJUnitTest;
+import org.jboss.portal.common.value.StringValue;
 import org.jboss.portal.core.impl.portlet.state.PersistentStateStore;
 import org.jboss.portal.core.impl.portlet.state.ProducerPortletInvoker;
 import org.jboss.portal.portlet.NoSuchPortletException;
@@ -62,9 +62,9 @@
 import org.jboss.portal.test.framework.embedded.DataSourceSupport;
 import org.jboss.portal.test.framework.embedded.HibernateSupport;
 
+import java.net.URL;
 import java.util.Collections;
 import java.util.List;
-import java.net.URL;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
@@ -255,7 +255,7 @@
       try
       {
          TransactionAssert.beginTransaction();
-         producer.createClone(new PortletContext("UnknownPortlet"));
+         producer.createClone(PortletContext.createPortletContext("UnknownPortlet"));
          fail("Was expecting no such portlet exception");
       }
       catch (NoSuchPortletException e)
@@ -297,7 +297,7 @@
    {
       // Clone a POP
       TransactionAssert.beginTransaction();
-      PortletContext cloneCtx = producer.createClone(new PortletContext("SimplePortlet"));
+      PortletContext cloneCtx = producer.createClone(PortletContext.createPortletContext("SimplePortlet"));
       TransactionAssert.commitTransaction();
 
       // Check the clone state
@@ -344,7 +344,7 @@
    public void testDestroyNonExistingPortletWithinTx() throws Exception
    {
       TransactionAssert.beginTransaction();
-      List failures = producer.destroyClones(Collections.singletonList(new PortletContext("_1")));
+      List failures = producer.destroyClones(Collections.singletonList(PortletContext.createPortletContext("_1")));
       assertEquals(Collections.singletonList(new DestroyCloneFailure("_1")), failures);
       TransactionAssert.commitTransaction();
    }
@@ -383,8 +383,8 @@
    {
       // Clone a POP 2 times
       TransactionAssert.beginTransaction();
-      PortletContext cloneId1 = producer.createClone(new PortletContext("SimplePortlet"));
-      PortletContext cloneId2 = producer.createClone(new PortletContext("SimplePortlet"));
+      PortletContext cloneId1 = producer.createClone(PortletContext.createPortletContext("SimplePortlet"));
+      PortletContext cloneId2 = producer.createClone(PortletContext.createPortletContext("SimplePortlet"));
       TransactionAssert.commitTransaction();
 
       // Clone the modified CCP 2 times
@@ -422,7 +422,7 @@
    {
       TransactionAssert.beginTransaction();
       PortletInvocation action = new ActionInvocation(new ActionContextImpl(Mode.VIEW));
-      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, new PortletContext("CloningPortlet"));
+      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, PortletContext.createPortletContext("CloningPortlet"));
       action.setUserContext(new UserContextImpl("julien"));
       InstanceContextImpl instanceContext = new InstanceContextImpl("whatever", AccessMode.CLONE_BEFORE_WRITE);
       action.setInstanceContext(instanceContext);
@@ -448,7 +448,8 @@
    {
       TransactionAssert.beginTransaction();
       PortletInvocation action = new ActionInvocation(new ActionContextImpl(Mode.VIEW));
-      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, new PortletContext("CloneFailedCloningPortlet"));
+      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE,
+         PortletContext.createPortletContext("CloneFailedCloningPortlet"));
       action.setUserContext(new UserContextImpl("julien"));
       InstanceContextImpl instanceContext = new InstanceContextImpl("whatever", AccessMode.READ_WRITE);
       action.setInstanceContext(instanceContext);
@@ -465,7 +466,8 @@
    {
       TransactionAssert.beginTransaction();
       PortletInvocation action = new ActionInvocation(new ActionContextImpl(Mode.VIEW));
-      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, new PortletContext("CloneFailedCloningPortlet"));
+      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE,
+         PortletContext.createPortletContext("CloneFailedCloningPortlet"));
       action.setUserContext(new UserContextImpl("julien"));
       InstanceContextImpl instanceContext = new InstanceContextImpl("whatever", AccessMode.READ_ONLY);
       action.setInstanceContext(instanceContext);
@@ -481,7 +483,7 @@
    public void testInvokeCloneBeforeWriteCCPWithinTx() throws Exception
    {
       TransactionAssert.beginTransaction();
-      PortletContext cloningPortletId = producer.createClone(new PortletContext("CloningPortlet"));
+      PortletContext cloningPortletId = producer.createClone(PortletContext.createPortletContext("CloningPortlet"));
       TransactionAssert.commitTransaction();
 
       // Modify the state of the CCP
@@ -520,7 +522,7 @@
    public void testInvokeReadWriteCCPWithinTx() throws Exception
    {
       TransactionAssert.beginTransaction();
-      PortletContext cloningPortletId = producer.createClone(new PortletContext("CloningPortlet"));
+      PortletContext cloningPortletId = producer.createClone(PortletContext.createPortletContext("CloningPortlet"));
       TransactionAssert.commitTransaction();
 
       //
@@ -550,7 +552,7 @@
    public void testInvokeReadOnlyCCPWithinTx() throws Exception
    {
       TransactionAssert.beginTransaction();
-      PortletContext cloneFailedCloningPortletId = producer.createClone(new PortletContext("CloneFailedCloningPortlet"));
+      PortletContext cloneFailedCloningPortletId = producer.createClone(PortletContext.createPortletContext("CloneFailedCloningPortlet"));
       TransactionAssert.commitTransaction();
 
       //
@@ -573,7 +575,8 @@
    {
       TransactionAssert.beginTransaction();
       PortletInvocation action = new ActionInvocation(new ActionContextImpl(Mode.VIEW));
-      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, new PortletContext("CloningPortletThrowingRuntimeException"));
+      action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE,
+         PortletContext.createPortletContext("CloningPortletThrowingRuntimeException"));
       action.setUserContext(new UserContextImpl("julien"));
       InstanceContextImpl instanceContext = new InstanceContextImpl("whatever", AccessMode.CLONE_BEFORE_WRITE);
       action.setInstanceContext(instanceContext);
@@ -609,12 +612,12 @@
    {
       // Clone a POP
       TransactionAssert.beginTransaction();
-      PortletContext cloneId = producer.createClone(new PortletContext("SimplePortlet"));
+      PortletContext cloneId = producer.createClone(PortletContext.createPortletContext("SimplePortlet"));
       TransactionAssert.commitTransaction();
 
       //
       TransactionAssert.beginTransaction();
-      Portlet portlet = producer.getPortlet(new PortletContext(cloneId.getId()));
+      Portlet portlet = producer.getPortlet(PortletContext.createPortletContext(cloneId.getId()));
       assertEquals("SimplePortlet", portlet.getContext().getId());
       TransactionAssert.commitTransaction();
 
@@ -625,7 +628,7 @@
 
       //
       TransactionAssert.beginTransaction();
-      portlet = producer.getPortlet(new PortletContext(cloneCloneId.getId()));
+      portlet = producer.getPortlet(PortletContext.createPortletContext(cloneCloneId.getId()));
       assertEquals("SimplePortlet", portlet.getContext().getId());
       TransactionAssert.commitTransaction();
    }

Modified: trunk/federation/src/main/org/jboss/portal/federation/impl/FederatedPortletInvokerService.java
===================================================================
--- trunk/federation/src/main/org/jboss/portal/federation/impl/FederatedPortletInvokerService.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/federation/src/main/org/jboss/portal/federation/impl/FederatedPortletInvokerService.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -31,7 +31,6 @@
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
 import org.jboss.portal.portlet.StateEvent;
-import org.jboss.portal.portlet.StatefulPortletContext;
 import org.jboss.portal.portlet.invocation.PortletInvocation;
 import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
 import org.jboss.portal.portlet.spi.InstanceContext;
@@ -227,29 +226,13 @@
    private PortletContext dereference(PortletContext compoundPortletContext)
    {
       String portletId = compoundPortletContext.getId().substring(id.length() + 1);
-      if (compoundPortletContext instanceof StatefulPortletContext)
-      {
-         StatefulPortletContext statefulCompoundPortletContext = (StatefulPortletContext)compoundPortletContext;
-         return new StatefulPortletContext(portletId, statefulCompoundPortletContext.getMarshalledState());
-      }
-      else
-      {
-         return new PortletContext(portletId);
-      }
+      return PortletContext.createPortletContext(portletId, compoundPortletContext.getState());
    }
 
    private PortletContext reference(PortletContext portletContext)
    {
       String compoundPortletId = reference(portletContext.getId());
-      if (portletContext instanceof StatefulPortletContext)
-      {
-         StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
-         return new StatefulPortletContext(compoundPortletId, statefulPortletContext.getMarshalledState());
-      }
-      else
-      {
-         return new PortletContext(compoundPortletId);
-      }
+      return PortletContext.createPortletContext(compoundPortletId, portletContext.getState());
    }
 
    private String reference(String portletId)

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/PortletContext.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/PortletContext.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/PortletContext.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -22,11 +22,15 @@
  ******************************************************************************/
 package org.jboss.portal.portlet;
 
+import org.jboss.portal.common.util.ParameterValidation;
+
 import java.io.Serializable;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ * @since 2.6
  */
 public class PortletContext implements Serializable
 {
@@ -34,12 +38,9 @@
    /** . */
    protected final String id;
 
-   public PortletContext(String id) throws IllegalArgumentException
+   PortletContext(String id) throws IllegalArgumentException
    {
-      if (id == null)
-      {
-         throw new IllegalArgumentException("Id must not be null");
-      }
+      ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(id, "portlet id", "PortletContext");
       this.id = id;
    }
 
@@ -52,4 +53,47 @@
    {
       return "PortletContext[" + id + "]";
    }
+
+   public byte[] getState()
+   {
+      return null;
+   }
+
+   /**
+    * Create a PortletContext based on id and optional state.
+    *
+    * @param id    the portlet id
+    * @param state the optional state
+    * @return a new PortletContext based on the provided information
+    */
+   public static PortletContext createPortletContext(String id, byte[] state)
+   {
+      if (state != null && state.length > 0)
+      {
+         return new StatefulPortletContext(id, state);
+      }
+      else
+      {
+         return new PortletContext(id);
+      }
+   }
+
+   /**
+    * Create a PortletContext based on given id and required state: this method will fail if state is not valid. Use
+    * this method instead of {@link #createPortletContext(String,byte[])} for cases when a state is expected and the
+    * creation of the PortletContext should fail if no state was given.
+    *
+    * @param id    the portlet id
+    * @param state the mandatory state
+    * @return a new PortletContext
+    */
+   public static PortletContext createStatefulPortletContext(String id, byte[] state)
+   {
+      return new StatefulPortletContext(id, state);
+   }
+
+   public static PortletContext createPortletContext(String portletId)
+   {
+      return createPortletContext(portletId, null);
+   }
 }


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/PortletContext.java
___________________________________________________________________
Name: svn:keywords
   + LastChangedDate LastChangedBy LastChangedRevision Id

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/StatefulPortletContext.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/StatefulPortletContext.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/StatefulPortletContext.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -22,9 +22,13 @@
  ******************************************************************************/
 package org.jboss.portal.portlet;
 
+import org.jboss.portal.common.util.ParameterValidation;
+
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
  * @version $Revision: 1.1 $
+ * @since 2.6
  */
 public class StatefulPortletContext extends PortletContext
 {
@@ -32,25 +36,16 @@
    /** . */
    private final byte[] marshalledState;
 
-   public StatefulPortletContext(String id) throws IllegalArgumentException
+   StatefulPortletContext(String id, byte[] marshalledState) throws IllegalArgumentException
    {
-      this(id, null);
-   }
-
-   public StatefulPortletContext(String id, byte[] marshalledState) throws IllegalArgumentException
-   {
       super(id);
 
-      //
-      if (marshalledState == null)
-      {
-         throw new IllegalArgumentException("State cannot be null");
-      }
+      ParameterValidation.throwIllegalArgExceptionIfNull(marshalledState, "Portlet state");
 
       this.marshalledState = marshalledState;
    }
 
-   public byte[] getMarshalledState()
+   public byte[] getState()
    {
       return marshalledState;
    }

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/container/PortletContainerInvoker.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/container/PortletContainerInvoker.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/container/PortletContainerInvoker.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -32,19 +32,19 @@
 import org.jboss.portal.portlet.PortletContext;
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.container.info.ContainerPortletInfo;
 import org.jboss.portal.portlet.info.PortletInfo;
-import org.jboss.portal.portlet.container.info.ContainerPortletInfo;
 import org.jboss.portal.portlet.invocation.PortletInvocation;
 import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
 import org.jboss.portal.portlet.state.PropertyChange;
 import org.jboss.portal.portlet.state.PropertyMap;
 
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.HashSet;
 
 /**
  * An implementation of portlet invoker that makes a call to a portlet container.
@@ -127,10 +127,10 @@
    protected synchronized void startService() throws Exception
    {
       Map portlets = new HashMap();
-      for (Iterator i = registry.getPortletApplications().iterator();i.hasNext();)
+      for (Iterator i = registry.getPortletApplications().iterator(); i.hasNext();)
       {
          PortletApplication portletApplication = (PortletApplication)i.next();
-         for (Iterator j = portletApplication.getPortletContainers().iterator();j.hasNext();)
+         for (Iterator j = portletApplication.getPortletContainers().iterator(); j.hasNext();)
          {
             PortletContainer portletContainer = (PortletContainer)j.next();
             PortletImpl portlet = new PortletImpl(portletContainer);
@@ -185,11 +185,11 @@
       {
          if (e instanceof PortletInvokerException)
          {
-            throw(PortletInvokerException)e;
+            throw (PortletInvokerException)e;
          }
          else if (e instanceof RuntimeException)
          {
-            throw(RuntimeException)e;
+            throw (RuntimeException)e;
          }
          else
          {
@@ -239,7 +239,7 @@
       public PortletImpl(PortletContainer container)
       {
          this.container = container;
-         this.context = new PortletContext(container.getApplication().getId() + "." + container.getId());
+         this.context = PortletContext.createPortletContext(container.getApplication().getId() + "." + container.getId());
       }
 
       public PortletContext getContext()

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/AbstractPropertyContext.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/AbstractPropertyMap.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/AccessMode.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/DestroyCloneFailure.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/InvalidStateIdException.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/NoSuchStateException.java
===================================================================


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/PortletClonedEvent.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/PortletModifiedEvent.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/Property.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyChange.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyContext.java
===================================================================


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/PropertyMap.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/SimplePropertyMap.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/StateConversionException.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/StateConverter.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/StateManagementPolicy.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPersistenceManager.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPortletInvoker.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPortletInvoker.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPortletInvoker.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -31,7 +31,6 @@
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
 import org.jboss.portal.portlet.StateEvent;
-import org.jboss.portal.portlet.StatefulPortletContext;
 import org.jboss.portal.portlet.invocation.PortletInvocation;
 import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
 import org.jboss.portal.portlet.spi.InstanceContext;
@@ -49,7 +48,7 @@
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
+ * @version $Revision$
  */
 public class ConsumerPortletInvoker implements PortletInvoker
 {
@@ -73,7 +72,7 @@
       {
          throw new InvalidPortletIdException(wrappedCCP);
       }
-      return new PortletContext(wrappedCCP.substring(CLONE_ID_PREFIX.length()));
+      return PortletContext.createPortletContext(wrappedCCP.substring(CLONE_ID_PREFIX.length()));
    }
 
    public PortletContext unwrapPOP(String wrappedPOPId) throws InvalidPortletIdException
@@ -82,7 +81,7 @@
       {
          throw new IllegalArgumentException();
       }
-      return new PortletContext(wrappedPOPId);
+      return PortletContext.createPortletContext(wrappedPOPId);
    }
 
    public String wrapCCP(PortletContext ccpCtx) throws InvalidPortletIdException
@@ -163,43 +162,48 @@
          PortletInvocationResponse response = producer.invoke(invocation);
 
          //
-         if (pictx.clonedContext != null)
+         PortletContext clonedContext = pictx.clonedContext;
+         if (clonedContext != null)
          {
-            if (pictx.clonedContext instanceof StatefulPortletContext)
+            byte[] state = clonedContext.getState();
+            if (state != null)
             {
                // Save the clone state
-               StatefulPortletContext statefulClonedContext = (StatefulPortletContext)pictx.clonedContext;
-               ConsumerState state = new ConsumerState(statefulClonedContext.getId(), statefulClonedContext.getMarshalledState());
-               String stateId = persistenceManager.createState(state);
+               ConsumerState consumerState = new ConsumerState(clonedContext.getId(), state);
+               String stateId = persistenceManager.createState(consumerState);
                String clonedId = CLONE_ID_PREFIX + stateId;
-               PortletClonedEvent event = new PortletClonedEvent(new PortletContext(clonedId));
+               PortletClonedEvent event = new PortletClonedEvent(PortletContext.createPortletContext(clonedId));
                cictx.onStateEvent(event);
             }
             else
             {
-               PortletClonedEvent event = new PortletClonedEvent(new PortletContext(pictx.clonedContext.getId()));
+               PortletClonedEvent event = new PortletClonedEvent(PortletContext.createPortletContext(clonedContext.getId()));
                cictx.onStateEvent(event);
             }
          }
-         else if (pictx.modifiedContext != null)
+         else
          {
-            // Save
-            if (pictx.modifiedContext instanceof StatefulPortletContext)
+            PortletContext modifiedContext = pictx.modifiedContext;
+            if (modifiedContext != null)
             {
-               try
+               byte[] state = modifiedContext.getState();
+               // update state if needed
+               if (state != null)
                {
-                  StatefulPortletContext statefulModifiedContext = (StatefulPortletContext)pictx.modifiedContext;
-                  ConsumerState state = new ConsumerState(statefulModifiedContext.getId(), statefulModifiedContext.getMarshalledState());
-                  persistenceManager.updateState(consumerContext.stateId, state);
+                  try
+                  {
+                     ConsumerState consumerState = new ConsumerState(modifiedContext.getId(), state);
+                     persistenceManager.updateState(consumerContext.stateId, consumerState);
+                  }
+                  catch (NoSuchStateException e)
+                  {
+                     e.printStackTrace();
+                  }
+                  catch (InvalidStateIdException e)
+                  {
+                     e.printStackTrace();
+                  }
                }
-               catch (NoSuchStateException e)
-               {
-                  e.printStackTrace();
-               }
-               catch (InvalidStateIdException e)
-               {
-                  e.printStackTrace();
-               }
             }
          }
 
@@ -220,13 +224,12 @@
       //
       PortletContext clonedContext = producer.createClone(consumerContext.portletContext);
 
-      //
-      if (clonedContext instanceof StatefulPortletContext)
+      byte[] state = clonedContext.getState();
+      if (state != null)
       {
-         StatefulPortletContext statefulClonedContext = (StatefulPortletContext)clonedContext;
-         ConsumerState state = new ConsumerState(statefulClonedContext.getId(), statefulClonedContext.getMarshalledState());
-         String id = persistenceManager.createState(state);
-         return new PortletContext(CLONE_ID_PREFIX + id);
+         ConsumerState consumerState = new ConsumerState(clonedContext.getId(), state);
+         String id = persistenceManager.createState(consumerState);
+         return PortletContext.createPortletContext(CLONE_ID_PREFIX + id);
       }
       else
       {
@@ -295,8 +298,8 @@
       //
       PortletContext updatedPortletContext = producer.setProperties(consumerContext.portletContext, changes);
 
-      //
-      if (updatedPortletContext instanceof StatefulPortletContext)
+      byte[] state = updatedPortletContext.getState();
+      if (state != null)
       {
          if (consumerContext.stateId == null)
          {
@@ -304,11 +307,10 @@
          }
 
          //
-         StatefulPortletContext updatedStatefulPortletContext = (StatefulPortletContext)updatedPortletContext;
-         ConsumerState state = new ConsumerState(updatedStatefulPortletContext.getId(), updatedStatefulPortletContext.getMarshalledState());
+         ConsumerState consumerState = new ConsumerState(updatedPortletContext.getId(), state);
          try
          {
-            persistenceManager.updateState(consumerContext.stateId, state);
+            persistenceManager.updateState(consumerContext.stateId, consumerState);
          }
          catch (NoSuchStateException e)
          {
@@ -423,7 +425,7 @@
 
       public ConsumerContext(String stateId, String id, byte[] state)
       {
-         this(new StatefulPortletContext(id, state), stateId);
+         this(PortletContext.createStatefulPortletContext(id, state), stateId);
       }
    }
 }


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerPortletInvoker.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerState.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/consumer/ConsumerStateContext.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/PortletStateChangeRequiredException.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/PortletStateChangeRequiredException.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/PortletStateChangeRequiredException.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -0,0 +1,39 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat                                               *
+ * Copyright 2006, 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.state.producer;
+
+import org.jboss.portal.common.invocation.InvocationException;
+
+/**
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ * @since 2.6
+ */
+public class PortletStateChangeRequiredException extends InvocationException
+{
+   public PortletStateChangeRequiredException(String message)
+   {
+      super(message);
+   }
+}


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/PortletStateChangeRequiredException.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPersistenceManager.java
===================================================================

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerPortletInvoker.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -137,13 +137,13 @@
       String portletId = portletContext.getId();
       if (CONSUMER_CLONE_ID.equals(portletId))
       {
-         if (portletContext instanceof StatefulPortletContext)
+         byte[] state = portletContext.getState();
+         if (state != null)
          {
             try
             {
-               StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
-               ProducerState state = stateConverter.unmarshall(statefulPortletContext.getMarshalledState());
-               return portletInvoker.getPortlet(new PortletContext(state.getPortletId()));
+               ProducerState producerState = stateConverter.unmarshall(state);
+               return portletInvoker.getPortlet(PortletContext.createPortletContext(producerState.getPortletId()));
             }
             catch (StateConversionException e)
             {
@@ -160,7 +160,7 @@
          try
          {
             ProducerState state = persistenceManager.loadState(portletId.substring(PRODUCER_CLONE_ID_PREFIX.length()));
-            return portletInvoker.getPortlet(new PortletContext(state.getPortletId()));
+            return portletInvoker.getPortlet(PortletContext.createPortletContext(state.getPortletId()));
          }
          catch (NoSuchStateException e)
          {
@@ -213,7 +213,7 @@
       }
 
       // Get the portlet container and set it on invocation
-      Portlet portlet = portletInvoker.getPortlet(new PortletContext(targetPortletId));
+      Portlet portlet = portletInvoker.getPortlet(PortletContext.createPortletContext(targetPortletId));
       if (portlet == null)
       {
          throw new NoSuchPortletException("Portlet " + targetPortletId + " not found", targetPortletId);
@@ -230,7 +230,7 @@
       PortletInvocationResponse response;
       try
       {
-         invocation.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, new PortletContext(targetPortletId));
+         invocation.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE, PortletContext.createPortletContext(targetPortletId));
          invocation.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PREFERENCES_ATTRIBUTE, prefs);
          invocation.setInfo(info);
 
@@ -270,7 +270,7 @@
 
                      // Return the clone context
                      String cloneId = PRODUCER_CLONE_ID_PREFIX + cloneStateId;
-                     PortletContext clonedCtx = new PortletContext(cloneId);
+                     PortletContext clonedCtx = PortletContext.createPortletContext(cloneId);
                      PortletClonedEvent event = new PortletClonedEvent(clonedCtx);
                      instanceCtx.onStateEvent(event);
                   }
@@ -285,7 +285,7 @@
                }
                else
                {
-                  StatefulPortletContext clonedCtx = marshall(state.getPortletId(), newPrefs);
+                  PortletContext clonedCtx = marshall(state.getPortletId(), newPrefs);
                   PortletClonedEvent event = new PortletClonedEvent(clonedCtx);
                   instanceCtx.onStateEvent(event);
                }
@@ -311,7 +311,7 @@
 
                // Return the clone context
                String cloneId = PRODUCER_CLONE_ID_PREFIX + cloneStateId;
-               PortletContext clonedCtx = new PortletContext(cloneId);
+               PortletContext clonedCtx = PortletContext.createPortletContext(cloneId);
                PortletClonedEvent event = new PortletClonedEvent(clonedCtx);
                instanceCtx.onStateEvent(event);
             }
@@ -337,14 +337,15 @@
             }
             else
             {
-               StatefulPortletContext modifiedCtx = marshall(targetPortletId, newPrefs);
+               PortletContext modifiedCtx = marshall(targetPortletId, newPrefs);
                PortletModifiedEvent event = new PortletModifiedEvent(modifiedCtx);
                instanceCtx.onStateEvent(event);
             }
          }
          else if (access == AccessMode.READ_ONLY)
          {
-            throw new InvocationException("Read only portlet should have not been modified");
+            throw new PortletStateChangeRequiredException("Modification was requested for portlet with id '"
+               + targetPortletId + "' but access mode was READ ONLY.");
          }
       }
 
@@ -373,7 +374,7 @@
             {
                String stateId = portletId.substring(PRODUCER_CLONE_ID_PREFIX.length());
                String cloneId = PRODUCER_CLONE_ID_PREFIX + persistenceManager.cloneState(stateId);
-               return new PortletContext(cloneId);
+               return PortletContext.createPortletContext(cloneId);
             }
             catch (NoSuchStateException e)
             {
@@ -402,7 +403,7 @@
          if (useStore)
          {
             String cloneId = persistenceManager.createState(portletId, newState);
-            return new PortletContext(PRODUCER_CLONE_ID_PREFIX + cloneId);
+            return PortletContext.createPortletContext(PRODUCER_CLONE_ID_PREFIX + cloneId);
          }
          else
          {
@@ -491,7 +492,7 @@
          String referencedPortletId = state.getPortletId();
 
          // Get the container
-         Portlet referencedPortlet = portletInvoker.getPortlet(new PortletContext(referencedPortletId));
+         Portlet referencedPortlet = portletInvoker.getPortlet(PortletContext.createPortletContext(referencedPortletId));
 
          // We need the referenced portlet
          if (referencedPortlet == null)
@@ -558,7 +559,7 @@
       String referencedPortletId = state.getPortletId();
 
       // Get the container
-      Portlet referencedPortlet = portletInvoker.getPortlet(new PortletContext(referencedPortletId));
+      Portlet referencedPortlet = portletInvoker.getPortlet(PortletContext.createPortletContext(referencedPortletId));
 
       // We need the referenced portlet
       if (referencedPortlet == null)
@@ -619,7 +620,7 @@
          {
             throw new InvalidPortletIdException(e, portletId);
          }
-         return new PortletContext(portletId);
+         return PortletContext.createPortletContext(portletId);
       }
       else
       {
@@ -627,13 +628,13 @@
       }
    }
 
-   private StatefulPortletContext marshall(String portletId, PropertyMap props) throws PortletInvokerException
+   private PortletContext marshall(String portletId, PropertyMap props) throws PortletInvokerException
    {
       try
       {
          ProducerState sstate = new ProducerState(portletId, props);
          byte[] marshalledState = stateConverter.marshall(sstate);
-         return new StatefulPortletContext(CONSUMER_CLONE_ID, marshalledState);
+         return PortletContext.createStatefulPortletContext(CONSUMER_CLONE_ID, marshalledState);
       }
       catch (StateConversionException e)
       {
@@ -651,7 +652,7 @@
    private PropertyMap getPropertiesFromMetaData(String portletId) throws PortletInvokerException
    {
       //
-      Portlet portlet = portletInvoker.getPortlet(new PortletContext(portletId));
+      Portlet portlet = portletInvoker.getPortlet(PortletContext.createPortletContext(portletId));
 
       // The prefs info
       PreferencesInfo prefs = portlet.getInfo().getPreferences();
@@ -680,7 +681,8 @@
     */
    private ProducerState getProducerState(PortletContext portletContext) throws NoSuchPortletException, InvalidPortletIdException
    {
-      if (!(portletContext instanceof StatefulPortletContext))
+      byte[] state = portletContext.getState();
+      if (state == null)
       {
          String portletId = portletContext.getId();
          if (portletContext.getId().startsWith(PRODUCER_CLONE_ID_PREFIX))
@@ -708,10 +710,7 @@
       {
          try
          {
-            StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
-            byte[] marshalledState = statefulPortletContext.getMarshalledState();
-            ProducerState state = stateConverter.unmarshall(marshalledState);
-            return state;
+            return stateConverter.unmarshall(state);
          }
          catch (StateConversionException e)
          {

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerState.java
===================================================================


Property changes on: trunk/portlet/src/main/org/jboss/portal/portlet/state/producer/ProducerStateContext.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/tck/TCKPortletController.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/tck/TCKPortletController.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/tck/TCKPortletController.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -64,7 +64,7 @@
       for (Iterator i = portletIds.iterator(); i.hasNext();)
       {
          String portletId = (String)i.next();
-         Portlet portlet = portletInvoker.getPortlet(new PortletContext(portletId));
+         Portlet portlet = portletInvoker.getPortlet(PortletContext.createPortletContext(portletId));
          portlets.add(portlet);
 
       }

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/test/PortletController.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/test/PortletController.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/test/PortletController.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -36,11 +36,11 @@
 import org.jboss.portal.portlet.PortletContext;
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
-import org.jboss.portal.portlet.impl.PortletRequestDecoder;
 import org.jboss.portal.portlet.PortletURL;
 import org.jboss.portal.portlet.RenderURL;
 import org.jboss.portal.portlet.StateEvent;
 import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
 import org.jboss.portal.portlet.impl.spi.AbstractPortletInvocationContext;
 import org.jboss.portal.portlet.impl.spi.AbstractRequestContext;
 import org.jboss.portal.portlet.impl.spi.AbstractSecurityContext;
@@ -134,7 +134,7 @@
          {
             // Get the portlet
             String portletId = requestPath.substring("/portlet/".length());
-            Portlet portlet = portletInvoker.getPortlet(new PortletContext(portletId));
+            Portlet portlet = portletInvoker.getPortlet(PortletContext.createPortletContext(portletId));
 
             PortletRequestDecoder decoder = new PortletRequestDecoder();
             decoder.decode(invocation.getServerContext().getQueryParameterMap(), invocation.getServerContext().getBodyParameterMap());

Modified: trunk/portlet/src/main/org/jboss/portal/portlet/test/support/PortletInvokerSupport.java
===================================================================
--- trunk/portlet/src/main/org/jboss/portal/portlet/test/support/PortletInvokerSupport.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/portlet/src/main/org/jboss/portal/portlet/test/support/PortletInvokerSupport.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -161,7 +161,7 @@
          {
             throw new IllegalArgumentException();
          }
-         this.portletContext = new PortletContext(portletId);
+         this.portletContext = PortletContext.createPortletContext(portletId);
          this.support = support;
          this.valid = true;
       }

Modified: trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/MarkupTestCase.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/MarkupTestCase.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/MarkupTestCase.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -169,7 +169,7 @@
 
       RenderInvocation render = new RenderInvocation(rc);
       render.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE,
-         new PortletContext(portletHandle));
+         PortletContext.createPortletContext(portletHandle));
 
       render.setInstanceContext(new BasicInstanceContext(portletHandle));
       render.setSecurityContext(new BasicSecurityContext());
@@ -192,7 +192,7 @@
       action.setSecurityContext(new BasicSecurityContext());
       action.setUserContext(new BasicUserContext());
       action.setAttribute(PortletInvocation.REQUEST_SCOPE, PortletInvocation.PORTLET_CONTEXT_ATTRIBUTE,
-         new PortletContext(portletHandle));
+         PortletContext.createPortletContext(portletHandle));
       return action;
    }
 }

Modified: trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/ServiceDescriptionTestCase.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/ServiceDescriptionTestCase.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/test/wsrp/v1/consumer/ServiceDescriptionTestCase.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -62,10 +62,10 @@
    public void testGetPortlet() throws Exception
    {
       //obtain one portlet
-      Portlet portlet = consumer.getPortlet(new PortletContext(BasicMarkupBehavior.PORTLET_HANDLE));
+      Portlet portlet = consumer.getPortlet(PortletContext.createPortletContext(BasicMarkupBehavior.PORTLET_HANDLE));
       checkPortlet(portlet, "", BasicMarkupBehavior.PORTLET_HANDLE);
 
-      portlet = consumer.getPortlet(new PortletContext(SessionMarkupBehavior.PORTLET_HANDLE));
+      portlet = consumer.getPortlet(PortletContext.createPortletContext(SessionMarkupBehavior.PORTLET_HANDLE));
       checkPortlet(portlet, "2", SessionMarkupBehavior.PORTLET_HANDLE);
    }
 }

Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/WSRPUtils.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/WSRPUtils.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/WSRPUtils.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -31,7 +31,6 @@
 import org.jboss.portal.portlet.PortletContext;
 import org.jboss.portal.portlet.PortletURL;
 import org.jboss.portal.portlet.RenderURL;
-import org.jboss.portal.portlet.StatefulPortletContext;
 import org.jboss.portal.portlet.state.AccessMode;
 import org.jboss.portal.wsrp.core.Fault;
 import org.jboss.portal.wsrp.core.MissingParametersFault;
@@ -231,14 +230,7 @@
 
       PortletContext context;
       byte[] state = portletContext.getPortletState();
-      if (state != null && state.length > 0)
-      {
-         context = new StatefulPortletContext(handle, state);
-      }
-      else
-      {
-         context = new PortletContext(handle);
-      }
+      context = PortletContext.createPortletContext(handle, state);
 
       return context;
    }

Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/WSRPPortlet.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/WSRPPortlet.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/WSRPPortlet.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -59,7 +59,7 @@
 
    public PortletContext getContext()
    {
-      return new PortletContext(id);
+      return PortletContext.createPortletContext(id);
    }
 
    public PortletInfo getInfo()

Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/MarkupHandler.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/MarkupHandler.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/MarkupHandler.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -26,11 +26,13 @@
 import org.jboss.logging.Logger;
 import org.jboss.portal.common.MediaType;
 import org.jboss.portal.common.util.LocaleInfo;
+import org.jboss.portal.common.util.ParameterValidation;
 import org.jboss.portal.portlet.OpaqueStateString;
 import org.jboss.portal.portlet.Parameters;
 import org.jboss.portal.portlet.Portlet;
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.StateEvent;
 import org.jboss.portal.portlet.StateString;
 import org.jboss.portal.portlet.info.CacheInfo;
 import org.jboss.portal.portlet.invocation.ActionInvocation;
@@ -47,7 +49,7 @@
 import org.jboss.portal.portlet.spi.UserContext;
 import org.jboss.portal.portlet.spi.WindowContext;
 import org.jboss.portal.portlet.state.AccessMode;
-import org.jboss.portal.portlet.support.spi.InstanceContextSupport;
+import org.jboss.portal.portlet.state.producer.PortletStateChangeRequiredException;
 import org.jboss.portal.server.util.HTTPStreamInfo;
 import org.jboss.portal.wsrp.UserContextConverter;
 import org.jboss.portal.wsrp.WSRPConstants;
@@ -283,7 +285,7 @@
       final Portlet portlet;
       try
       {
-         portlet = invoker.getPortlet(new org.jboss.portal.portlet.PortletContext(portletHandle));
+         portlet = invoker.getPortlet(org.jboss.portal.portlet.PortletContext.createPortletContext(portletHandle));
       }
       catch (PortletInvokerException e)
       {
@@ -315,7 +317,7 @@
 
       StateChange stateChange = interactionParams.getPortletStateChange();
       WSRPUtils.throwMissingParametersFaultIfValueIsMissing(stateChange, "portletStateChange", "InteractionParams");
-      InstanceContext instanceContext = createInstanceContext(portletHandle, WSRPUtils.getAccessModeFromStateChange(stateChange));
+      WSRPInstanceContext instanceContext = createInstanceContext(portletHandle, WSRPUtils.getAccessModeFromStateChange(stateChange));
 
 
       Parameters parameters;
@@ -370,6 +372,10 @@
          response = producer.getInvoker().invoke(invocation);
          log.debug("ActionInvocation done");
       }
+      catch (PortletStateChangeRequiredException e)
+      {
+         throw (PortletStateChangeRequiredFault)WSRPUtils.createFaultFrom(PortletStateChangeRequiredFault.class, e);
+      }
       catch (PortletInvokerException e)
       {
          log.fatal(e);
@@ -386,6 +392,8 @@
          updateResponse.setNewWindowState(WSRPUtils.convertJSR168WindowStateNameToWSRPName(getNewStateOrNull(renderResult, false)));
          StateString ns = renderResult.getNavigationalState();
          updateResponse.setNavigationalState(ns != null ? ns.getStringValue() : null);
+         PortletContext updatedPortletContext = WSRPTypeFactory.createPortletContext(instanceContext.getId());
+         updateResponse.setPortletContext(updatedPortletContext);
 
          return WSRPTypeFactory.createBlockingInteractionResponse(updateResponse);
       }
@@ -412,12 +420,12 @@
          Throwable throwable = errorResult.getThrowable();
          if (throwable instanceof PortletModeException)
          {
-            throw(UnsupportedModeFault)WSRPUtils.createFaultFrom(UnsupportedModeFault.class,
+            throw (UnsupportedModeFault)WSRPUtils.createFaultFrom(UnsupportedModeFault.class,
                new IllegalArgumentException("Unsupported mode: " + ((PortletModeException)throwable).getMode()));
          }
          if (throwable instanceof WindowStateException)
          {
-            throw(UnsupportedWindowStateFault)WSRPUtils.createFaultFrom(UnsupportedWindowStateFault.class,
+            throw (UnsupportedWindowStateFault)WSRPUtils.createFaultFrom(UnsupportedWindowStateFault.class,
                new IllegalArgumentException("Unsupported window state: " + ((WindowStateException)throwable).getState()));
          }
          // todo: deal with other exceptions
@@ -523,20 +531,9 @@
       }
    }
 
-   private InstanceContext createInstanceContext(final String portletHandle, final AccessMode accessMode)
+   private WSRPInstanceContext createInstanceContext(final String portletHandle, final AccessMode accessMode)
    {
-      return new InstanceContextSupport()
-      {
-         public String getId()
-         {
-            return portletHandle;
-         }
-
-         public AccessMode getAccessMode()
-         {
-            return accessMode;
-         }
-      };
+      return new WSRPInstanceContext(portletHandle, accessMode);
    }
 
    private WindowContext createWindowContext(final String portletHandle, final RuntimeContext runtimeContext)
@@ -620,7 +617,7 @@
       }
       catch (MimeTypeParseException e)
       {
-         throw(UnsupportedMimeTypeFault)WSRPUtils.createFaultFrom(UnsupportedMimeTypeFault.class, e);
+         throw (UnsupportedMimeTypeFault)WSRPUtils.createFaultFrom(UnsupportedMimeTypeFault.class, e);
       }
       return streamInfo;
    }
@@ -704,7 +701,7 @@
       // no MIME type was found: error!
       if (markupType == null)
       {
-         throw(UnsupportedMimeTypeFault)WSRPUtils.createFaultFrom(UnsupportedMimeTypeFault.class,
+         throw (UnsupportedMimeTypeFault)WSRPUtils.createFaultFrom(UnsupportedMimeTypeFault.class,
             new IllegalArgumentException("None of the specified MIME types are supported by this Portlet."));
       }
 
@@ -716,7 +713,7 @@
       }
       catch (IllegalArgumentException e)
       {
-         throw(UnsupportedModeFault)WSRPUtils.createFaultFrom(UnsupportedModeFault.class, e);
+         throw (UnsupportedModeFault)WSRPUtils.createFaultFrom(UnsupportedModeFault.class, e);
       }
 
       // get the window state
@@ -727,7 +724,7 @@
       }
       catch (IllegalArgumentException e)
       {
-         throw(UnsupportedWindowStateFault)WSRPUtils.createFaultFrom(UnsupportedWindowStateFault.class, e);
+         throw (UnsupportedWindowStateFault)WSRPUtils.createFaultFrom(UnsupportedWindowStateFault.class, e);
       }
 
       // get the character set
@@ -901,4 +898,34 @@
          return result;
       }
    }
+
+   class WSRPInstanceContext implements InstanceContext
+   {
+      private String id;
+      private final AccessMode accessMode;
+      private boolean wasModified = false;
+
+      public WSRPInstanceContext(String portletHandle, AccessMode accessMode)
+      {
+         ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(portletHandle, "portlet handle", "InstanceContext");
+         ParameterValidation.throwIllegalArgExceptionIfNull(accessMode, "AccessMode");
+
+         this.id = portletHandle;
+         this.accessMode = accessMode;
+      }
+
+      public String getId()
+      {
+         return id;
+      }
+
+      public AccessMode getAccessMode()
+      {
+         return accessMode;
+      }
+
+      public void onStateEvent(StateEvent event)
+      {
+      }
+   }
 }

Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java	2006-12-09 17:58:29 UTC (rev 5775)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java	2006-12-09 19:12:54 UTC (rev 5776)
@@ -403,7 +403,7 @@
       Portlet portlet;
       try
       {
-         portlet = invoker.getPortlet(new org.jboss.portal.portlet.PortletContext(handle));
+         portlet = invoker.getPortlet(org.jboss.portal.portlet.PortletContext.createPortletContext(handle));
       }
       catch (NoSuchPortletException e)
       {




More information about the portal-commits mailing list