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/08 21:52:30 UTC

svn commit: r355205 - /portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml

Author: taylor
Date: Thu Dec  8 12:52:29 2005
New Revision: 355205

URL: http://svn.apache.org/viewcvs?rev=355205&view=rev
Log:
ajax api docs

Added:
    portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml

Added: portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml?rev=355205&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml (added)
+++ portals/jetspeed-2/trunk/xdocs/guides/guide-ajax-api.xml Thu Dec  8 12:52:29 2005
@@ -0,0 +1,543 @@
+<?xml version="1.0"?>
+<!--
+Copyright 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.
+-->
+<document>
+  <properties>
+    <title>AJAX XML API</title>
+    <subtitle>Documentation for Jetspeed-2 AJAX XML API</subtitle>
+    <authors>
+      <person name="David Sean Taylor" email="taylor@apache.org"/>
+    </authors>
+  </properties>
+  <body>
+<section name="AJAX XML API Overview">
+<p>
+The Jetspeed XML AJAX API is an XML-based API provided to AJAX clients for making
+asynchronous requests to Jetspeed-2 services. </p>
+<p>
+Typical use cases:
+</p>
+<ul>
+    <li><b>Page Customization and Portlet Placement</b> - To move, copy, add, or remove portlets on a page</li>
+    <li><b>Layout Selection</b> - change the layout (number of rows and columns, size of columns) on a page</li>
+    <li><b>Theme and Decorator Selection</b> - change the page theme and portlet decorators on a page.</li>
+    <li><b>Portlet Selectors</b> - provide a select-list of portlets to the end user</li>
+    <li><b>Security Configuration</b> - configure the security constraints or policy on a resource (page, portlet, folder, link, fragment), or portal wide</li>
+    <li><b>Menu Configuration</b> - create and edit menus for the Jetspeed Site</li>			
+	<li><b>General Administration</b> - all use cases for general administration have not yet been explored.</li>
+</ul>
+<subsection name='Secured Access'>
+<p>
+All AJAX XML API requests run through
+a standard Jetspeed <a href='guide-pipeline.html'>Pipeline</a> request. This means that you can configure your AJAX
+request with the usual array of Jetspeed components. The default AJAX pipeline secures
+access to all requests. Each AJAX action may have its own security constraints. All
+requests made to a page will use the declarative security constraints configured for that page.
+AJAX request actions are enforced under edit or view mode, depending on the nature of the action.
+</p>
+</subsection>		
+</section>	  
+<section name='API'>
+<p>
+The AJAX XML API is simply a HTTP request-based API, communicating over a simple REST (Representational State Transfer) protocol.	
+The API is accessed over HTTP via the "ajaxapi" servlet path on the portal URL:
+<source><![CDATA[
+http://hostname/contextname/ajaxapi
+]]></source>
+</p>
+<subsection name='Request Parameters and the Page'>	
+<p>Request Parameters specify the requested API action, and additional API parameters.
+The page that a request is referencing is implied in the HTTP URL.
+Thus if we are making a request to modify a page, the page is specified in the HTTP URL:
+<source><![CDATA[
+http://localhost:8080/jetspeed/ajaxapi/Public/db-browser.psml
+]]></source>
+The page location algorithm using standard Jetspeed Profiling rules to locate the page.
+A page is actually not required in the URL, since the <a href='guide-profiler.html'>Jetspeed Profiler</a> will locate the page
+for you. Example:
+<source><![CDATA[
+http://localhost:8080/jetspeed/ajaxapi
+]]></source>
+goes to the default page for the current user.
+</p>	
+<p>Request Parameters are specific to each API. One request parameter, the "action" parameter,
+ is almost always required, (except in the default case). The default action is "action=getpage"
+which returns an XML representation of the profile-located page in <a href='guide-psml.html'>PSML</a>. (PSML is an XML format).
+See the table below for specific examples of request parameters.
+</p>		
+<p>Here are the APIs currently available:
+</p>		
+</subsection>
+<subsection name='Get Page'>
+<table>	
+    <tr>
+        <td>API:</td>
+        <td>getpage</td>
+    </tr>
+    <tr>
+        <td>Component:</td>
+        <td>AjaxGetPage</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Get Page retrieves a page from the Page Manager store in <a href='guide-psml.html'>PSML</a> format.			
+		</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>getportlets (optional, this is the default action)</td>				
+			</tr>			
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi/Public/content.psml
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+<status>success</status>
+<action>getpage</action>
+  <page hidden="false">
+  <defaults layout-decorator="tigris" portlet-decorator="tigris"/>
+  <name>public.psml</name>
+  <path>/Public/public.psml</path>
+  <title>Public Share</title>
+  <short-title>Public Share</short-title>
+  <metadata name="title" xml:lang="es">Carpeta compartida</metadata>
+  <fragment id="ps-1000" type="layout" name="jetspeed-layouts::VelocityTwoColumns" decorator="">
+    <fragment id="ps-1001" type="portlet" name="rss::RSS" decorator="">
+      <property name="row" value="0"/>
+      <property name="column" value="0"/>
+    </fragment>
+	<fragment id="ps-1002" type="portlet" name="demo::BookmarkPortlet" decorator="">
+      <property name="row" value="1"/>
+      <property name="column" value="1"/>
+    </fragment>
+	<fragment id="ps-1003" type="portlet" name="jsf-demo::CalendarPortlet" decorator="">
+      <property name="row" value="0"/>
+      <property name="column" value="1"/>
+    </fragment>
+	<fragment id="P-1080bff9b03-10000" type="portlet" name="jsf-demo::CalendarPortlet" decorator="">
+      <property name="row" value="1"/>
+      <property name="column" value="0"/>
+    </fragment>
+  </fragment>
+</page>
+</js>
+]]></source>
+			
+		</td>    
+	</tr>
+</table>
+</subsection>
+<subsection name='Move Absolute'>
+<table>		
+    <tr>
+        <td>API:</td>
+        <td>moveabs</td>
+    </tr>
+    <tr>
+        <td>Component:</td>
+        <td>AjaxMovePortletAbsolute</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Move a portlet on a page to an absolute position specified in the row and col request parameters.</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>moveabs</td>				
+			</tr>			
+			<tr>
+				<td>id</td>
+				<td>the portlet PSML fragment id of the portlet to be moved</td>				
+			</tr>			
+			<tr>
+				<td>row</td>
+				<td>the absolute new row location to place the portlet fragment (zero based)</td>				
+			</tr>						
+			<tr>
+				<td>col</td>
+				<td>the absolute new column location to place the portlet fragment (zero based)</td>				
+			</tr>									
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi/Public/public.psml?action=moveabs&id=ps-1003&row=0&col=1			
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+   <status>success</status>
+    <action>moveabs</action>
+    <id>ps-1003</id>
+	<old_position>
+      <col>1</col>
+      <row>1</row>
+    </old_position>
+	<new_position>
+      <col>1</col>
+      <row>0</row>
+    </new_position>
+</js>						
+]]></source>
+			
+		</td>    
+	</tr>
+</table>
+</subsection>
+<subsection name='Move'>
+<table>		
+    <tr>
+        <td>APIs:</td>
+        <td>moveleft, moveright, moveup, movedown</td>
+    </tr>
+    <tr>
+        <td>Components:</td>
+        <td>AjaxMovePortletLeft, AjaxMovePortletRight, AjaxMovePortletUp, AjaxMoveDown</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Move a portlet on a page relatively one position, based on the action.</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>moveleft, moveright, moveup, movedown</td>				
+			</tr>			
+			<tr>
+				<td>id</td>
+				<td>the portlet PSML fragment id of the portlet to be moved</td>				
+			</tr>			
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi/Public/public.psml?action=movedown&id=ps-1003
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+   <status>success</status>
+    <action>movedown</action>
+    <id>ps-1003</id>
+	<old_position>
+      <col>1</col>
+      <row>0</row>
+    </old_position>
+	<new_position>
+      <col>1</col>
+      <row>1</row>
+    </new_position>
+</js>						
+]]></source>
+			
+		</td>    
+	</tr>
+
+</table>
+</subsection>
+<subsection name='Add Portlet'>
+<table>			
+    <tr>
+        <td>API:</td>
+        <td>add</td>
+    </tr>
+    <tr>
+        <td>Component:</td>
+        <td>AjaxAddPortlet</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Adds a new portlet to the current page. The portlet can be added at a specified row and column.
+		    If either the row or column or not specified, defaults to zero respectively.</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>add</td>				
+			</tr>			
+			<tr>
+				<td>id</td>
+				<td>The portlet full name to be placed on the page, using Jetspeed Portlet Naming (PortletApplicationName::PortletName)</td>				
+			</tr>			
+			<tr>
+				<td>row</td>
+				<td>optional: the absolute new row location to place the new portlet fragment (zero based)</td>				
+			</tr>						
+			<tr>
+				<td>col</td>
+				<td>optional: the absolute new column location to place the new portlet fragment (zero based)</td>				
+			</tr>									
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi/Public/public.psml?action=add&id=jsf-demo::CalendarPortlet
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+  <status>success</status>
+  <action>add</action>
+  <id>jsf-demo::CalendarPortlet</id>
+  <new_position>
+    <col>0</col>
+    <row>0</row>
+  </new_position>
+</js>
+]]></source>
+			
+		</td>    
+	</tr>
+</table>
+</subsection>
+<subsection name='Remove Portlet'>
+<table>		
+
+    <tr>
+        <td>API:</td>
+        <td>remove</td>
+    </tr>
+    <tr>
+        <td>Component:</td>
+        <td>AjaxRemovePortlet</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Removes a new portlet from the current page.</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>remove</td>				
+			</tr>			
+			<tr>
+				<td>id</td>
+				<td>the portlet PSML fragment id of the portlet to be removed</td>				
+			</tr>			
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi/Public/public.psml?action=remove&id=ps-1003
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+  <status>success</status>
+  <action>remove</action>
+  <id>jsf-demo::CalendarPortlet</id>
+  <new_position>
+    <col>0</col>
+    <row>0</row>
+  </new_position>
+</js>
+]]></source>
+			
+		</td>    
+	</tr>
+</table>
+</subsection>
+<subsection name='Get Portlets'>
+<table>		
+
+    <tr>
+        <td>API:</td>
+        <td>getportlets</td>
+    </tr>
+    <tr>
+        <td>Component:</td>
+        <td>AjaxGetPortlets</td>
+    </tr>
+    <tr>
+        <td>Description:</td>
+        <td>Get Portlets retrieves the (sorted) portlet list available to the current subject, filtered
+		    the portlet list, and returning portlets which the current subject may view. 
+			The Jetspeed (JAAS) security policy enforces this filtering. Portlets are returned 
+		    in XML format, with name, displayName, and description for each portlet.</td>
+    </tr>
+    <tr>
+        <td>Parameters:</td>
+        <table>
+			<tr>
+				<td>page</td>
+				<td>implied in the URL</td>				
+			</tr>
+			<tr>
+				<td>action</td>
+				<td>getportlets</td>				
+			</tr>			
+			<tr>
+				<td>filter</td>
+				<td>not yet implemented. A query filter to be defined.</td>				
+			</tr>			
+			
+		</table>
+    </tr>
+    <tr>
+        <td>API example:</td>
+		<td>
+<source><![CDATA[			
+http://localhost:8080/jetspeed/ajaxapi?action=getportlets
+]]></source>			
+		</td>    
+	</tr>
+    <tr>
+        <td>XML Response:</td>
+		<td>
+<source><![CDATA[
+<js>
+<status>success</status>
+<action>getportlets</action>
+-
+	<portlets>
+<portlet name="demo::AttributeScopePortlet" displayName="Attribute Scope Demo" description="$portlet.Description">
+        </portlet>
+<portlet name="demo::BookmarkPortlet" displayName="Bookmark Portlet" description="Bookmark Portlet">
+        </portlet>
+<portlet name="demo::BookmarkPortletForXHTMLBasic" displayName="Bookmark Portlet for XHTML Basic" description="Bookmark Portlet for XHTML Basic">
+        </portlet>
+<portlet name="demo::CSSDemoPortlet" displayName="CSS Demo Portlet" description="$portlet.Description">
+        </portlet>
+....
+<portlet name="rss::RSS" displayName="RSS Portlet" description="RSS Portlet">
+        </portlet>
+<portlet name="rss::RomeRSS" displayName="Rome RSS Portlet" description="Rome RSS Portlet">
+        </portlet>
+</portlets>
+</js>
+]]></source>
+			
+		</td>    
+	</tr>				
+</table>        
+</subsection>	
+</section>
+
+<section name='Spring Assembly'>
+<p>
+The <code>AjaxRequestService</code>	is a Spring component that handles AJAX requests.
+It is hooked into the AJAX <a href='guide-pipeline.html'>Pipeline</a> for special processing
+of AJAX request. Here is the Spring Assembly. Each API is configured in the Ajax Service.
+</p>
+<source><![CDATA[	
+<bean id="AjaxRequestService" class="org.apache.jetspeed.ajax.AjaxRequestServiceImpl">
+    <constructor-arg index="0">
+        <map>
+            <entry key="moveabs">
+                <ref bean="AjaxMovePortletAbsolute"/>
+            </entry>
+            <entry key="moveleft">
+                <ref bean="AjaxMovePortletLeft"/>
+            </entry>
+            <entry key="moveright">
+                <ref bean="AjaxMovePortletRight"/>
+            </entry>
+            <entry key="moveup">
+                <ref bean="AjaxMovePortletUp"/>
+            </entry>
+            <entry key="movedown">
+                <ref bean="AjaxMovePortletDown"/>
+            </entry>
+            <entry key="add">
+                <ref bean="AjaxAddPortlet"/>
+            </entry>
+            <entry key="remove">
+                <ref bean="AjaxRemovePortlet"/>
+            </entry>
+            <entry key="getportlets">
+                <ref bean="AjaxGetPortlets"/>
+            </entry>
+            <entry key="getpage">
+                <ref bean="AjaxGetPage"/>
+            </entry>
+        </map>
+    </constructor-arg>
+    <constructor-arg index="1">
+        <ref bean="AjaxVelocityEngine"/>
+    </constructor-arg>
+</bean>
+]]></source>
+		
+</section>	
+</body>
+</document>
+



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