[gatein-commits] gatein SVN: r1825 - portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Feb 23 13:00:05 EST 2010


Author: chris.laprun at jboss.com
Date: 2010-02-23 13:00:04 -0500 (Tue, 23 Feb 2010)
New Revision: 1825

Modified:
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
   portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
Log:
- GTNPORTAL-737: forgot to properly persist the fact that we had a cloned context.
- Fixed an issue where we could get a ClassCastException when updating WSRP state (actually, this is still not quite clear why this happens).
- Added note after investigating consumer-side management of clones to revisit current design as it's not adapted to support that use case.


Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java	2010-02-23 16:55:05 UTC (rev 1824)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java	2010-02-23 18:00:04 UTC (rev 1825)
@@ -24,7 +24,6 @@
 import org.exoplatform.portal.config.DataStorage;
 import org.exoplatform.portal.config.model.ApplicationState;
 import org.exoplatform.portal.config.model.ApplicationType;
-import org.exoplatform.portal.config.model.PersistentApplicationState;
 import org.exoplatform.portal.config.model.TransientApplicationState;
 import org.exoplatform.portal.pc.ExoPortletState;
 import org.exoplatform.portal.pc.ExoPortletStateType;
@@ -200,6 +199,13 @@
       }
    };
 
+   /**
+    * todo: this ModelAdapter is not quite good, what is really needed is a ModelAdapter<WSRP, byte[]> so that the
+    * StatefulPortletContext returned by getPortletContext is actually of type PortletStateType.OPAQUE so that it
+    * can be properly handled in WSRP...
+    * This model needs to be revisited if we want to properly support consumer-side state management.
+    * See GTNPORTAL-736.
+    */
    private static final ModelAdapter<WSRP, WSRP> WSRP = new ModelAdapter<WSRP, WSRP>()
    {
       @Override
@@ -222,8 +228,10 @@
          WSRP wsrp = dataStorage.load(state, ApplicationType.WSRP_PORTLET);
          if (wsrp == null)
          {
+            // create and save state
             wsrp = new WSRP();
             wsrp.setPortletId(applicationId);
+            dataStorage.save(state, wsrp);
          }
          return StatefulPortletContext.create(wsrp.getPortletId(), WSRPPortletStateType.instance, wsrp);
       }
@@ -240,9 +248,10 @@
          }
          else
          {
-            PersistentApplicationState<WSRP> persistentState = (PersistentApplicationState<WSRP>)state;
+            //todo: it is possible to get a CloneApplicationState for some reason, need to investigate
+
             DataStorage dataStorage = (DataStorage)container.getComponentInstanceOfType(DataStorage.class);
-            return dataStorage.save(persistentState, updateState);
+            return dataStorage.save(state, updateState);
          }
       }
    };

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java	2010-02-23 16:55:05 UTC (rev 1824)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java	2010-02-23 18:00:04 UTC (rev 1825)
@@ -742,6 +742,8 @@
       {
          WSRP wsrp = (WSRP)preferencesPortletContext.getState();
          AccessMode accessMode = AccessMode.CLONE_BEFORE_WRITE;
+
+         // if the portlet is a cloned one already, we can modify it directly instead of requesting a clone
          if (wsrp.isCloned())
          {
             accessMode = AccessMode.READ_WRITE;

Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-02-23 16:55:05 UTC (rev 1824)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-02-23 18:00:04 UTC (rev 1825)
@@ -114,6 +114,7 @@
             {
                WSRP wsrp = new WSRP();
                wsrp.setPortletId(clonedContext.getId());
+               wsrp.setCloned(true); // mark the state as cloned
 
                // if we have an associated state, record it as well...
                if (clonedContext instanceof StatefulPortletContext)



More information about the gatein-commits mailing list