You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2009/03/22 03:50:29 UTC

svn commit: r757118 [2/2] - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/ components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/ components/jetspeed-po...

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/PortletWindowSessionNavigationalStates.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/PortletWindowSessionNavigationalStates.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/PortletWindowSessionNavigationalStates.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/PortletWindowSessionNavigationalStates.java Sun Mar 22 02:50:28 2009
@@ -24,6 +24,7 @@
 
 import javax.portlet.PortletMode;
 import javax.portlet.WindowState;
+import javax.xml.namespace.QName;
 
 import org.apache.jetspeed.Jetspeed;
 import org.apache.jetspeed.cache.ContentCacheKey;
@@ -44,14 +45,18 @@
         public Map<String, PortletWindowBaseNavigationalState> windowStates = Collections.synchronizedMap(new HashMap<String, PortletWindowBaseNavigationalState>());
         public String maximizedWindowId;
     }
-    
+
+    private final SessionNavigationalState navState;
     private final boolean storeParameters;
     private Map<String, PageState> pageStates = new HashMap<String, PageState>();
+    private Map<QName, String[]> publicRenderParametersMap = Collections.synchronizedMap(new HashMap<QName, String[]>());
 
-    public PortletWindowSessionNavigationalStates(boolean storeParameters)
+    public PortletWindowSessionNavigationalStates(SessionNavigationalState navState, boolean storeParameters)
     {
+        this.navState = navState;
         this.storeParameters = storeParameters;
     }
+    
     /*
      * JS2-806 patch
      * <p>
@@ -63,11 +68,15 @@
         final PortletMode viewMode = PortletMode.VIEW;
         final WindowState normalWindowState = WindowState.NORMAL;
         
-        PageState pageState = (PageState)pageStates.get(page.getId());
-        if ( pageState == null )
+        PageState pageState = null;
+        synchronized (pageStates)
         {
-            pageState = new PageState();
-            pageStates.put(page.getId(), pageState);
+            pageState = pageStates.get(page.getId());
+            if (pageState == null)
+            {
+                pageState = new PageState();
+                pageStates.put(page.getId(), pageState);
+            }
         }
         
         PortletWindowRequestNavigationalState requestState = null;
@@ -81,58 +90,62 @@
             removeFromCache(context, pageState.maximizedWindowId, decorationCache);                        
             pageState.maximizedWindowId = null;
         }
-        synchronized(pageState.windowStates){
-        Iterator<String> iter = requestStates.getWindowIdIterator();
-        iter = pageState.windowStates.keySet().iterator();
-        String windowId;
-        while ( iter.hasNext() )
+        synchronized (pageState.windowStates)
         {
-            windowId = (String)iter.next();
-            requestState = requestStates.getPortletWindowNavigationalState(windowId);
-            if ( requestState == null )
-            {
-                requestState = new PortletWindowRequestNavigationalState(windowId);
-            }
-            //regardless, reset portlet mode and window state
-            requestState.setPortletMode(viewMode);
-            requestState.setWindowState(normalWindowState);
-            // get the session case just in case and create a new one
-            sessionState = (PortletWindowBaseNavigationalState)pageState.windowStates.get(requestState.getWindowId());
-            if ( sessionState == null )
-            {
-                if ( storeParameters )
+            Iterator<String> iter = requestStates.getWindowIdIterator();
+            iter = pageState.windowStates.keySet().iterator();
+            String windowId;
+            while ( iter.hasNext() )
+            {
+                windowId = (String)iter.next();
+                requestState = requestStates.getPortletWindowNavigationalState(windowId);
+                if ( requestState == null )
+                {
+                    requestState = new PortletWindowRequestNavigationalState(windowId, navState.getActionScopedRequestAttributes(windowId));
+                }
+                //regardless, reset portlet mode and window state
+                requestState.setPortletMode(viewMode);
+                requestState.setWindowState(normalWindowState);
+                // get the session case just in case and create a new one
+                sessionState = (PortletWindowBaseNavigationalState)pageState.windowStates.get(requestState.getWindowId());
+                if ( sessionState == null )
                 {
-                    sessionState = new PortletWindowExtendedNavigationalState();
-                }
-                else
-                {
-                    sessionState = new PortletWindowBaseNavigationalState();
+                    if ( storeParameters )
+                    {
+                        sessionState = new PortletWindowExtendedNavigationalState(requestState.isActionScopedRequestAttributes());
+                    }
+                    else
+                    {
+                        sessionState = new PortletWindowBaseNavigationalState();
+                    }
+                    pageState.windowStates.put(requestState.getWindowId(),sessionState);
                 }
-                pageState.windowStates.put(requestState.getWindowId(),sessionState);
-            }
-            //Now, sync up. NOTE we should not be in this method if there is an portlet action request.
-            boolean changed = syncStates(false, requestState,(PortletWindowBaseNavigationalState)pageState.windowStates.get(windowId));
-            if (changed)
-            {
-                removeFromCache(context, requestState.getWindowId(), cache);
-                removeFromCache(context, page.getId(), decorationCache);                    
-                if (storeParameters)
+                //Now, sync up. NOTE we should not be in this method if there is an portlet action request.
+                boolean changed = syncStates(false, requestStates, requestState, (PortletWindowBaseNavigationalState)pageState.windowStates.get(windowId));
+                if (changed)
                 {
-                    ((PortletWindowExtendedNavigationalState)sessionState).resetDecoratorActionEncodings();
+                    removeFromCache(context, requestState.getWindowId(), cache);
+                    removeFromCache(context, page.getId(), decorationCache);                    
+                    if (storeParameters)
+                    {
+                        ((PortletWindowExtendedNavigationalState)sessionState).resetDecoratorActionEncodings();
+                    }
                 }
-            }
-            
-        }      
+            }      
         } 
     }
     
     public void sync(RequestContext context, Page page, PortletWindowRequestNavigationalStates requestStates, JetspeedContentCache cache, JetspeedContentCache decorationCache)    
     {
-        PageState pageState = (PageState)pageStates.get(page.getId());
-        if ( pageState == null )
+        PageState pageState = null;
+        synchronized (pageStates)
         {
-            pageState = new PageState();
-            pageStates.put(page.getId(), pageState);
+            pageState = (PageState)pageStates.get(page.getId());
+            if (pageState == null)
+            {
+                pageState = new PageState();
+                pageStates.put(page.getId(), pageState);
+            }
         }
         
         PortletWindowRequestNavigationalState requestState = null;
@@ -199,10 +212,10 @@
             pageState.maximizedWindowId = requestStates.getMaximizedWindow().getId().toString();
         }
         
+        // now synchronize requestStates and sessionStates
         Iterator<String> iter = requestStates.getWindowIdIterator();
         String actionWindowId = requestStates.getActionWindow() != null ? requestStates.getActionWindow().getId().toString() : null;
         boolean actionRequestState = false;
-        // now synchronize requestStates and sessionStates
         while ( iter.hasNext() )
         {
             requestState = requestStates.getPortletWindowNavigationalState((String)iter.next());
@@ -211,7 +224,7 @@
             {
                 if ( storeParameters )
                 {
-                    sessionState = new PortletWindowExtendedNavigationalState();
+                    sessionState = new PortletWindowExtendedNavigationalState(requestState.isActionScopedRequestAttributes());
                 }
                 else
                 {
@@ -221,7 +234,7 @@
             }
 
             actionRequestState = actionWindowId != null && actionWindowId.equals(requestState.getWindowId());
-            boolean changed = syncStates(actionRequestState, requestState, sessionState);      
+            boolean changed = syncStates(actionRequestState, requestStates, requestState, sessionState);      
             if (changed)
             {
                 removeFromCache(context, requestState.getWindowId(), cache);
@@ -232,32 +245,146 @@
                 }
             }
         }
-        
+
         // now copy missing requestStates from the pageState
-        synchronized(pageState.windowStates){
-        iter = pageState.windowStates.keySet().iterator();
-        String windowId;
-        while ( iter.hasNext() )
+        synchronized (pageState.windowStates)
+        {
+            iter = pageState.windowStates.keySet().iterator();
+            String windowId;
+            while ( iter.hasNext() )
+            {
+                windowId = (String)iter.next();
+                requestState = requestStates.getPortletWindowNavigationalState(windowId);
+                if ( requestState == null )
+                {
+                    requestState = new PortletWindowRequestNavigationalState(windowId, navState.getActionScopedRequestAttributes(windowId));
+                    boolean changed = syncStates(false, requestStates, requestState, (PortletWindowBaseNavigationalState)pageState.windowStates.get(windowId));
+                    requestStates.addPortletWindowNavigationalState(windowId, requestState);
+                    if (changed)
+                    {
+                        removeFromCache(context, requestState.getWindowId(), cache);
+                        removeFromCache(context, page.getId(), decorationCache);                    
+                        if (storeParameters)
+                        {
+                            sessionState = pageState.windowStates.get(windowId);
+                            ((PortletWindowExtendedNavigationalState)sessionState).resetDecoratorActionEncodings();
+                        }
+                    }
+                }
+            }
+        }        
+
+        // sync session states public render parameters
+        Map<QName, String[]> changedPublicRenderParametersMap = null;
+        requestStates.setPublicRenderParametersMap(new HashMap<QName, String[]>());
+        iter = requestStates.getWindowIdIterator();
+        while (iter.hasNext())
         {
-            windowId = (String)iter.next();
+            String windowId = iter.next();
             requestState = requestStates.getPortletWindowNavigationalState(windowId);
-            if ( requestState == null )
+            if (requestState.getPublicRenderParametersMap() != null)
             {
-                requestState = new PortletWindowRequestNavigationalState(windowId);
-                boolean changed = syncStates(false, requestState,(PortletWindowBaseNavigationalState)pageState.windowStates.get(windowId));
-                requestStates.addPortletWindowNavigationalState(windowId, requestState);
-                if (changed)
+                // determine changed session states public render parameters
+                for (Map.Entry<String, String[]> parameter : requestState.getPublicRenderParametersMap().entrySet())
                 {
-                    removeFromCache(context, requestState.getWindowId(), cache);
-                    removeFromCache(context, page.getId(), decorationCache);                    
-                    if (storeParameters)
+                    String parameterName = parameter.getKey();
+                    String[] requestParameterValues = parameter.getValue();
+                    // get qname for request public render parameter name
+                    QName parameterQName = navState.getPublicRenderParameterQName(windowId, parameterName);
+                    if (parameterQName != null)
                     {
-                        ((PortletWindowExtendedNavigationalState)sessionState).resetDecoratorActionEncodings();
+                        String[] sessionParameterValues = publicRenderParametersMap.get(parameterQName);
+                        if (changedParameterValues(requestParameterValues, sessionParameterValues))
+                        {
+                            // track changed public render parameter qnames and values
+                            if (changedPublicRenderParametersMap == null)
+                            {
+                                changedPublicRenderParametersMap = new HashMap<QName, String[]>();
+                            }
+                            changedPublicRenderParametersMap.put(parameterQName, requestParameterValues);
+                        }
+                    }
+                }
+            }
+        }
+        
+        // sync session states public render parameter changes
+        if (changedPublicRenderParametersMap != null)
+        {
+            for (Map.Entry<QName, String[]> parameterChange : changedPublicRenderParametersMap.entrySet())
+            {
+                QName changedParameterQName = parameterChange.getKey();
+                String[] changedParameterValues = parameterChange.getValue();
+                if (changedParameterValues != null)
+                {
+                    // sync new or updated public render parameter value
+                    publicRenderParametersMap.put(changedParameterQName, changedParameterValues);
+                }
+                else
+                {
+                    // null public render parameter value implies delete
+                    publicRenderParametersMap.remove(changedParameterQName);                    
+                }
+            }
+        }
+        
+        // clear cached contexts and encodings if public render parameters have changed
+        if (changedPublicRenderParametersMap != null)
+        {
+            // find pages and windows in session state that have public render parameters
+            synchronized (pageStates)
+            {
+                for (Map.Entry<String, PageState> sessionPageState : pageStates.entrySet())
+                {
+                    String pageId = sessionPageState.getKey();
+                    Map<String, PortletWindowBaseNavigationalState> windowStates = sessionPageState.getValue().windowStates;
+                    for (Map.Entry<String, PortletWindowBaseNavigationalState> windowState : windowStates.entrySet())
+                    {
+                        String windowId = windowState.getKey();
+                        sessionState = windowState.getValue();
+                        // test window for changed public render parameter qnames
+                        if (navState.hasPublicRenderParameterQNames(windowId, changedPublicRenderParametersMap.keySet()))
+                        {
+                            // clear cached items associated with window
+                            removeFromCache(context, windowId, cache);
+                            removeFromCache(context, pageId, decorationCache);                    
+                            if (storeParameters)
+                            {
+                                ((PortletWindowExtendedNavigationalState)sessionState).resetDecoratorActionEncodings();
+                            }                            
+                        }
+                    }
+                }
+            }
+        }
+        
+        // reset and sync request states public render parameters
+        requestStates.setPublicRenderParametersMap(null);
+        iter = requestStates.getWindowIdIterator();
+        while (iter.hasNext())
+        {
+            String windowId = iter.next();
+            requestState = requestStates.getPortletWindowNavigationalState(windowId);
+            requestState.setPublicRenderParametersMap(null);
+            // get all public render parameter names for window
+            Map<String, QName> parameterNames = navState.getPublicRenderParameterNamesMap(windowId);
+            if (parameterNames != null)
+            {
+                // get synced session public render parameter values 
+                for (Map.Entry<String, QName> parameterNamesEntry : parameterNames.entrySet())
+                {
+                    QName parameterQName = parameterNamesEntry.getValue();
+                    String[] parameterValues = publicRenderParametersMap.get(parameterQName);
+                    if (parameterValues != null)
+                    {
+                        // refresh request state and states public render parameters
+                        String parameterName = parameterNamesEntry.getKey();
+                        requestState.setPublicRenderParameters(parameterName, parameterValues);
+                        requestStates.setPublicRenderParameters(parameterQName, parameterValues);
                     }
                 }
             }
         }
-        }        
     }
     
     private boolean modeChanged(PortletMode req, PortletMode ses)
@@ -301,13 +428,15 @@
     }
 
     
-    private boolean syncStates(boolean actionRequestState, PortletWindowRequestNavigationalState requestState, PortletWindowBaseNavigationalState sessionState)
+    private boolean syncStates(boolean actionRequestState, PortletWindowRequestNavigationalStates requestStates, PortletWindowRequestNavigationalState requestState, PortletWindowBaseNavigationalState sessionState)
     {
         boolean changed = false;
         
-        if (modeChanged(requestState.getPortletMode(), sessionState.getPortletMode())
-                || stateChanged(requestState.getWindowState(), sessionState.getWindowState()))
+        if (modeChanged(requestState.getPortletMode(), sessionState.getPortletMode()) ||
+            stateChanged(requestState.getWindowState(), sessionState.getWindowState()))
+        {
             changed = true;
+        }
                        
         if ( requestState.getPortletMode() != null )
         {
@@ -351,6 +480,7 @@
         
         if (storeParameters)
         {
+            // sync parameters
             PortletWindowExtendedNavigationalState extendedSessionState = (PortletWindowExtendedNavigationalState)sessionState;
             if ( requestState.getParametersMap() != null )
             {
@@ -364,48 +494,98 @@
                     if (changedParameters(requestState.getParametersMap(), extendedSessionState.getParametersMap()))
                     {
                         changed = true;
+                        extendedSessionState.setParametersMap(new HashMap<String, String[]>(requestState.getParametersMap()));
                     }
-                    extendedSessionState.setParametersMap(new HashMap<String, String[]>(requestState.getParametersMap()));
                 }
             }
             else if ( requestState.isClearParameters() )
             {
                 extendedSessionState.setParametersMap(null);
-                requestState.setClearParameters(false);
-                //changed = true;
             }            
             else if ( extendedSessionState.getParametersMap() != null )
             {
                 requestState.setParametersMap(new HashMap<String, String[]>(extendedSessionState.getParametersMap()));
             }
+            
+            // sync action scope parameter
+            if (requestState.isActionScopedRequestAttributes() && extendedSessionState.isActionScopedRequestAttributes())
+            {
+                if (requestState.getActionScopeId() != null)
+                {
+                    if (changedActionScope(requestState.getActionScopeId(), extendedSessionState.getActionScopeId()))
+                    {
+                        changed = true;
+                    }
+                    extendedSessionState.setActionScopeId(requestState.getActionScopeId());
+                    extendedSessionState.setActionScopeRendered(requestState.isActionScopeRendered());
+                }
+                else if (requestState.isClearParameters())
+                {
+                    extendedSessionState.setActionScopeId(null);
+                    extendedSessionState.setActionScopeRendered(false);
+                }
+                else if (extendedSessionState.getActionScopeId() != null)
+                {
+                    requestState.setActionScopeId(extendedSessionState.getActionScopeId());
+                    requestState.setActionScopeRendered(extendedSessionState.isActionScopeRendered());                
+                }
+            }
+
+            // reset clear parameters
+            if (requestState.isClearParameters())
+            {
+                requestState.setClearParameters(false);
+            }            
         }
         return changed;
     }    
 
     protected boolean changedParameters(Map<String, String[]> requestMap, Map<String, String[]> sessionMap)
     {
-        if (sessionMap == null || requestMap == null)
+        if (requestMap == null || sessionMap == null)
+        {
             return true;
+        }
         if (requestMap.size() != sessionMap.size())
+        {
             return true;
+        }
         Iterator<Map.Entry<String, String[]>> ri = requestMap.entrySet().iterator();
-        Iterator<Map.Entry<String, String[]>> si = sessionMap.entrySet().iterator();
-        while (ri.hasNext() && si.hasNext())
+        while (ri.hasNext())
         {
             Map.Entry<String, String[]> r = ri.next();
-            Map.Entry<String, String[]> s = si.next();
-            if (!r.getKey().equals(s.getKey()))
+            if (changedParameterValues(r.getValue(), sessionMap.get(r.getKey())))
+            {
                 return true;
-            String[] rvals = r.getValue();
-            String[] svals = s.getValue();            
-            for (int ix = 0; ix < rvals.length; ix++)
+            }
+        }
+        return false;
+    }
+    
+    protected boolean changedParameterValues(String[] requestValues, String[] sessionValues)
+    {
+        if ((requestValues == null) || (sessionValues == null) || (requestValues.length != sessionValues.length))
+        {
+            return true;
+        }
+        for (int ix = 0; ix < requestValues.length; ix++)
+        {
+            if (!requestValues[ix].equals(sessionValues[ix]))
             {
-                if (!rvals[ix].equals(svals[ix]))
-                    return true;
+                return true;
             }
         }
         return false;
     }
+
+    protected boolean changedActionScope(String requestActionScope, String sessionActionScope)
+    {
+        if ((requestActionScope == null) || (sessionActionScope == null))
+        {
+            return true;
+        }
+        return !requestActionScope.equals(sessionActionScope);
+    }
     
     protected void removeFromCache(RequestContext context, String id, JetspeedContentCache cache)
     {

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/SessionNavigationalState.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/SessionNavigationalState.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/SessionNavigationalState.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/state/impl/SessionNavigationalState.java Sun Mar 22 02:50:28 2009
@@ -109,7 +109,7 @@
                 PortletWindowSessionNavigationalStates sessionStates = (PortletWindowSessionNavigationalStates)session.getAttribute(NavigationalState.NAVSTATE_SESSION_KEY);
                 if ( sessionStates == null )
                 {
-                    sessionStates = new PortletWindowSessionNavigationalStates(isRenderParameterStateFull());
+                    sessionStates = new PortletWindowSessionNavigationalStates(this, isRenderParameterStateFull());
                     session.setAttribute(NavigationalState.NAVSTATE_SESSION_KEY, sessionStates);
                 }
                 Page page = context.getPage();

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/AbstractPortalURL.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/AbstractPortalURL.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/AbstractPortalURL.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/AbstractPortalURL.java Sun Mar 22 02:50:28 2009
@@ -104,14 +104,25 @@
     
     public String createNavigationalEncoding(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, boolean action)
     {
-        return createNavigationalEncoding(window, parameters, mode, state, action ? URLType.ACTION : URLType.RENDER);
+        return createNavigationalEncoding(window, parameters, null, false, null, null, null, null, 
+                                          mode, state, action ? URLType.ACTION : URLType.RENDER);
     }
     
     public String createNavigationalEncoding(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, URLType urlType)
     {
+        return createNavigationalEncoding(window, parameters, null, false, null, null, null, null, 
+                                          mode, state, urlType);
+    }
+
+    public String createNavigationalEncoding(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                                             String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                                             PortletMode mode, WindowState state, URLType urlType)
+    {
         try
         {
-            return getNavigationalStateParameterName() + ":" + getNavigationalState().encode(window, parameters, mode, state, urlType);
+            String ns = getNavigationalState().encode(window, parameters, actionScopeId, actionScopeRendered, cacheLevel, resourceId, privateRenderParameters, publicRenderParameters,
+                                                      mode, state, urlType);
+            return getNavigationalStateParameterName() + ":" + ns;
         }
         catch (UnsupportedEncodingException e)
         {
@@ -124,7 +135,8 @@
     {
         try
         {
-            return getNavigationalStateParameterName() + ":" + getNavigationalState().encode(window, mode, state);
+            String ns = getNavigationalState().encode(window, mode, state);
+            return getNavigationalStateParameterName() + ":" + ns;
         }
         catch (UnsupportedEncodingException e)
         {
@@ -259,14 +271,25 @@
 
     public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, boolean action, boolean secure)
     {
-        return createPortletURL(window, parameters, mode, state, action ? URLType.ACTION : URLType.RENDER, secure);
+        return createPortletURL(window, parameters, null, false, null, null, null, null,
+                                mode, state, action ? URLType.ACTION : URLType.RENDER, secure);
     }
     
     public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, URLType urlType, boolean secure)
     {
+        return createPortletURL(window, parameters, null, false, null, null, null, null,
+                                mode, state, urlType, secure);
+    }
+    
+    public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                                   String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                                   PortletMode mode, WindowState state, URLType urlType, boolean secure)
+    {
         try
         {
-            return createPortletURL(navState.encode(window,parameters,mode,state,urlType), secure);
+            String ns = getNavigationalState().encode(window, parameters, actionScopeId, actionScopeRendered, cacheLevel, resourceId, privateRenderParameters, publicRenderParameters,
+                                                      mode, state, urlType);
+            return createPortletURL(ns, secure);
         }
         catch (UnsupportedEncodingException e)
         {
@@ -281,7 +304,8 @@
     {
         try
         {
-            return createPortletURL(navState.encode(window,mode,state), secure);
+            String ns = navState.encode(window,mode,state);
+            return createPortletURL(ns, secure);
         }
         catch (UnsupportedEncodingException e)
         {

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/DesktopEncodingPortalURL.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/DesktopEncodingPortalURL.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/DesktopEncodingPortalURL.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/url/impl/DesktopEncodingPortalURL.java Sun Mar 22 02:50:28 2009
@@ -199,12 +199,9 @@
         return buffer.toString();
     }        
     
-    public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, boolean action, boolean secure)
-    {
-        return createPortletURL(window, parameters, mode, state, action ? URLType.ACTION : URLType.RENDER ,secure);
-    }
-    
-    public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, URLType urlType, boolean secure)
+    public String createPortletURL(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+            String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+            PortletMode mode, WindowState state, URLType urlType, boolean secure)
     {
         try
         {
@@ -214,7 +211,9 @@
             	desktopRequestNotAjax = true;
             	parameters.remove(JetspeedDesktop.DESKTOP_REQUEST_NOT_AJAX_PARAMETER);
             }
-            return createPortletURL(this.getNavigationalState().encode(window,parameters,mode,state,urlType), secure, window, urlType, desktopRequestNotAjax);
+            String ns = getNavigationalState().encode(window, parameters, actionScopeId, actionScopeRendered, cacheLevel, resourceId, privateRenderParameters, publicRenderParameters,
+                                                      mode, state, urlType);
+            return createPortletURL(ns, secure, window, urlType, desktopRequestNotAjax);
         }
         catch (UnsupportedEncodingException e)
         {

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/window/impl/PortletWindowImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/window/impl/PortletWindowImpl.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/window/impl/PortletWindowImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/window/impl/PortletWindowImpl.java Sun Mar 22 02:50:28 2009
@@ -25,6 +25,8 @@
 import org.apache.jetspeed.container.PortletEntity;
 import org.apache.jetspeed.container.PortletWindow;
 import org.apache.jetspeed.container.PortletWindowID;
+import org.apache.jetspeed.om.portlet.ContainerRuntimeOption;
+import org.apache.jetspeed.om.portlet.PortletDefinition;
 
 /**
  * <P>

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/MutableNavigationalState.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/MutableNavigationalState.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/MutableNavigationalState.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/MutableNavigationalState.java Sun Mar 22 02:50:28 2009
@@ -62,6 +62,11 @@
     void setState(PortletWindow window, WindowState windowState);
     
     /**
+     * Remove state for the given (possibly invalid) portlet window
+     */
+    void removeState(PortletWindow window);
+    
+    /**
      * Sets the portlet mode for the given portlet window.
      * 
      * @param window
@@ -76,10 +81,17 @@
      */
     void clearParameters(PortletWindow window);
     
-    /**
-     * Remove state for the given (possibly invalid) portlet window
-     */
-    void removeState(PortletWindow window);
-    
     void setParametersMap(PortletWindow window, Map<String, String[]> parametersMap);
+
+    void setActionScopeId(PortletWindow window, String actionScopeId);
+    
+    void setActionScopeRendered(PortletWindow window, boolean actionScopeRendered);
+
+    void setCacheLevel(PortletWindow window, String cacheLevel);
+
+    void setResourceId(PortletWindow window, String resourceId);
+    
+    void setPrivateRenderParametersMap(PortletWindow window, Map<String, String[]> privateRenderParametersMap);
+
+    void setPublicRenderParametersMap(PortletWindow window, Map<String, String[]> publicRenderParametersMap);
 }

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/NavigationalState.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/NavigationalState.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/NavigationalState.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/state/NavigationalState.java Sun Mar 22 02:50:28 2009
@@ -140,7 +140,29 @@
     String[] getParameterValues(PortletWindow window, String parameterName);
 
     Map<String, String[]> getParameterMap(PortletWindow window);
+
+    boolean isActionScopedRequestAttributes(PortletWindow window);
+    
+    String getActionScopeId(PortletWindow window);
+    
+    boolean isActionScopeRendered(PortletWindow window);
+
+    String getCacheLevel(PortletWindow window);
+
+    String getResourceId(PortletWindow window);
+    
+    Iterator<String> getPrivateRenderParameterNames(PortletWindow window);
     
+    String[] getPrivateRenderParameterValues(PortletWindow window, String parameterName);
+
+    Map<String, String[]> getPrivateRenderParameterMap(PortletWindow window);
+    
+    Iterator<String> getPublicRenderParameterNames(PortletWindow window);
+    
+    String[] getPublicRenderParameterValues(PortletWindow window, String parameterName);
+
+    Map<String, String[]> getPublicRenderParameterMap(PortletWindow window);
+
     PortalURL.URLType getURLType();
     
     PortletWindow getPortletWindowOfAction();
@@ -162,13 +184,21 @@
      * 
      * @param window the PortalWindow
      * @param parameters the new request or action parameters for the PortalWindow
+     * @param actionScopeId the new action scope for the PortalWindow
+     * @param actionScopeRendered the new action scope rendered flag for the PortalWindow
+     * @param cacheLevel the new cache level for the PortalWindow resource
+     * @param resourceId the new resource id for the PortalWindow resource
+     * @param privateRenderParameters the new private render parameters for the PortalWindow resource
+     * @param publicRenderParameters the new request, action, or resource public render parameters for the PortalWindow
      * @param mode the new PortletMode for the PortalWindow
      * @param state the new WindowState for the PortalWindow
      * @param action indicates if to be used in an actionURL or renderURL
      * @return encoded new Navigational State
      * @deprecated
      */
-    String encode(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, boolean action) throws UnsupportedEncodingException;
+    String encode(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                  String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                  PortletMode mode, WindowState state, boolean action) throws UnsupportedEncodingException;
 
     /**
      * Encodes the Navigational State with overrides for a specific PortletWindow into a string to be embedded within a 
@@ -176,12 +206,20 @@
      * 
      * @param window the PortalWindow
      * @param parameters the new request or action parameters for the PortalWindow
+     * @param actionScopeId the new action scope for the PortalWindow
+     * @param actionScopeRendered the new action scope rendered flag for the PortalWindow
+     * @param cacheLevel the new cache level for the PortalWindow resource
+     * @param resourceId the new resource id for the PortalWindow resource
+     * @param privateRenderParameters the new private render parameters for the PortalWindow resource
+     * @param publicRenderParameters the new request, action, or resource public render parameters for the PortalWindow
      * @param mode the new PortletMode for the PortalWindow
      * @param state the new WindowState for the PortalWindow
      * @param urlType indicates if to be used in an actionURL, ResourceURL or renderURL
      * @return encoded new Navigational State
      */
-    String encode(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, PortalURL.URLType urlType) throws UnsupportedEncodingException;
+    String encode(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                  String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                  PortletMode mode, WindowState state, PortalURL.URLType urlType) throws UnsupportedEncodingException;
 
     /**
      * Encodes the Navigational State with overrides for a specific PortletWindow while retaining its (request) 

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/url/PortalURL.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/url/PortalURL.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/url/PortalURL.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/url/PortalURL.java Sun Mar 22 02:50:28 2009
@@ -133,10 +133,34 @@
      * @param urlType indicates if an actionURL, Resource or renderURL is to created
      * @param secure indicates if a secure url is required 
      * @return a new actionURL or renderURL as String
+     * @deprecated
      */
     String createPortletURL(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, URLType urlType, boolean secure);
 
     /**
+     * Create a new PortletURL for a PortletWindow including request or action parameters.
+     * <br>
+     * The Portal Navigational State is encoded within the URL
+     * 
+     * @param window the PortalWindow
+     * @param parameters the new request or action parameters for the PortalWindow
+     * @param actionScopeId the new action scope for the PortalWindow
+     * @param actionScopeRendered the new action scope rendered flag for the PortalWindow
+     * @param cacheLevel the new cache level for the PortalWindow resource
+     * @param resourceId the new resource id for the PortalWindow resource
+     * @param privateRenderParameters the new private render parameters for the PortalWindow resource
+     * @param publicRenderParameters the new request, action, or resource public render parameters for the PortalWindow
+     * @param mode the new PortletMode for the PortalWindow
+     * @param state the new WindowState for the PortalWindow
+     * @param urlType indicates if an actionURL, Resource or renderURL is to created
+     * @param secure indicates if a secure url is required 
+     * @return a new actionURL or renderURL as String
+     */
+    String createPortletURL(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                            String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                            PortletMode mode, WindowState state, URLType urlType, boolean secure);
+
+    /**
      * Create a new PortletURL for a PortletWindow retaining its (request) parameters.
      * <br>
      * The Portal Navigational State is encoded within the URL
@@ -185,8 +209,31 @@
      * @param urlType indicates if an actionURL, Resource or renderURL is to created
      * @param secure indicates if a secure url is required 
      * @return a new navigational state as String
+     * @deprecated
      */
     String createNavigationalEncoding(PortletWindow window, Map<String, String[]> parameters, PortletMode mode, WindowState state, URLType urlType);
+
+    /**
+     * Creates the navigational encoding for a given window
+     * Similiar to createPortletURL above
+     * 
+     * @param window the PortalWindow
+     * @param parameters the new request or action parameters for the PortalWindow
+     * @param actionScopeId the new action scope for the PortalWindow
+     * @param actionScopeRendered the new action scope rendered flag for the PortalWindow
+     * @param cacheLevel the new cache level for the PortalWindow resource
+     * @param resourceId the new resource id for the PortalWindow resource
+     * @param privateRenderParameters the new private render parameters for the PortalWindow resource
+     * @param publicRenderParameters the new request, action, or resource public render parameters for the PortalWindow
+     * @param mode the new PortletMode for the PortalWindow
+     * @param state the new WindowState for the PortalWindow
+     * @param urlType indicates if an actionURL, Resource or renderURL is to created
+     * @param secure indicates if a secure url is required 
+     * @return a new navigational state as String
+     */
+    String createNavigationalEncoding(PortletWindow window, Map<String, String[]> parameters, String actionScopeId, boolean actionScopeRendered,
+                                      String cacheLevel, String resourceId, Map<String, String[]> privateRenderParameters, Map<String, String[]> publicRenderParameters,
+                                      PortletMode mode, WindowState state, URLType urlType);
     
     /**
      * Creates the navigational encoding for a given window

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/ContainerRuntimeOption.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/ContainerRuntimeOption.java?rev=757118&r1=757117&r2=757118&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/ContainerRuntimeOption.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/ContainerRuntimeOption.java Sun Mar 22 02:50:28 2009
@@ -24,4 +24,5 @@
  */
 public interface ContainerRuntimeOption extends org.apache.pluto.container.om.portlet.ContainerRuntimeOption, Serializable
 {
-}
\ No newline at end of file
+    public static final String ACTION_SCOPED_REQUEST_ATTRIBUTES_OPTION = "javax.portlet.actionScopedRequestAttributes";
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org