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 sm...@apache.org on 2006/11/21 22:09:22 UTC

svn commit: r477887 - in /portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed: decoration/DecorationValve.java layout/ajax-xml/getactions.vm layout/ajax-xml/psml.vm layout/impl/GetPortletActionsAction.java

Author: smilek
Date: Tue Nov 21 13:09:19 2006
New Revision: 477887

URL: http://svn.apache.org/viewvc?view=rev&rev=477887
Log:
add supported page actions to getpage and getactions ajaxapi responses

Modified:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/decoration/DecorationValve.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getactions.vm
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletActionsAction.java

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/decoration/DecorationValve.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/decoration/DecorationValve.java?view=diff&rev=477887&r1=477886&r2=477887
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/decoration/DecorationValve.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/decoration/DecorationValve.java Tue Nov 21 13:09:19 2006
@@ -122,10 +122,10 @@
 
         PageActionAccess pageActionAccess = (PageActionAccess)requestContext.getAttribute(PortalReservedParameters.PAGE_EDIT_ACCESS_ATTRIBUTE);
         
-        if ( fragments == null )
+        if ( fragments == null || fragments.size() == 0 )
         {
             ContentFragment rootFragment = page.getRootContentFragment();
-            initDepthFragments(requestContext, theme, rootFragment, pageActionAccess, isAjaxRequest);
+            initDepthFragments(requestContext, theme, rootFragment, pageActionAccess, isAjaxRequest, fragments);
         }
         else
         {
@@ -185,19 +185,19 @@
      * @throws PortletEntityNotStoredException 
      * @throws FailedToRetrievePortletWindow 
      */
-    protected void initActionsForFragment(
-                        RequestContext requestContext, 
-                        ContentFragment fragment, 
-                        PageActionAccess pageActionAccess, 
-                        Decoration decoration,
-                        boolean isAjaxRequest) throws FailedToRetrievePortletWindow, PortletEntityNotStoredException
+    protected boolean initActionsForFragment(RequestContext requestContext, 
+                                             ContentFragment fragment, 
+                                             PageActionAccess pageActionAccess, 
+                                             Decoration decoration,
+                                             boolean isAjaxRequest) throws FailedToRetrievePortletWindow, PortletEntityNotStoredException
     {
+        boolean fragmentSupportsActions = false;
         PortletWindow window = windowAccessor.getPortletWindow(fragment); 
         PortletDefinitionComposite portlet = (PortletDefinitionComposite) window.getPortletEntity().getPortletDefinition();
         
         if (null == portlet)
         {
-            return; // allow nothing
+            return fragmentSupportsActions; // allow nothing
         }
 
         List actions = Collections.EMPTY_LIST;
@@ -208,10 +208,12 @@
         
         if ( fragment.equals(requestContext.getPage().getRootFragment()) )
         {
+            fragmentSupportsActions = true;
             actions = getPageModes(requestContext, window, content, currentMode, currentState, pageActionAccess, decoration, isAjaxRequest);
         }
         else if ( !Fragment.LAYOUT.equals(fragment.getType()) )
         {
+            fragmentSupportsActions = true;
             String fragmentId = fragment.getId();
             PortletApplication pa = (PortletApplication)window.getPortletEntity().getPortletDefinition().getPortletApplicationDefinition();
 
@@ -291,6 +293,8 @@
         }
         
         decoration.setActions( actions );
+        
+        return fragmentSupportsActions;
     }
     
     /**
@@ -308,8 +312,8 @@
      * @throws PortletEntityNotStoredException 
      */
     protected List getPageModes(RequestContext requestContext, PortletWindow window, ContentTypeSet content, 
-                    PortletMode mode, WindowState state, PageActionAccess pageActionAccess, Decoration decoration,
-                    boolean isAjaxRequest)
+                                PortletMode mode, WindowState state, PageActionAccess pageActionAccess, Decoration decoration,
+                                boolean isAjaxRequest)
     {
         List pageModes = new ArrayList();
         
@@ -385,7 +389,8 @@
                                       Theme theme, 
                                       ContentFragment fragment, 
                                       PageActionAccess pageActionAccess,
-                                      boolean isAjaxRequest)
+                                      boolean isAjaxRequest,
+                                      List collectFragments )
     {
         final List contentFragments = fragment.getContentFragments();
         
@@ -395,29 +400,37 @@
             while(itr.hasNext())
             {
                 ContentFragment aFragment = (ContentFragment) itr.next();
-                initDepthFragments(requestContext, theme, aFragment, pageActionAccess, isAjaxRequest);
+                initDepthFragments(requestContext, theme, aFragment, pageActionAccess, isAjaxRequest, collectFragments);
             }
         }
         
-        initFragment(requestContext, theme, fragment, pageActionAccess, isAjaxRequest);
+        if ( initFragment(requestContext, theme, fragment, pageActionAccess, isAjaxRequest) )
+        {
+            if ( collectFragments != null )
+            {
+                collectFragments.add( fragment );
+            }
+        }
     }
 
-    protected void initFragment(RequestContext requestContext, 
-                                Theme theme, 
-                                ContentFragment fragment, 
-                                PageActionAccess pageActionAccess,
-                                boolean isAjaxRequest)
+    protected boolean initFragment(RequestContext requestContext, 
+                                   Theme theme, 
+                                   ContentFragment fragment, 
+                                   PageActionAccess pageActionAccess,
+                                   boolean isAjaxRequest)
     {
+        boolean fragmentSupportsActions = false;
         try
         {
             Decoration decoration = theme.getDecoration(fragment);
             fragment.setDecoration(decoration);
-            initActionsForFragment(requestContext, fragment, pageActionAccess, decoration, isAjaxRequest);
+            fragmentSupportsActions = initActionsForFragment(requestContext, fragment, pageActionAccess, decoration, isAjaxRequest);
         }
         catch (Exception e)
         {
             log.warn("Unable to initalize actions for fragment "+fragment.getId(), e);
         }
+        return fragmentSupportsActions;
     }
 
     

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getactions.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getactions.vm?view=diff&rev=477887&r1=477886&r2=477887
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getactions.vm (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getactions.vm Tue Nov 21 13:09:19 2006
@@ -2,8 +2,15 @@
     <status>$status</status>
     <action>$action</action>
     
+    #if ( $page )
+    <page>
+#foreach ($action in $page.decoration.actions)
+        <action id="${action.ActionName}" type="${action.ActionType}" name="${action.Name}" url="${action.Action}"/>    
+#end
+    </page>
+    #end
     <portlets>
-#foreach ($portlet in $fragments)
+#foreach ($portlet in $portlets)
     <portlet id="$portlet.getId()">
 #foreach ($action in $portlet.decoration.actions)
         <action id="${action.ActionName}" type="${action.ActionType}" name="${action.Name}" url="${action.Action}"/>    

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm?view=diff&rev=477887&r1=477886&r2=477887
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm Tue Nov 21 13:09:19 2006
@@ -49,6 +49,9 @@
 #foreach ($meta in $page.Metadata.Fields)
 	<metadata name="$meta.Name" xml:lang="$meta.Locale.Language">$meta.Value</metadata>
 #end
+#foreach ($action in $page.getRootContentFragment().decoration.actions)
+     <action id="${action.ActionName}" type="${action.ActionType}" name="${action.Name}" url="${action.Action}"/>    
+#end
 
 #if ($fragments == "true")    
   #traverseFragments($page.RootFragment)

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletActionsAction.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletActionsAction.java?view=diff&rev=477887&r1=477886&r2=477887
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletActionsAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletActionsAction.java Tue Nov 21 13:09:19 2006
@@ -93,46 +93,52 @@
         return runAction(requestContext, resultMap, false);
     }
     
-    public boolean runAction(RequestContext requestContext, Map resultMap, boolean batch)
+    public boolean runAction( RequestContext requestContext, Map resultMap, boolean batch )
     {
         boolean success = true;
         String status = "success";
         try
         {
-            resultMap.put(ACTION, action);
-            // Get the necessary parameters off of the request
-            String[] portletIds = requestContext.getRequest().getParameterValues( PORTLETID );
-            if (portletIds == null) 
-            { 
-                throw new Exception("no portlet id was provided"); 
-            }
+            resultMap.put( ACTION, action );
             
             ContentPage page = requestContext.getPage();
             
-            ArrayList portletFragments = new ArrayList();
-            for ( int i = 0 ; i < portletIds.length ; i++ )
+            // Get the necessary parameters off of the request
+            ArrayList getActionsForFragments = new ArrayList();
+            String[] portletIds = requestContext.getRequest().getParameterValues( PORTLETID );
+            if ( portletIds != null && portletIds.length > 0 ) 
             {
-                String portletId = portletIds[ i ];
-                ContentFragment fragment = (ContentFragment)page.getFragmentById( portletId );
-                if ( fragment == null )
+                for ( int i = 0 ; i < portletIds.length ; i++ )
                 {
-                    throw new Exception("fragment not found for specified portlet id: " + portletId); 
+                    String portletId = portletIds[ i ];
+                    ContentFragment fragment = (ContentFragment)page.getFragmentById( portletId );
+                    if ( fragment == null )
+                    {
+                        throw new Exception("fragment not found for specified portlet id: " + portletId); 
+                    }
+                    getActionsForFragments.add( fragment );
                 }
-                portletFragments.add( fragment );
+                getActionsForFragments.add( page.getRootContentFragment() );
             }
 
             // Run the Decoration valve to get actions
-            decorationValve.initFragments( requestContext, true, portletFragments );
+            decorationValve.initFragments( requestContext, true, getActionsForFragments );
+            
+            if ( getActionsForFragments.size() > 0 )
+            {
+                Fragment rootFragment = (Fragment)getActionsForFragments.remove( getActionsForFragments.size()-1 );
+                resultMap.put( PAGE, rootFragment );
+            }
             
-            resultMap.put(FRAGMENTS, portletFragments);
+            resultMap.put( PORTLETS, getActionsForFragments );
             
-            resultMap.put(STATUS, status);
+            resultMap.put( STATUS, status );
         } 
         catch (Exception e)
         {
             // Log the exception
-            log.error("exception while moving a portlet", e);
-            resultMap.put(REASON, e.toString());
+            log.error( "exception while getting actions for a fragment", e );
+            resultMap.put( REASON, e.toString() );
             // Return a failure indicator
             success = false;
         }



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