[gatein-commits] gatein SVN: r5299 - epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Nov 26 09:43:45 EST 2010


Author: thomas.heute at jboss.com
Date: 2010-11-26 09:43:44 -0500 (Fri, 26 Nov 2010)
New Revision: 5299

Modified:
   epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java
   epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
   epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
Log:
JBEPP-674: Properly support consumer-side WSRP state management


Modified: epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java
===================================================================
--- epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java	2010-11-26 14:38:50 UTC (rev 5298)
+++ epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ModelAdapter.java	2010-11-26 14:43:44 UTC (rev 5299)
@@ -152,6 +152,36 @@
             return pref;
          }
       }
+
+      @Override
+      public ExoPortletState getStateFromModifiedContext(PortletContext originalPortletContext,
+            PortletContext modifiedPortletContext)
+      {
+         if (modifiedPortletContext != null && modifiedPortletContext instanceof StatefulPortletContext)
+         {
+            StatefulPortletContext statefulContext = (StatefulPortletContext) modifiedPortletContext;
+            if (statefulContext.getState() instanceof ExoPortletState)
+            {
+               return (ExoPortletState)statefulContext.getState();
+            }
+         }
+         return null;
+      }
+
+      @Override
+      public ExoPortletState getstateFromClonedContext(PortletContext originalPortletContext,
+            PortletContext clonedPortletContext)
+      {
+         if (clonedPortletContext != null && clonedPortletContext instanceof StatefulPortletContext)
+         {
+            StatefulPortletContext statefulContext = (StatefulPortletContext) clonedPortletContext;
+            if (statefulContext.getState() instanceof ExoPortletState)
+            {
+               return (ExoPortletState)statefulContext.getState();
+            }
+         }
+         return null;
+      }
    };
 
    private static final ModelAdapter<Gadget, ExoPortletState> GADGET = new ModelAdapter<Gadget, ExoPortletState>()
@@ -195,6 +225,36 @@
          // For now we return null as it does not make sense to edit the gadget preferences
          return null;
       }
+
+      @Override
+      public ExoPortletState getStateFromModifiedContext(PortletContext originalPortletContext,
+            PortletContext modifiedPortletContext)
+      {
+         if (modifiedPortletContext != null && modifiedPortletContext instanceof StatefulPortletContext)
+         {
+            StatefulPortletContext statefulContext = (StatefulPortletContext) modifiedPortletContext;
+            if (statefulContext.getState() instanceof ExoPortletState)
+            {
+               return (ExoPortletState)statefulContext.getState();
+            }
+         }
+         return null;
+      }
+
+      @Override
+      public ExoPortletState getstateFromClonedContext(PortletContext originalPortletContext,
+            PortletContext clonedPortletContext)
+      {
+         if (clonedPortletContext != null && clonedPortletContext instanceof StatefulPortletContext)
+         {
+            StatefulPortletContext statefulContext = (StatefulPortletContext) clonedPortletContext;
+            if (statefulContext.getState() instanceof ExoPortletState)
+            {
+               return (ExoPortletState)statefulContext.getState();
+            }
+         }
+         return null;
+      }
    };
 
    /**
@@ -256,6 +316,52 @@
             return dataStorage.save(state, updateState);
          }
       }
+
+      @Override
+      public WSRP getStateFromModifiedContext(PortletContext originalPortletContext,
+            PortletContext modifiedPortletContext)
+      {
+         WSRP wsrp = new WSRP();
+         wsrp.setPortletId(modifiedPortletContext.getId());
+         
+         // from the originalPortletContext see if we are dealing with a cloned context or not.
+         if (originalPortletContext instanceof StatefulPortletContext)
+         {
+            Object originalState = ((StatefulPortletContext)originalPortletContext).getState();
+            if (originalState instanceof WSRP)
+            {
+               wsrp.setCloned(((WSRP)originalState).isCloned());
+            }
+         }
+               
+         if (modifiedPortletContext instanceof StatefulPortletContext)
+         {
+            Object modifiedState = ((StatefulPortletContext)modifiedPortletContext).getState();
+            if (modifiedState instanceof byte[])
+            {
+               wsrp.setState((byte[])modifiedState);
+            }
+         }
+         
+         return wsrp;
+      }
+
+      @Override
+      public WSRP getstateFromClonedContext(PortletContext originalPortletContext, PortletContext clonedPortletContext)
+      {
+         WSRP wsrp = new WSRP();
+         wsrp.setPortletId(clonedPortletContext.getId());
+         wsrp.setCloned(true);
+         
+         // if we have an associated state, record it as well...
+         if (clonedPortletContext instanceof StatefulPortletContext)
+         {
+            StatefulPortletContext statefulPortletContext = (StatefulPortletContext)clonedPortletContext;
+            wsrp.setState((byte[])statefulPortletContext.getState());
+         }
+         
+         return wsrp;
+      }
    };
 
    public abstract PortletContext getProducerOfferedPortletContext(String applicationId);
@@ -275,5 +381,23 @@
     * @throws Exception any exception
     */
    public abstract Portlet getState(ExoContainer container, ApplicationState<S> applicationState) throws Exception;
+   
+   /**
+    * Extracts the state based on what the current PortletContext is and the new modified PortletContext.
+    * 
+    * @param originalPortletContext The current PortletContext for the Portlet
+    * @param modifiedPortletContext The new modified PortletContext
+    * @return
+    */
+   public abstract C getStateFromModifiedContext(PortletContext originalPortletContext, PortletContext modifiedPortletContext);
+   
+   /**
+    * Extracts the state based on what the current PortletContext is and the new cloned PortletContext
+    * 
+    * @param originalPortletContext The current PortletContext for the Portlet
+    * @param clonedPortletContext The new cloned PortletContext
+    * @return
+    */
+   public abstract C getstateFromClonedContext(PortletContext originalPortletContext, PortletContext clonedPortletContext);
 
 }

Modified: epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java
===================================================================
--- epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java	2010-11-26 14:38:50 UTC (rev 5298)
+++ epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortlet.java	2010-11-26 14:43:44 UTC (rev 5299)
@@ -56,6 +56,7 @@
 import org.gatein.pc.api.PortletContext;
 import org.gatein.pc.api.PortletInvoker;
 import org.gatein.pc.api.PortletInvokerException;
+import org.gatein.pc.api.PortletStateType;
 import org.gatein.pc.api.StateString;
 import org.gatein.pc.api.StatefulPortletContext;
 import org.gatein.pc.api.cache.CacheLevel;
@@ -472,7 +473,14 @@
 
          if (portlet == null)
          {
-            log.info("Could not find portlet with ID : " + producerOfferedPortletContext.getId());
+            if (producerOfferedPortletContext != null)
+            {
+               log.info("Could not find portlet with ID : " + producerOfferedPortletContext.getId());
+            }
+            else
+            {
+               log.info("Could not find portlet. The producerOfferedPortletContext is null");
+            }
             return false;
          }
 
@@ -843,10 +851,25 @@
 
       // instance context
       ExoPortletInstanceContext instanceContext;
+      // TODO: we should not be having these wsrp specific conditions through the code like
+      // this, it should either work the same was as normal portlets or abstracted out to another class.
       if (ApplicationType.WSRP_PORTLET.equals(state.getApplicationType()))
       {
          WSRP wsrp = (WSRP)preferencesPortletContext.getState();
          AccessMode accessMode = AccessMode.CLONE_BEFORE_WRITE;
+         
+         if (wsrp.getState() != null)
+         {
+            StatefulPortletContext statefulPortletContext = StatefulPortletContext.create(preferencesPortletContext.getId(),
+                  PortletStateType.OPAQUE, wsrp.getState());
+            
+            invocation.setTarget(statefulPortletContext);
+         }
+         else
+         {
+            PortletContext portletContext = PortletContext.createPortletContext(preferencesPortletContext.getId());
+            invocation.setTarget(portletContext);
+         }
 
          // if the portlet is a cloned one already, we can modify it directly instead of requesting a clone
          if (wsrp.isCloned())
@@ -858,6 +881,7 @@
       else
       {
          instanceContext = new ExoPortletInstanceContext(preferencesPortletContext.getId());
+         invocation.setTarget(preferencesPortletContext);
       }
       invocation.setInstanceContext(instanceContext);
 
@@ -869,9 +893,6 @@
       invocation.setSecurityContext(new AbstractSecurityContext(servletRequest));
 
       //
-      invocation.setTarget(preferencesPortletContext);
-
-      //
       return invocation;
    }
 
@@ -980,10 +1001,19 @@
    public void update(C updateState) throws Exception
    {
       WebuiRequestContext context = WebuiRequestContext.getCurrentInstance();
-      ExoContainer container = context.getApplication().getApplicationServiceContainer();
-      state.setApplicationState(adapter.update(container, updateState, state.getApplicationState()));
+      ExoContainer container = context.getApplication().getApplicationServiceContainer();      state.setApplicationState(adapter.update(container, updateState, state.getApplicationState()));
       setState(state);
    }
+   
+   public C getModifiedState(PortletContext modifiedContext) throws Exception
+   {
+      return adapter.getStateFromModifiedContext(this.getPortletContext(), modifiedContext);
+   }
+   
+   public C getClonedState(PortletContext clonedContext) throws Exception
+   {
+      return adapter.getstateFromClonedContext(this.getPortletContext(), clonedContext);
+   }
 
    /** This is used by the dashboard portlet and should not be used else where. It will be removed some day. */
    private static final ThreadLocal<UIPortlet> currentPortlet = new ThreadLocal<UIPortlet>();

Modified: epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
===================================================================
--- epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-11-26 14:38:50 UTC (rev 5298)
+++ epp/portal/branches/EPP_5_1_Branch/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java	2010-11-26 14:43:44 UTC (rev 5299)
@@ -25,7 +25,6 @@
 
 import org.exoplatform.portal.Constants;
 import org.exoplatform.portal.application.PortalRequestContext;
-import org.exoplatform.portal.pom.spi.wsrp.WSRP;
 import org.exoplatform.portal.webui.page.UIPage;
 import org.exoplatform.portal.webui.page.UIPageBody;
 import org.exoplatform.portal.webui.portal.UIPortal;
@@ -121,7 +120,7 @@
          if (instanceCtx.getModifiedContext() != null)
          {
             StatefulPortletContext<C> updatedCtx = (StatefulPortletContext<C>)instanceCtx.getModifiedContext();
-            C portletState = updatedCtx.getState();
+            C portletState = uiPortlet.getModifiedState(updatedCtx);
             uiPortlet.update(portletState);
          }
          else
@@ -130,17 +129,8 @@
             PortletContext clonedContext = instanceCtx.getClonedContext();
             if (clonedContext != null)
             {
-               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)
-               {
-                  StatefulPortletContext statefulPortletContext = (StatefulPortletContext)clonedContext;
-                  wsrp.setState((byte[])statefulPortletContext.getState());
-               }
-               uiPortlet.update((C)wsrp);
+               C state = uiPortlet.getClonedState(clonedContext);
+               uiPortlet.update(state);
             }
          }
 



More information about the gatein-commits mailing list