Author: woonsan
Date: Wed Mar 17 10:34:04 2010
New Revision: 924212
URL: http://svn.apache.org/viewvc?rev=924212&view=rev
Log:
JS2-1057: Adding documentation for page management jax-rs service.
Modified:
portals/site/jetspeed/jetspeed-2.2/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
Modified:
portals/site/jetspeed/jetspeed-2.2/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
URL:
http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.2/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml?rev=924212&r1=924211&r2=924212&view=diff
==============================================================================
---
portals/site/jetspeed/jetspeed-2.2/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
(original)
+++
portals/site/jetspeed/jetspeed-2.2/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
Wed Mar 17 10:34:04 2010
@@ -1679,6 +1679,729 @@ With the following request header:
</section>
+<section name='Page Management Service'>
+<p>
+The Page Management Service is a HTTP request-based API, communicating over a
simple REST (Representational State Transfer) protocol,
+providing information and management functionality on portal page nodes such
as pages, folders and links.
+This service is accessed over HTTP via the "/services/pagemanagement" path on
the portal URL:
+<source><![CDATA[
+http://hostname/contextname/services/pagemanagement/
+]]></source>
+</p>
+<p>
+ <em>
+ Node: All operations of this service are allowed only to those who has the
right to edit the target node.
+ Those who has the right to view only will get the HTTP Error 403
Forbidden.
+ </em>
+</p>
+
+<subsection name='Get Node'>
+<table>
+ <tr>
+ <td>Entry path</td>
+ <td>/</td>
+ </tr>
+ <tr>
+ <td>Description</td>
+ <td>Get node based on the type parameter and the path parameter.</td>
+ </tr>
+ <tr>
+ <td>HTTP Method</td>
+ <td>GET</td>
+ </tr>
+ <tr>
+ <td>Parameters</td>
+ <td>
+ <table>
+ <tr>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Required</th>
+ <th>Default value</th>
+ <th>Example value</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>
+ One of the following:
+ <br/>
+ <ul>
+ <li>/.psml</li>
+ <li>/folder</li>
+ <li>/.link</li>
+ </ul>
+ </td>
+ <td>
+ The first path parameter is for the node type:
+ <br/>
+ <ul>
+ <li>.psml : Page node</li>
+ <li>folder : Folder node</li>
+ <li>.link : Link node</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>/default-page.psml</td>
+ <td>
+ The node path to retrieve.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>REST API examples</td>
+ <td>
+<source><![CDATA[
+GET
http://localhost:8080/jetspeed/services/pagemanagement/.psml/default-page.psml?_type=json
+]]></source>
+ </td>
+ </tr>
+ <tr>
+ <td>JSON Response Example</td>
+ <td>
+<source><![CDATA[
+{
+ "id":"/default-page.psml",
+ "name":"default-page.psml",
+ "type":".psml",
+ "path":"/default-page.psml",
+ "title":"Welcome to Jetspeed",
+ "shortTitle":"Welcome to Jetspeed",
+ "hidden":false,
+ "url":"/default-page.psml",
+ "constraintsEnabled":true,
+ "permissionsEnabled":false,
+ "effectiveDefaultLayoutDecorator":"jetspeed",
+ "effectiveDefaultPortletDecorator":"jetspeed",
+ "dirty":false,
+ "metadata":
+ {
+ "fields":[
+ {
+ "name":"title",
+ "value":"Welcome to Jetspeed",
+ "localeString":"en"
+ },
+ {
+ "name":"title",
+ "value":"Bienvenido a Jetspeed 2",
+ "localeString":"es"
+ }
+ ]
+ }
+}
+]]></source>
+
+ </td>
+ </tr>
+ <tr>
+ <td>XML Response Example</td>
+ <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<page>
+ <id>/default-page.psml</id>
+ <name>default-page.psml</name>
+ <type>.psml</type>
+ <path>/default-page.psml</path>
+ <title>Welcome to Jetspeed</title>
+ <shortTitle>Welcome to Jetspeed</shortTitle>
+ <hidden>false</hidden>
+ <url>/default-page.psml</url>
+ <constraintsEnabled>true</constraintsEnabled>
+ <permissionsEnabled>false</permissionsEnabled>
+ <effectiveDefaultLayoutDecorator>jetspeed</effectiveDefaultLayoutDecorator>
+ <effectiveDefaultPortletDecorator>jetspeed</effectiveDefaultPortletDecorator>
+ <dirty>false</dirty>
+ <metadata>
+ <fields>
+ <field>
+ <localeString>fr</localeString>
+ <name>title</name>
+ <value>Bienvenue a Jetspeed</value>
+ </field>
+ <field>
+ <localeString>es</localeString>
+ <name>title</name>
+ <value>Bienvenido a Jetspeed 2</value>
+ </field>
+ </fields>
+ </metadata>
+</page>
+]]></source>
+
+ </td>
+ </tr>
+</table>
+</subsection>
+
+<subsection name='Delete Node'>
+<table>
+ <tr>
+ <td>Entry path</td>
+ <td>/</td>
+ </tr>
+ <tr>
+ <td>Description</td>
+ <td>Delete node based on the type parameter and the path
parameter.</td>
+ </tr>
+ <tr>
+ <td>HTTP Method</td>
+ <td>GET</td>
+ </tr>
+ <tr>
+ <td>Parameters</td>
+ <td>
+ <table>
+ <tr>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Required</th>
+ <th>Default value</th>
+ <th>Example value</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>
+ One of the following:
+ <br/>
+ <ul>
+ <li>/.psml</li>
+ <li>/folder</li>
+ <li>/.link</li>
+ </ul>
+ </td>
+ <td>
+ The first path parameter is for the node type:
+ <br/>
+ <ul>
+ <li>.psml : Page node</li>
+ <li>folder : Folder node</li>
+ <li>.link : Link node</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>/default-page.psml</td>
+ <td>
+ The node path to delete.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>REST API examples</td>
+ <td>
+<source><![CDATA[
+DELETE
http://localhost:8080/jetspeed/services/pagemanagement/.psml/default-page.psml?_type=json
+]]></source>
+ </td>
+ </tr>
+ <tr>
+ <td>JSON Response Example</td>
+ <td>
+<source><![CDATA[
+{
+ "id":"/default-page.psml",
+ "name":"default-page.psml",
+ "type":".psml",
+ "path":"/default-page.psml",
+ "title":"Welcome to Jetspeed",
+ "shortTitle":"Welcome to Jetspeed",
+ "hidden":false,
+ "url":"/default-page.psml",
+ "constraintsEnabled":true,
+ "permissionsEnabled":false,
+ "effectiveDefaultLayoutDecorator":"jetspeed",
+ "effectiveDefaultPortletDecorator":"jetspeed",
+ "dirty":false,
+ "metadata":
+ {
+ "fields":[
+ {
+ "name":"title",
+ "value":"Welcome to Jetspeed",
+ "localeString":"en"
+ },
+ {
+ "name":"title",
+ "value":"Bienvenido a Jetspeed 2",
+ "localeString":"es"
+ }
+ ]
+ }
+}
+]]></source>
+
+ </td>
+ </tr>
+ <tr>
+ <td>XML Response Example</td>
+ <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<page>
+ <id>/default-page.psml</id>
+ <name>default-page.psml</name>
+ <type>.psml</type>
+ <path>/default-page.psml</path>
+ <title>Welcome to Jetspeed</title>
+ <shortTitle>Welcome to Jetspeed</shortTitle>
+ <hidden>false</hidden>
+ <url>/default-page.psml</url>
+ <constraintsEnabled>true</constraintsEnabled>
+ <permissionsEnabled>false</permissionsEnabled>
+ <effectiveDefaultLayoutDecorator>jetspeed</effectiveDefaultLayoutDecorator>
+ <effectiveDefaultPortletDecorator>jetspeed</effectiveDefaultPortletDecorator>
+ <dirty>false</dirty>
+ <metadata>
+ <fields>
+ <field>
+ <localeString>fr</localeString>
+ <name>title</name>
+ <value>Bienvenue a Jetspeed</value>
+ </field>
+ <field>
+ <localeString>es</localeString>
+ <name>title</name>
+ <value>Bienvenido a Jetspeed 2</value>
+ </field>
+ </fields>
+ </metadata>
+</page>
+]]></source>
+
+ </td>
+ </tr>
+</table>
+</subsection>
+
+<subsection name='Copy Node'>
+<table>
+ <tr>
+ <td>Entry path</td>
+ <td>/copy/</td>
+ </tr>
+ <tr>
+ <td>Description</td>
+ <td>Copy node based on the type parameter, the path parameter and the
form request parameters</td>
+ </tr>
+ <tr>
+ <td>HTTP Method</td>
+ <td>GET</td>
+ </tr>
+ <tr>
+ <td>Parameters</td>
+ <td>
+ <table>
+ <tr>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Required</th>
+ <th>Default value</th>
+ <th>Example value</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>
+ One of the following:
+ <br/>
+ <ul>
+ <li>/.psml</li>
+ <li>/folder</li>
+ <li>/.link</li>
+ </ul>
+ </td>
+ <td>
+ The first path parameter is for the node type:
+ <br/>
+ <ul>
+ <li>.psml : Page node</li>
+ <li>folder : Folder node</li>
+ <li>.link : Link node</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>/default-page.psml</td>
+ <td>
+ The source node path to copy
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>target</td>
+ <td>Yes</td>
+ <td></td>
+ <td>/Examples/default-page.psml</td>
+ <td>
+ The target node path to copy
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>deep</td>
+ <td>No</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether copy deeply or not
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>merge</td>
+ <td>Yes</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether copy with merging on the existing
target node or not.
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>owner</td>
+ <td>Yes</td>
+ <td></td>
+ <td>/Examples/default-page.psml</td>
+ <td>
+ The owner name.
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>copyids</td>
+ <td>Yes</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether copy the fragment IDs of pages to the
target node or not.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>REST API examples</td>
+ <td>
+<source><![CDATA[
+POST
http://localhost:8080/jetspeed/services/pagemanagement/copy/.psml/default-page.psml?_type=json
+
+With the following request form parameters:
+ target=/Examples/default-page.psml&deep=true&merge=true©ids=false
+]]></source>
+ </td>
+ </tr>
+ <tr>
+ <td>JSON Response Example</td>
+ <td>
+<source><![CDATA[
+{
+ "id":"/Examples/default-page.psml",
+ "name":"default-page.psml",
+ "type":".psml",
+ "path":"/Examples/default-page.psml",
+ "title":"Welcome to Jetspeed",
+ "shortTitle":"Welcome to Jetspeed",
+ "hidden":false,
+ "url":"/Examples/default-page.psml",
+ "constraintsEnabled":true,
+ "permissionsEnabled":false,
+ "effectiveDefaultLayoutDecorator":"jetspeed",
+ "effectiveDefaultPortletDecorator":"jetspeed",
+ "dirty":false,
+ "metadata":
+ {
+ "fields":[
+ {
+ "name":"title",
+ "value":"Welcome to Jetspeed",
+ "localeString":"en"
+ },
+ {
+ "name":"title",
+ "value":"Bienvenido a Jetspeed 2",
+ "localeString":"es"
+ }
+ ]
+ }
+}
+]]></source>
+
+ </td>
+ </tr>
+ <tr>
+ <td>XML Response Example</td>
+ <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<page>
+ <id>/Examples/default-page.psml</id>
+ <name>default-page.psml</name>
+ <type>.psml</type>
+ <path>/Examples/default-page.psml</path>
+ <title>Welcome to Jetspeed</title>
+ <shortTitle>Welcome to Jetspeed</shortTitle>
+ <hidden>false</hidden>
+ <url>/Examples/default-page.psml</url>
+ <constraintsEnabled>true</constraintsEnabled>
+ <permissionsEnabled>false</permissionsEnabled>
+ <effectiveDefaultLayoutDecorator>jetspeed</effectiveDefaultLayoutDecorator>
+ <effectiveDefaultPortletDecorator>jetspeed</effectiveDefaultPortletDecorator>
+ <dirty>false</dirty>
+ <metadata>
+ <fields>
+ <field>
+ <localeString>fr</localeString>
+ <name>title</name>
+ <value>Bienvenue a Jetspeed</value>
+ </field>
+ <field>
+ <localeString>es</localeString>
+ <name>title</name>
+ <value>Bienvenido a Jetspeed 2</value>
+ </field>
+ </fields>
+ </metadata>
+</page>
+]]></source>
+
+ </td>
+ </tr>
+</table>
+</subsection>
+
+<subsection name='Move Node'>
+<table>
+ <tr>
+ <td>Entry path</td>
+ <td>/move/</td>
+ </tr>
+ <tr>
+ <td>Description</td>
+ <td>Move node based on the type parameter, the path parameter and the
form request parameters</td>
+ </tr>
+ <tr>
+ <td>HTTP Method</td>
+ <td>GET</td>
+ </tr>
+ <tr>
+ <td>Parameters</td>
+ <td>
+ <table>
+ <tr>
+ <th>Type</th>
+ <th>Name</th>
+ <th>Required</th>
+ <th>Default value</th>
+ <th>Example value</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>
+ One of the following:
+ <br/>
+ <ul>
+ <li>/.psml</li>
+ <li>/folder</li>
+ <li>/.link</li>
+ </ul>
+ </td>
+ <td>
+ The first path parameter is for the node type:
+ <br/>
+ <ul>
+ <li>.psml : Page node</li>
+ <li>folder : Folder node</li>
+ <li>.link : Link node</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>PATH</td>
+ <td></td>
+ <td>Yes</td>
+ <td></td>
+ <td>/default-page.psml</td>
+ <td>
+ The source node path to move
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>target</td>
+ <td>Yes</td>
+ <td></td>
+ <td>/Examples/default-page.psml</td>
+ <td>
+ The target node path to move
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>deep</td>
+ <td>No</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether move deeply or not
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>merge</td>
+ <td>Yes</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether move with merging on the existing
target node or not.
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>owner</td>
+ <td>Yes</td>
+ <td></td>
+ <td>/Examples/default-page.psml</td>
+ <td>
+ The owner name.
+ </td>
+ </tr>
+ <tr>
+ <td>FORM</td>
+ <td>copyids</td>
+ <td>Yes</td>
+ <td></td>
+ <td>true or false</td>
+ <td>
+ The flag whether move the fragment IDs of pages to the
target node or not.
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>REST API examples</td>
+ <td>
+<source><![CDATA[
+POST
http://localhost:8080/jetspeed/services/pagemanagement/move/.psml/default-page.psml?_type=json
+
+With the following request form parameters:
+ target=/Examples/default-page.psml&deep=true&merge=true©ids=false
+]]></source>
+ </td>
+ </tr>
+ <tr>
+ <td>JSON Response Example</td>
+ <td>
+<source><![CDATA[
+{
+ "id":"/Examples/default-page.psml",
+ "name":"default-page.psml",
+ "type":".psml",
+ "path":"/Examples/default-page.psml",
+ "title":"Welcome to Jetspeed",
+ "shortTitle":"Welcome to Jetspeed",
+ "hidden":false,
+ "url":"/Examples/default-page.psml",
+ "constraintsEnabled":true,
+ "permissionsEnabled":false,
+ "effectiveDefaultLayoutDecorator":"jetspeed",
+ "effectiveDefaultPortletDecorator":"jetspeed",
+ "dirty":false,
+ "metadata":
+ {
+ "fields":[
+ {
+ "name":"title",
+ "value":"Welcome to Jetspeed",
+ "localeString":"en"
+ },
+ {
+ "name":"title",
+ "value":"Bienvenido a Jetspeed 2",
+ "localeString":"es"
+ }
+ ]
+ }
+}
+]]></source>
+
+ </td>
+ </tr>
+ <tr>
+ <td>XML Response Example</td>
+ <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<page>
+ <id>/Examples/default-page.psml</id>
+ <name>default-page.psml</name>
+ <type>.psml</type>
+ <path>/Examples/default-page.psml</path>
+ <title>Welcome to Jetspeed</title>
+ <shortTitle>Welcome to Jetspeed</shortTitle>
+ <hidden>false</hidden>
+ <url>/Examples/default-page.psml</url>
+ <constraintsEnabled>true</constraintsEnabled>
+ <permissionsEnabled>false</permissionsEnabled>
+ <effectiveDefaultLayoutDecorator>jetspeed</effectiveDefaultLayoutDecorator>
+ <effectiveDefaultPortletDecorator>jetspeed</effectiveDefaultPortletDecorator>
+ <dirty>false</dirty>
+ <metadata>
+ <fields>
+ <field>
+ <localeString>fr</localeString>
+ <name>title</name>
+ <value>Bienvenue a Jetspeed</value>
+ </field>
+ <field>
+ <localeString>es</localeString>
+ <name>title</name>
+ <value>Bienvenido a Jetspeed 2</value>
+ </field>
+ </fields>
+ </metadata>
+</page>
+]]></source>
+
+ </td>
+ </tr>
+</table>
+</subsection>
+
+</section>
<section name='Spring Assembly'>
<p>
The Jetspeed REST Services are configured in the Spring Assembly.
@@ -1686,10 +2409,9 @@ Here is the core part of the Spring Asse
</p>
<source><![CDATA[
<!--
- The internal server factory.
- Each JAX-RS service component is registered by "resourceProvider" property.
+ The internal server factory.
+ Each JAX-RS service component is registered by "resourceProvider"
property.
-->
-
<bean id="cxfJaxrsServerFactoryBean"
class="org.apache.cxf.jaxrs.JAXRSServerFactoryBean">
<meta key="j2:cat" value="default" />
<property name="address" value="/" />
@@ -1701,19 +2423,18 @@ Here is the core part of the Spring Asse
</property>
<property name="resourceProviders">
<list>
-
- <!-- PortletRegistryService component reference -->
<bean class="org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider">
<meta key="j2:cat" value="default" />
<constructor-arg ref="jaxrsPortletRegistryService" />
</bean>
-
- <!-- PageLayoutService component reference -->
<bean class="org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider">
<meta key="j2:cat" value="default" />
<constructor-arg ref="jaxrsPageLayoutService" />
</bean>
-
+ <bean class="org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider">
+ <meta key="j2:cat" value="default" />
+ <constructor-arg ref="jaxrsPageManagementService" />
+ </bean>
</list>
</property>
</bean>
@@ -1726,13 +2447,19 @@ Here is the core part of the Spring Asse
<constructor-arg ref="org.apache.jetspeed.search.SearchEngine" />
</bean>
- <!-- Portal Page Management JAX-RS Service -->
+ <!-- Portal Page Layout Management JAX-RS Service -->
<bean id="jaxrsPageLayoutService"
class="org.apache.jetspeed.services.rest.PageLayoutService">
<meta key="j2:cat" value="default" />
<constructor-arg ref="org.apache.jetspeed.layout.PageLayoutComponent" />
<constructor-arg
ref="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
<constructor-arg ref="PortletActionSecurityBehavior" />
</bean>
+
+ <!-- Portal Page Management JAX-RS Service -->
+ <bean id="jaxrsPageManagementService"
class="org.apache.jetspeed.services.rest.PageManagementService">
+ <meta key="j2:cat" value="default" />
+ <constructor-arg ref="org.apache.jetspeed.page.PageManager" />
+ </bean>
]]></source>
</section>