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 ta...@apache.org on 2005/12/02 11:36:59 UTC

svn commit: r351664 - in /portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed: ajax/ layout/ajax-xml/ layout/impl/

Author: taylor
Date: Fri Dec  2 02:36:53 2005
New Revision: 351664

URL: http://svn.apache.org/viewcvs?rev=351664&view=rev
Log:
implemented a few more ajax xml apis:
* getPortlets (returns filtered (secure) list of portlets, supports filters)
* getPage (returns full psml page as xml, should make this default pipeline action)
* addPortlet (not yet complete)
* removePortlet is broken, get that next

Added:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/add.vm
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm
      - copied, changed from r350273, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlet.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/GetPageAction.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletInfo.java
Removed:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlet.vm
Modified:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/ajax/AjaxRequestServiceImpl.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/error.vm
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/AddPortletAction.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/BasePortletAction.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/Constants.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/MovePortletAction.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletPlacementContextImpl.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/RemovePortletAction.java

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/ajax/AjaxRequestServiceImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/ajax/AjaxRequestServiceImpl.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/ajax/AjaxRequestServiceImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/ajax/AjaxRequestServiceImpl.java Fri Dec  2 02:36:53 2005
@@ -28,6 +28,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.layout.impl.Constants;
 import org.apache.jetspeed.request.RequestContext;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
@@ -230,7 +231,8 @@
         } catch (Exception e)
         {
             log.error("builder failed", e);
-
+            inputMap.put(Constants.REASON, e.toString());
+            
             buildError(requestContext);
         }
     }

Added: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/add.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/add.vm?rev=351664&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/add.vm (added)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/add.vm Fri Dec  2 02:36:53 2005
@@ -0,0 +1,6 @@
+<js>
+    <status>$status</status>
+    <action>$action</action>
+    <id>$id</id> 
+    <new_position><col>$newcol</col><row>$newrow</row></new_position>
+</js>
\ No newline at end of file

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/error.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/error.vm?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/error.vm (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/error.vm Fri Dec  2 02:36:53 2005
@@ -1,5 +1,6 @@
 <js>
     <status>$status</status>
     <action>$action</action>
+	<reason>$reason</reason>
     <id>$id</id>
 </js>

Copied: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm (from r350273, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlet.vm)
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm?p2=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm&p1=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlet.vm&r1=350273&r2=351664&rev=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlet.vm (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/getportlets.vm Fri Dec  2 02:36:53 2005
@@ -3,17 +3,16 @@
     <action>getportlets</action>
     
     <portlets>
-    
-        <portlet name=“myPortlet” id=“1234”>
-            <position><col>0</col><row>1</row></position>
-            <parameters>
-                <param>
-                    <name>moveable</name>
-                    <value>true</value>
-                </param>
-            </parameters>
+#foreach ($portlet in $portlets)    
+        <portlet name="$portlet.Name" displayName="$portlet.DisplayName" description="$portlet.Description">
+##           <position column="$portlet.Column" row="$portlet.Row"/>
+##           <parameters>
+###foreach ($param in $portlet.Parameters)
+##                <param name="$param.Name" value="$param.Value"/>
+###end
+##           </parameters>
         </portlet>
-        
+#end        
     </portlets>
     
 </js>

Added: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm?rev=351664&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm (added)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/ajax-xml/psml.vm Fri Dec  2 02:36:53 2005
@@ -0,0 +1,43 @@
+#macro (traverseFragments $f)
+    <fragment id="$f.Id" type="$f.Type" name="$f.Name" decorator="$!f.Decorator">
+    #foreach ($prop in $f.getProperties().entrySet())
+      <property name="$prop.Key" value="$prop.Value" />
+	#end
+	#foreach ($pref in $f.Preferences)
+		<preference name="$pref.Name" readOnly='$pref.isReadOnly()'>		
+		  #foreach ($value in $pref.ValueList)
+		    <value>$value</value>
+		  #end
+		</preference>
+	#end
+    #if($f.Type == "layout")
+		#foreach($subf in $f.Fragments)
+        #traverseFragments($subf)
+		#end
+	#end
+    </fragment>                                		
+#end
+
+<js>
+    <status>$status</status>
+    <action>getportlets</action>
+    
+<page hidden='$page.Hidden'>
+  <defaults
+     layout-decorator='$page.getDefaultDecorator("layout")'
+     portlet-decorator='$page.getDefaultDecorator("portlet")'
+  />
+  <name>$page.Name</name>
+  <path>$page.Path</path>
+  <title>$page.Title</title>
+  <short-title>$page.ShortTitle</short-title>
+  
+  #foreach ($meta in $page.Metadata.Fields)
+	<metadata name="$meta.Name" xml:lang="$meta.Locale.Language">$meta.Value</metadata>
+  #end
+    
+  #traverseFragments($page.RootFragment)
+  
+</page>    
+
+</js>

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/AddPortletAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/AddPortletAction.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/AddPortletAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/AddPortletAction.java Fri Dec  2 02:36:53 2005
@@ -24,6 +24,7 @@
 import org.apache.jetspeed.ajax.AjaxBuilder;
 import org.apache.jetspeed.layout.Coordinate;
 import org.apache.jetspeed.layout.PortletPlacementContext;
+import org.apache.jetspeed.om.common.SecuredResource;
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.page.PageManager;
@@ -32,6 +33,13 @@
 /**
  * Add Portlet portlet placement action
  * 
+ * AJAX Parameters: 
+ *    id = portlet full name (pa::portletName) to be added
+ *    page = (implied in the URL)
+ * Optional Parameters:  
+ *    row = the new row to move to
+ *    col = the new column to move to
+ *    
  * @author <a>David Gurney </a>
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
  * @version $Id: $
@@ -50,7 +58,9 @@
         this(template, errorTemplate, null);
     }
 
-    public AddPortletAction(String template, String errorTemplate, PageManager pageManager)
+    public AddPortletAction(String template, 
+                            String errorTemplate, 
+                            PageManager pageManager)
     {
         super(template, errorTemplate);
         this.pageManager = pageManager;
@@ -73,6 +83,13 @@
             }
             resultMap.put(PORTLETID, portletId);
 
+            if (false == checkAccess(requestContext, SecuredResource.EDIT_ACTION))
+            {
+                success = false;
+                resultMap.put(REASON, "Insufficient access to edit page");                
+                return success;
+            }
+            
             // These are optional parameters
             String col = requestContext.getRequestParameter(COL);
             String row = requestContext.getRequestParameter(ROW);
@@ -95,11 +112,16 @@
 
             // Use the Portlet Placement Manager to accomplish the removal
             PortletPlacementContext placement = new PortletPlacementContextImpl(requestContext);
-            Fragment fragment = placement.getFragmentById(portletId);
+            Fragment fragment = pageManager.newFragment();
+            fragment.setType(Fragment.PORTLET);
+            fragment.setName(portletId);
+            // TODO: this does not handle nested layouts            
+            Fragment root = requestContext.getPage().getRootFragment();
+            root.getFragments().add(fragment);
             
-            Coordinate coordinate = placement.add(portletId, new CoordinateImpl(iCol, iRow));
+            Coordinate coordinate = placement.add(fragment, new CoordinateImpl(iCol, iRow, iCol, iRow));
+            Page page = placement.syncPageFragments();                                                
             
-            Page page = placement.syncPageFragments();
             if (pageManager != null)
                 pageManager.updatePage(page);
 
@@ -109,6 +131,7 @@
         {
             // Log the exception
             log.error("exception while adding a portlet", e);
+            resultMap.put(REASON, e.toString());
 
             // Return a failure indicator
             success = false;

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/BasePortletAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/BasePortletAction.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/BasePortletAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/BasePortletAction.java Fri Dec  2 02:36:53 2005
@@ -19,6 +19,8 @@
 
 import org.apache.jetspeed.ajax.AjaxAction;
 import org.apache.jetspeed.ajax.AjaxBuilder;
+import org.apache.jetspeed.om.common.SecuredResource;
+import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.request.RequestContext;
 
 /**
@@ -75,4 +77,19 @@
         return template;
     }
 
+    public boolean checkAccess(RequestContext context, String action)
+    {
+        Page page = context.getPage();
+        try
+        {
+            page.checkAccess(action);
+            
+        }
+        catch (SecurityException e)
+        {
+            return false;
+        }     
+        return true;
+    }
+    
 }

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/Constants.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/Constants.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/Constants.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/Constants.java Fri Dec  2 02:36:53 2005
@@ -22,16 +22,21 @@
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  * @version $Id: $
  */
-public interface Constants {
+public interface Constants 
+{
 	public static final String STATUS = "status";
 	public static final String ACTION = "action";
-	public static final String PORTLETID = "id";
+    public static final String REASON = "reason";
+	public static final String PORTLETID = "id";    
 	public static final String OLDCOL = "oldcol";
 	public static final String OLDROW = "oldrow";
 	public static final String NEWCOL = "newcol";
 	public static final String NEWROW = "newrow";
 	public static final String COL = "col";
 	public static final String ROW = "row";
+    public static final String FILTER = "filter";
+    public static final String PORTLETS = "portlets";
+    public static final String PAGE = "page";
 
 	// Move types
 	public static final int ABS = 1;

Added: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPageAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPageAction.java?rev=351664&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPageAction.java (added)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPageAction.java Fri Dec  2 02:36:53 2005
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.layout.impl;
+
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.ajax.AjaxAction;
+import org.apache.jetspeed.ajax.AjaxBuilder;
+import org.apache.jetspeed.om.common.SecuredResource;
+import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.request.RequestContext;
+
+/**
+ * Get Page retrieves a page from the Page Manager store and PSML format
+ *
+ * AJAX Parameters: 
+ *    page = the path and name of the page ("/_user/ronaldino/goals.psml")
+ *    
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class GetPageAction 
+    extends BasePortletAction 
+    implements AjaxAction, AjaxBuilder, Constants
+{
+    /** Logger */
+    protected Log log = LogFactory.getLog(GetPortletsAction.class);
+
+    private PageManager pageManager = null;
+    
+    public GetPageAction(String template, 
+            String errorTemplate, 
+            PageManager pageManager)
+    {
+        super(template, errorTemplate);
+        this.pageManager = pageManager;
+    }
+
+    public boolean run(RequestContext requestContext, Map resultMap)
+    {
+        boolean success = true;
+
+        try
+        {
+            resultMap.put(ACTION, "getpage");
+
+            if (false == checkAccess(requestContext, SecuredResource.VIEW_ACTION))
+            {
+                success = false;
+                resultMap.put(REASON, "Insufficient access to view page");
+                return success;
+            }
+            
+            String filter = requestContext.getRequestParameter(FILTER);            
+                        
+            Page page = requestContext.getPage();
+            
+            resultMap.put(STATUS, "success");
+
+            resultMap.put(PAGE, page);
+
+        } 
+        catch (Exception e)
+        {
+            // Log the exception
+            log.error("exception while getting page", e);
+
+            // Return a failure indicator
+            success = false;
+        }
+
+        return success;
+	}
+    
+        
+}

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/GetPortletsAction.java Fri Dec  2 02:36:53 2005
@@ -15,33 +15,66 @@
  */
 package org.apache.jetspeed.layout.impl;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
+import javax.security.auth.Subject;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jetspeed.ajax.AjaxAction;
 import org.apache.jetspeed.ajax.AjaxBuilder;
-import org.apache.jetspeed.om.page.ContentPage;
-import org.apache.jetspeed.om.page.Fragment;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.om.common.SecuredResource;
+import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
+import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
+import org.apache.jetspeed.page.PageManager;
 import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.search.ParsedObject;
+import org.apache.jetspeed.search.SearchEngine;
+import org.apache.jetspeed.security.PermissionManager;
+import org.apache.jetspeed.security.PortletPermission;
 
 /**
- * Get Portlet portlet placement action
+ * Get Portlets retrieves the portlet list available to the current subject
  *
+ * AJAX Parameters: 
+ *    filter = (optional)filter to lookup portlets using fulltext search
+ *    
  * @author <a>David Gurney</a>
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  * @version $Id: $
  */
 public class GetPortletsAction 
     extends BasePortletAction 
-    implements AjaxAction, AjaxBuilder, Constants 
+    implements AjaxAction, AjaxBuilder, Constants, Comparator
 {
     /** Logger */
     protected Log log = LogFactory.getLog(GetPortletsAction.class);
 
-    public GetPortletsAction(String template, String errorTemplate)
+    private PageManager pageManager = null;
+    private PortletRegistry registry = null;
+    private SearchEngine searchEngine = null;
+    private PermissionManager permissionManager = null;
+    
+    public GetPortletsAction(String template, 
+                             String errorTemplate,
+                             PageManager pageManager,
+                             PortletRegistry registry,
+                             SearchEngine searchEngine,
+                             PermissionManager permissionManager)
     {
         super(template, errorTemplate);
+        this.pageManager = pageManager;
+        this.registry = registry;
+        this.searchEngine = searchEngine;
+        this.permissionManager = permissionManager;
     }
 
     public boolean run(RequestContext requestContext, Map resultMap)
@@ -52,17 +85,20 @@
         {
             resultMap.put(ACTION, "getportlets");
 
-            // Get the fragment information from the page
-            ContentPage a_oPage = requestContext.getPage();
-
-            // David Taylor is working on a method like this
-            // page.getFragmentByEntitlement();
-
-            Fragment a_oRootFragment = a_oPage.getRootFragment();
-
+            if (false == checkAccess(requestContext, SecuredResource.EDIT_ACTION))
+            {
+                success = false;
+                resultMap.put(REASON, "Insufficient access to edit page");
+                return success;
+            }
+            
+            String filter = requestContext.getRequestParameter(FILTER);            
+                        
+            List portlets = retrievePortlets(requestContext, filter);
+            
             resultMap.put(STATUS, "success");
 
-            // resultMap.put(FRAGMENTS, a_oFragments);
+            resultMap.put(PORTLETS, portlets);
 
         } 
         catch (Exception e)
@@ -76,4 +112,109 @@
 
         return success;
 	}
+    
+    protected List retrievePortlets(RequestContext requestContext, String filter)
+    {
+        Iterator portlets = null;
+        List list = new ArrayList();
+        Locale locale = requestContext.getLocale();
+        
+        if (filter == null)
+            portlets = registry.getAllPortletDefinitions().iterator();
+        else
+            portlets = searchEngine.search(filter).getResults().iterator();
+        
+        Subject subject = requestContext.getSubject();
+        
+        while (portlets.hasNext())
+        {
+            PortletDefinitionComposite portlet = null;
+            if (filter == null)
+                portlet = (PortletDefinitionComposite)portlets.next();
+            else
+                portlet = this.getPortletFromParsedObject((ParsedObject)portlets.next());
+            
+            if (portlet == null)
+                continue;
+            
+            MutablePortletApplication muta = 
+                (MutablePortletApplication)portlet.getPortletApplicationDefinition();
+            String appName = muta.getName();
+            if (appName != null && appName.equals("jetspeed-layouts"))
+                continue;                
+            
+            // SECURITY filtering
+            String uniqueName = appName + "::" + portlet.getName();
+            if (subject != null)
+            {
+                if (permissionManager.checkPermission(subject, 
+                    new PortletPermission(portlet.getUniqueName(), 
+                    SecuredResource.VIEW_ACTION, subject )))
+                {
+                    list.add(new PortletInfo(uniqueName, portlet.getDisplayNameText(locale), portlet.getDescriptionText(locale)));
+                }
+            }
+        }            
+        Collections.sort(list, this);
+        return list;
+    }
+    
+    protected PortletDefinitionComposite getPortletFromParsedObject(ParsedObject po)
+    {
+        boolean found = false;
+        String name = "";
+        Map fields = po.getFields();
+        if(fields != null)
+        {
+            Object id = fields.get("ID");
+    
+            if(id != null)
+            {
+                if(id instanceof Collection)
+                {
+                    Collection coll = (Collection)id;
+                    name = (String) coll.iterator().next();
+                }
+                else
+                {
+                    name = (String)id;
+                }
+            }
+            
+            if(po.getType().equals("portlet"))
+            {
+                Object pa = fields.get("portlet_application");
+                String paName = "";
+                if(pa != null)
+                {
+                    if(id instanceof Collection)
+                    {
+                        Collection coll = (Collection)pa;
+                        paName = (String) coll.iterator().next();
+                    }
+                    else
+                    {
+                        paName = (String)pa;
+                    }
+                }
+                name = paName + "::" + name;
+                found = true;
+            }
+        }
+        if (found == false)
+            return null;
+        
+        return registry.getPortletDefinitionByUniqueName(name);
+    }
+    
+    public int compare(Object obj1, Object obj2)
+    {
+        PortletInfo portlet1 = (PortletInfo)obj1;
+        PortletInfo portlet2 = (PortletInfo)obj2;
+        String name1 = portlet1.getName();
+        String name2 = portlet2.getName();
+        name1 = (name1 == null) ? "unknown" : name1;
+        name2 = (name2 == null) ? "unknown" : name2;
+        return name1.compareTo(name2);
+    }
 }

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/MovePortletAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/MovePortletAction.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/MovePortletAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/MovePortletAction.java Fri Dec  2 02:36:53 2005
@@ -24,6 +24,7 @@
 import org.apache.jetspeed.ajax.AjaxBuilder;
 import org.apache.jetspeed.layout.Coordinate;
 import org.apache.jetspeed.layout.PortletPlacementContext;
+import org.apache.jetspeed.om.common.SecuredResource;
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.page.PageManager;
@@ -32,6 +33,15 @@
 /**
  * Move Portlet portlet placement action
  *
+ * AJAX Parameters: 
+ *    id = the fragment id of the portlet to move
+ *    page = (implied in the URL)
+ * Additional Absolute Parameters:  
+ *    row = the new row to move to
+ *    col = the new column to move to
+ * Additional Relative Parameters: (move left, right, up, down)
+ *    none
+ *    
  * @author <a>David Gurney</a>
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  * @version $Id: $
@@ -109,9 +119,16 @@
             { 
                 throw new Exception("portlet id not provided"); 
             }
-
+            
             resultMap.put(PORTLETID, portletId);
 
+            if (false == checkAccess(requestContext, SecuredResource.EDIT_ACTION))
+            {
+                success = false;
+                resultMap.put(REASON, "Insufficient access to edit page");
+                return success;
+            }
+            
             PortletPlacementContext placement = new PortletPlacementContextImpl(requestContext);
             Fragment fragment = placement.getFragmentById(portletId);
             Coordinate returnCoordinate = null;
@@ -149,6 +166,7 @@
 
             // synchronize back to the page layout root fragment
             Page page = placement.syncPageFragments();
+            
             if (pageManager != null)
                 pageManager.updatePage(page);
             
@@ -173,11 +191,12 @@
         {
             // Log the exception
             log.error("exception while adding a portlet", e);
-
+            resultMap.put(REASON, e.toString());
             // Return a failure indicator
             success = false;
         }
 
         return success;
     }
+    
 }

Added: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletInfo.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletInfo.java?rev=351664&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletInfo.java (added)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletInfo.java Fri Dec  2 02:36:53 2005
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.layout.impl;
+
+/**
+ * Portlet Info populated into AJAX XML response per portlet
+ *
+ * @author <a>David Gurney</a>
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class PortletInfo 
+{
+    private String name;
+    private String displayName;
+    private String description;
+    
+    public PortletInfo(String name, String displayName, String description)
+    {
+        this.name = name;
+        this.displayName = displayName;
+        this.description = description;
+    }
+    /**
+     * @return Returns the description.
+     */
+    public String getDescription()
+    {
+        return description;
+    }
+    /**
+     * @return Returns the displayName.
+     */
+    public String getDisplayName()
+    {
+        return displayName;
+    }
+    /**
+     * @return Returns the name.
+     */
+    public String getName()
+    {
+        return name;
+    }
+}

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletPlacementContextImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletPlacementContextImpl.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletPlacementContextImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/PortletPlacementContextImpl.java Fri Dec  2 02:36:53 2005
@@ -323,27 +323,9 @@
 		return column;
 	}
 	
-	public Coordinate add(String portletDefinitionID, Coordinate coordinate) throws PortletPlacementException 
+	public Coordinate add(Fragment fragment, Coordinate coordinate) throws PortletPlacementException 
     {
-//        try
-//        {
-//            Fragment fragment = pageManager.newFragment();
-//            fragment.setType(Fragment.PORTLET);
-//            fragment.setId(generator.getNextPeid());
-//            fragment.setName(portletId);
-//            
-//            Page page = pageManager.getContentPage(pageId);
-//            // WARNING: under construction
-//            // this is prototype and very dependent on a single depth fragment structure            
-//            Fragment root = page.getRootFragment();
-//            root.getFragments().add(fragment);
-//            pageManager.updatePage(page);            
-//        }
-//        catch (Exception e)
-//        {
-//            log.error("failed to add portlet " + portletId + " to page: " + pageId);
-//        }
-		return null;
+        return addInternal(fragment, coordinate);
 	}
 	
 	// Adds an existing fragment to the coordinate position

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/RemovePortletAction.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/RemovePortletAction.java?rev=351664&r1=351663&r2=351664&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/RemovePortletAction.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/layout/impl/RemovePortletAction.java Fri Dec  2 02:36:53 2005
@@ -23,6 +23,7 @@
 import org.apache.jetspeed.ajax.AjaxBuilder;
 import org.apache.jetspeed.layout.Coordinate;
 import org.apache.jetspeed.layout.PortletPlacementContext;
+import org.apache.jetspeed.om.common.SecuredResource;
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.page.PageManager;
@@ -33,6 +34,10 @@
 /**
  * Remove Portlet portlet placement action
  * 
+ * AJAX Parameters: 
+ *    id = the fragment id of the portlet to remove
+ *    page = (implied in the URL)
+ *    
  * @author <a>David Gurney </a>
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
  * @version $Id: $
@@ -76,6 +81,13 @@
 
             resultMap.put(PORTLETID, portletId);
 
+            if (false == checkAccess(requestContext, SecuredResource.EDIT_ACTION))
+            {
+                success = false;
+                resultMap.put(REASON, "Insufficient access to edit page");
+                return success;
+            }
+            
             // Use the Portlet Placement Manager to accomplish the removal
             PortletPlacementContext placement = new PortletPlacementContextImpl(requestContext);
             Fragment fragment = placement.getFragmentById(portletId);
@@ -94,7 +106,7 @@
         {
             // Log the exception
             log.error("exception while adding a portlet", 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