Added: 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
URL: 
http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml?rev=1691449&view=auto
==============================================================================
--- 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
 (added)
+++ 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-rest-api.xml
 Thu Jul 16 21:01:09 2015
@@ -0,0 +1,2719 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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>REST API</title>
+    <subtitle>Documentation for Jetspeed REST API</subtitle>
+    <authors>
+      <person name="Woonsan Ko" email="[email protected]"/>
+    </authors>
+  </properties>
+  <body>
+<section name="Jetspeed REST API Overview">
+<p>
+The Jetspeed REST API is an RESTful web services for clients (including AJAX 
clients) for making HTTP requests to Jetspeed services.
+</p>
+<p>
+The URLs for the Jetspeed REST API starts with the following:
+<source><![CDATA[
+http://hostname/contextname/services/
+]]></source>
+</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 Jetspeed REST API requests run through
+a standard Jetspeed <a href='guide-pipeline.html'>Pipeline</a> request. This 
means that you can configure your web
+request with the usual array of Jetspeed components. The default REST services 
pipeline secures
+access to all requests. Each service may have its own security constraints. All
+requests made to a page will use the declarative security constraints 
configured for that page.
+REST request actions are enforced under edit or view mode, depending on the 
nature of the action.
+</p>
+</subsection>
+<subsection name='Flexible Message Media Types for Message Producers and 
Consumers'>
+<p>
+All Jetspeed REST API support dual Message Media Types for Message producers 
and consumers: 'application/json' and 'application/xml'
+with help of the underlying <a href="http://cxf.apache.org";>Apache CXF</a> 
JAX-RS Server.
+Typically, web client applications can use JSON marshaling/unmarshaling by 
adding '_type=json' parameter in the request URLs.
+If the parameter is '_type=xml', then the messages are marshaled/unmarshaled 
as XML messages.
+If the '_type' parameter is not set by the client, the Jetspeed REST API read 
the 'Accept' HTTP request header to decide
+which is proper for the web client. Please see the documents of Apache CXF for 
details.
+</p>
+</subsection>       
+<subsection name='WADL (Web Application Description Language) Support'>
+<p>
+You can retrieve <a href="http://www.w3.org/Submission/wadl/";>WADL</a> 
description for each service simply by adding '?_wadl' query string.
+Apache CXF JAX-RS server, on which Jetspeed REST API depends, generates the 
WADL description for the service automatically.
+For example, you can request the following URL for 'Get Portlet Application' 
service of 'Portlet Registry Service'.
+<source><![CDATA[
+GET 
http://localhost:8080/jetspeed/services/portletregistry/application/demo/?_wadl
+]]></source>
+</p>
+</subsection>       
+</section>       
+
+<section name='Portlet Registry Service'>
+<p>
+The Portlet Registry Service is a HTTP request-based API, communicating over a 
simple REST (Representational State Transfer) protocol,
+providing information and management functionality on portlet applications and 
portlet definitions.
+This service is accessed over HTTP via the "/services/portletregistry" path on 
the portal URL:
+<source><![CDATA[
+http://hostname/contextname/services/portletregistry/
+]]></source>
+</p>
+
+<subsection name='Get Portlet Applications'>
+<table>        
+    <tr>
+        <td>Entry path</td>
+        <td>/application/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Get portlet applications based on the path parameter or search 
query 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>No</td>
+                    <td></td>
+                    <td>/demo/</td>
+                    <td>
+                        Portlet application name.
+                        If the portlet application name path parameter is not 
provided, then
+                        all portlet applications are retrieved.
+                    </td>
+                       </tr>                   
+                <tr>
+                    <td>QUERY</td>
+                    <td>query</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>demo</td>
+                    <td>
+                        Search query string to filter the results.
+                        If you want to use multiple terms for the search 
query, you need to separate each teram by ' | '.
+                        Because the URI should be encoded, the URI query value 
can be like 'demo%20%7C%20webcontent' when you try to
+                        use query with two terms, 'demo' and 'webcontent'.
+                    </td>                    
+                </tr>           
+                <tr>
+                    <td>QUERY</td>
+                    <td>begin</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>
+                      The begin index of the page to be selected from the 
result.
+                      If the value is -1, then it chooses the search result 
from the first index inclusively. 
+                    </td>
+                </tr>           
+                <tr>
+                    <td>QUERY</td>
+                    <td>max</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>10</td>
+                    <td>
+                      The maximum page size to be selected from the result.
+                      If the value is -1, then it chooses the search result to 
the last index inclusively.
+                    </td>
+                </tr>           
+               </table>
+        </td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+               <td>
+<source><![CDATA[
+GET 
http://localhost:8080/jetspeed/services/portletregistry/application/demo/?_type=json
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/application/?_type=json&query=demo&begin=0&max=10
+]]></source>                   
+               </td>    
+       </tr>
+    <tr>
+        <td>JSON Response Example</td>
+               <td>
+<source><![CDATA[
+{
+  "beginIndex":-1,
+  "totalSize":1,
+  "applications":[
+    {
+      "name":"demo",
+      "contextPath":"/demo",
+      "applicationType":0,
+      "defaultNamespace":"",
+      "revision":2,
+      "checksum":2832348922,
+      "displayNames":[
+        {
+          "value":"Demoportlets",
+          "lang":"en",
+          "localeString":"en"
+        }
+      ],
+      "descriptions":[
+        {
+          "value":"Demo Portlets Applications",
+          "lang":"en",
+          "localeString":"en"
+        }
+      ],
+      "metadata":
+        {
+          "fields":[
+            {
+              "name":"title",
+              "value":"Title 1",
+              "localeString":"en"
+            },
+            {
+              "name":"title",
+              "value":"Eng Title",
+              "localeString":"en"
+            }
+          ]
+        },
+      "containerRuntimeOptions":[]
+    }
+  ]
+}
+]]></source>
+                       
+               </td>    
+       </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<data>
+  <beginIndex>-1</beginIndex>
+  <totalSize>1</totalSize>
+  <applications>
+    <application>
+      <applicationType>0</applicationType>
+      <checksum>2832348922</checksum>
+      <containerRuntimeOptions/>
+      <contextPath>/demo</contextPath>
+      <defaultNamespace/>
+      <descriptions>
+        <description>
+          <lang>en</lang>
+          <localeString>en</localeString>
+          <value>Demo Portlets Applications</value>
+        </description>
+      </descriptions>
+      <displayNames>
+        <displayName>
+          <lang>en</lang>
+          <localeString>en</localeString>
+          <value>Demoportlets</value>
+        </displayName>
+      </displayNames>
+      <metadata>
+        <fields>
+          <field>
+            <localeString>en</localeString>
+            <name>title</name>
+            <value>Title 1</value>
+          </field>
+          <field>
+            <localeString>en</localeString>
+            <name>title</name>
+            <value>Eng Title</value>
+          </field>
+        </fields>
+      </metadata>
+      <name>demo</name>
+      <revision>2</revision>
+    </application>
+  </applications>
+</data>
+]]></source>
+            
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+
+<subsection name='Get Portlet Definitions'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/definition/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Get portlet definitions based on the path parameter or query 
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>No</td>
+                    <td></td>
+                    <td>
+                      /demo/
+                      <br/>or<br/>
+                      /demo/PickANumberPortlet/
+                    </td>
+                    <td>
+                        Portlet application name (and possibly followed by 
portlet definition name).
+                        If the portlet application name and portlet definition 
name path parameters are not provided, then
+                        all portlet definitions are retrieved.
+                        Also, if the portlet application name is provided but 
portlet definition name is not provided,
+                        then all protlet definitions of the portlet 
application are retrieved.
+                    </td>
+                </tr>           
+                <tr>
+                    <td>QUERY</td>
+                    <td>query</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>admin | management</td>
+                    <td>
+                        Search query string to filter the results.
+                        If you want to use multiple terms for the search 
query, you need to separate each teram by ' | '.
+                        Because the URI should be encoded, the URI query value 
can be like 'admin%20%7C%20management' when you try to
+                        use query with two terms, 'admin' and 'management'.
+                    </td>
+                </tr>           
+                <tr>
+                    <td>QUERY</td>
+                    <td>begin</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>
+                      The begin index of the page to be selected from the 
result.
+                      If the value is -1, then it chooses the search result 
from the first index inclusively. 
+                    </td>
+                </tr>           
+                <tr>
+                    <td>QUERY</td>
+                    <td>max</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>10</td>
+                    <td>
+                      The maximum page size to be selected from the result.
+                      If the value is -1, then it chooses the search result to 
the last index inclusively.
+                    </td>
+                </tr>           
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[           
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/?_type=json
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/?_type=json&begin=0&max=5
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/?_type=json&begin=0&max=5&query=admin%20%7C%20management
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/demo/?_type=json
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/demo/?_type=json&begin=0&max=5
+
+GET 
http://localhost:8080/jetspeed/services/portletregistry/definition/demo/PickANumberPortlet/?_type=json
+]]></source>            
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "beginIndex":-1,
+  "totalSize":1,
+  "definitions":[
+    {
+      "uniqueName":"demo::PickANumberPortlet",
+      "portletName":"PickANumberPortlet",
+      "applicationName":"demo",
+      "portletIcon":"applications-games.png",
+      "portletInfo":
+        {
+          "title":"Pick a Number",
+          "keywords":"fun,game,pick"
+        },
+      "displayNames":[
+        {
+          "value":"Pick a number game",
+          "lang":"en",
+          "localeString":"en"
+        }
+      ],
+      "descriptions":[
+        {
+          "value":"This portlet runs the popular 'Pick A Number' guessing 
game. The goal is to guess, in the least number of guesses, a number between 
[1..{Range}]",
+          "lang":"en",
+          "localeString":"en"
+        }
+      ],
+      "supports":[
+        {
+          "mimeType":"text/html",
+          "windowStates":[],
+          
"portletModes":["view","help","edit","about","edit_defaults","preview","print"]
+        }
+      ],
+      "languages":[
+        {
+          "localeString":"en",
+          "title":"Pick a Number",
+          "keywords":"fun,game,pick"
+        },
+        {
+          "localeString":"fr",
+          "title":"Pick a Number",
+          "keywords":"fun,game,pick"
+        },
+        {
+          "localeString":"ja",
+          "title":"数当てゲーム",
+          "keywords":"fun,game,pick"
+        }
+      ],
+      "metadata":
+        {
+          "fields":[
+            {
+              "name":"title",
+              "value":"Pick a Number",
+              "localeString":"en"
+            },
+            {
+              "name":"creator",
+              "value":"J2 Team",
+              "localeString":"en"
+            }
+          ]
+        },
+      "containerRuntimeOptions":[],
+      "initParams":[
+        {
+          "paramName":"ViewPage",
+          "paramValue":"/WEB-INF/demo/simple/PickANumber.jsp",
+          "descriptions":[]
+        },
+        {
+          "paramName":"HelpPage",
+          "paramValue":"/WEB-INF/demo/simple/PickANumberHelp.jsp",
+          "descriptions":[]
+        },
+        {
+          "paramName":"EditPage",
+          "paramValue":"/WEB-INF/demo/simple/PickANumberEdit.jsp",
+          "descriptions":[]
+        },
+        {
+          "paramName":"portlet-icon",
+          "paramValue":"applications-games.png",
+          "descriptions":[]
+        }
+      ]
+    }
+  ]
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<data>
+  <beginIndex>-1</beginIndex>
+  <totalSize>1</totalSize>
+  <definitions>
+    <definition>
+      <applicationName>demo</applicationName>
+      <containerRuntimeOptions/>
+      <descriptions>
+        <description>
+          <lang>en</lang>
+          <localeString>en</localeString>
+          <value>
+            This portlet runs the popular 'Pick A Number' guessing game. The 
goal is to guess, in the least number of guesses, a number between [1..{Range}]
+          </value>
+        </description>
+      </descriptions>
+      <displayNames>
+        <displayName>
+          <lang>en</lang>
+          <localeString>en</localeString>
+          <value>Pick a number game</value>
+        </displayName>
+      </displayNames>
+      <initParams>
+        <initParam>
+          <descriptions/>
+          <paramName>ViewPage</paramName>
+          <paramValue>/WEB-INF/demo/simple/PickANumber.jsp</paramValue>
+        </initParam>
+        <initParam>
+          <descriptions/>
+          <paramName>HelpPage</paramName>
+          <paramValue>/WEB-INF/demo/simple/PickANumberHelp.jsp</paramValue>
+        </initParam>
+        <initParam>
+          <descriptions/>
+          <paramName>EditPage</paramName>
+          <paramValue>/WEB-INF/demo/simple/PickANumberEdit.jsp</paramValue>
+        </initParam>
+        <initParam>
+          <descriptions/>
+          <paramName>portlet-icon</paramName>
+          <paramValue>applications-games.png</paramValue>
+        </initParam>
+      </initParams>
+      <languages>
+        <language>
+          <keywords>fun,game,pick</keywords>
+          <title>Pick a Number</title>
+          <localeString>en</localeString>
+        </language>
+        <language>
+          <keywords>fun,game,pick</keywords>
+          <title>Pick a Number</title>
+          <localeString>fr</localeString>
+        </language>
+        <language>
+          <keywords>fun,game,pick</keywords>
+          <title>数当てゲーム</title>
+          <localeString>ja</localeString>
+        </language>
+      </languages>
+      <metadata>
+        <fields>
+          <field>
+            <localeString>en</localeString>
+            <name>title</name>
+            <value>Pick a Number</value>
+          </field>
+          <field>
+            <localeString>en</localeString>
+            <name>creator</name>
+            <value>J2 Team</value>
+          </field>
+        </fields>
+      </metadata>
+      <portletIcon>applications-games.png</portletIcon>
+      <portletInfo>
+        <keywords>fun,game,pick</keywords>
+        <title>Pick a Number</title>
+      </portletInfo>
+      <portletName>PickANumberPortlet</portletName>
+      <supports>
+        <support>
+          <mimeType>text/html</mimeType>
+          <portletModes>
+            <portletMode>view</portletMode>
+            <portletMode>help</portletMode>
+            <portletMode>edit</portletMode>
+            <portletMode>about</portletMode>
+            <portletMode>edit_defaults</portletMode>
+            <portletMode>preview</portletMode>
+            <portletMode>print</portletMode>
+          </portletModes>
+          <windowStates/>
+        </support>
+      </supports>
+      <uniqueName>demo::PickANumberPortlet</uniqueName>
+    </definition>
+  </definitions>
+</data>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+
+</section>
+
+<section name='Page Layout Service'>
+<p>
+The Page Layout Service is a HTTP request-based API, communicating over a 
simple REST (Representational State Transfer) protocol,
+providing information and management functionality on the layout of the 
content page and its content fragments.
+This service is accessed over HTTP via the "/services/pagelayout" path on the 
portal URL:
+<source><![CDATA[
+http://hostname/contextname/services/pagelayout/
+]]></source>
+</p>
+
+<subsection name='Get Content Page'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/page/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Get content page of the current request context.</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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no VIEW access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+GET http://localhost:8080/jetspeed/services/pagelayout/page/?_type=json
+
+With the following request header:
+  X-Portal-Path: /jetspeed.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"default-page.psml",
+  "id":"/default-page.psml",
+  "path":"/default-page.psml",
+  "url":"/default-page.psml",
+  "title":"Dashboard",
+  "shortTitle":"Dashboard",
+  "fragment":
+    {
+      "name":"jetspeed-layouts::VelocityThreeColumns",
+      "properties":{"sizes":"15%,70%,15%"},
+      "id":"template-top2",
+      "type":"layout",
+      "locked":true,
+      "fragments":[
+        {
+          "name":"j2-admin::SpaceNavigator",
+          
"properties":{"decorator":"clear","y":"80.0","x":"12.0","jsdesktop":"detached=true"},
+          "id":"template-top2.jsSpaceNavigator",
+          "type":"portlet",
+          "locked":true,
+          "decorator":"clear"
+        },
+        {
+          "name":"j2-admin::PageNavigator",
+          
"properties":{"z":"201.0","row":"0","width":"40.0","height":"388.0","column":"0","y":"104.0","x":"1.0"},
+          "id":"template-top2.jsPageNavigator",
+          "type":"portlet",
+          "locked":true
+        },
+        {
+          "name":"jetspeed-layouts::VelocityOneColumn",
+          "properties":{"row":"0","column":"1"},
+          "id":"template-top2.page-template.dashboard-1000",
+          "type":"layout",
+          "locked":false,
+          "fragments":[
+            {
+              "name":"j2-admin::LoginPortlet",
+              "properties":{"row":"0","column":"0"},
+              "id":"template-top2.page-template.dashboard-1000.dashboard-1003",
+              "type":"portlet",
+              "locked":false
+            },
+            {
+              "name":"j2-admin::LocaleSelector",
+              "properties":{"row":"1","column":"0"},
+              "id":"template-top2.page-template.dashboard-1000.dashboard-1007",
+              "type":"portlet",
+              "locked":false
+            }
+          ]
+        },
+        {
+          "name":"j2-admin::JetspeedToolbox",
+          "properties":{"y":"10.0","x":"440.0","jsdesktop":"detached=true"},
+          "id":"template-top2.jsToolbox",
+          "type":"portlet",
+          "locked":true
+        }
+      ]
+    }
+  }
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<page>
+  <id>/default-page.psml</id>
+  <name>default-page.psml</name>
+  <path>/default-page.psml</path>
+  <shortTitle>Dashboard</shortTitle>
+  <title>Dashboard</title>
+  <url>/default-page.psml</url>
+  <fragment>
+    <id>template-top2</id>
+    <locked>true</locked>
+    <name>jetspeed-layouts::VelocityThreeColumns</name>
+    <type>layout</type>
+    <properties>
+      <entry>
+        <key>sizes</key>
+        <value>15%,70%,15%</value>
+      </entry>
+    </properties>
+    <fragments>
+      <fragment>
+        <decorator>clear</decorator>
+        <id>template-top2.jsSpaceNavigator</id>
+        <locked>true</locked>
+        <name>j2-admin::SpaceNavigator</name>
+        <type>portlet</type>
+        <properties>
+          <entry>
+            <key>decorator</key>
+            <value>clear</value>
+          </entry>
+          <entry>
+            <key>y</key>
+            <value>80.0</value>
+          </entry>
+          <entry>
+            <key>x</key>
+            <value>12.0</value>
+          </entry>
+          <entry>
+            <key>jsdesktop</key>
+            <value>detached=true</value>
+          </entry>
+        </properties>
+      </fragment>
+      <fragment>
+        <id>template-top2.jsPageNavigator</id>
+        <locked>true</locked>
+        <name>j2-admin::PageNavigator</name>
+        <type>portlet</type>
+        <properties>
+          <entry>
+            <key>z</key>
+            <value>201.0</value>
+          </entry>
+          <entry>
+            <key>row</key>
+            <value>0</value>
+          </entry>
+          <entry>
+            <key>width</key>
+            <value>40.0</value>
+          </entry>
+          <entry>
+            <key>height</key>
+            <value>388.0</value>
+          </entry>
+          <entry>
+            <key>column</key>
+            <value>0</value>
+          </entry>
+          <entry>
+            <key>y</key>
+            <value>104.0</value>
+          </entry>
+          <entry>
+            <key>x</key>
+            <value>1.0</value>
+          </entry>
+        </properties>
+      </fragment>
+      <fragment>
+        <id>template-top2.page-template.dashboard-1000</id>
+        <locked>false</locked>
+        <name>jetspeed-layouts::VelocityOneColumn</name>
+        <type>layout</type>
+        <properties>
+          <entry>
+            <key>row</key>
+            <value>0</value>
+          </entry>
+          <entry>
+            <key>column</key>
+            <value>1</value>
+          </entry>
+        </properties>
+        <fragments>
+          <fragment>
+            <id>template-top2.page-template.dashboard-1000.dashboard-1003</id>
+            <locked>false</locked>
+            <name>j2-admin::LoginPortlet</name>
+            <type>portlet</type>
+            <properties>
+              <entry>
+                <key>row</key>
+                <value>0</value>
+              </entry>
+              <entry>
+                <key>column</key>
+                <value>0</value>
+              </entry>
+            </properties>
+          </fragment>
+          <fragment>
+            <id>template-top2.page-template.dashboard-1000.dashboard-1007</id>
+            <locked>false</locked>
+            <name>j2-admin::LocaleSelector</name>
+            <type>portlet</type>
+            <properties>
+              <entry>
+                <key>row</key>
+                <value>1</value>
+              </entry>
+              <entry>
+                <key>column</key>
+                <value>0</value>
+              </entry>
+            </properties>
+          </fragment>
+        </fragments>
+      </fragment>
+      <fragment>
+        <id>template-top2.jsToolbox</id>
+        <locked>true</locked>
+        <name>j2-admin::JetspeedToolbox</name>
+        <type>portlet</type>
+        <properties>
+          <entry>
+            <key>y</key>
+            <value>10.0</value>
+          </entry>
+          <entry>
+            <key>x</key>
+            <value>440.0</value>
+          </entry>
+          <entry>
+            <key>jsdesktop</key>
+            <value>detached=true</value>
+          </entry>
+        </properties>
+      </fragment>
+    </fragments>
+  </fragment>
+</page>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+
+<subsection name='Get Content Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/fragment/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Get content fragment based on the fragment ID 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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    
<td>/template-top2.page-template.dashboard-1000.dashboard-1003/</td>
+                    <td>
+                        The ID of the fragment to retrieve.
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no VIEW access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+GET 
http://localhost:8080/jetspeed/services/pagelayout/fragment/template-top2.page-template.dashboard-1000.dashboard-1003/?_type=json
+
+With the following request header:
+  X-Portal-Path: /jetspeed.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"j2-admin::LoginPortlet",
+  "id":"template-top2.page-template.dashboard-1000.dashboard-1003",
+  "type":"portlet",
+  "locked":false,
+  "properties":{"row":"0","column":"2"}
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<fragment>
+  <id>template-top2.page-template.dashboard-1000.dashboard-1003</id>
+  <locked>false</locked>
+  <name>j2-admin::LoginPortlet</name>
+  <type>portlet</type>
+  <properties>
+    <entry>
+      <key>row</key>
+      <value>0</value>
+    </entry>
+    <entry>
+      <key>column</key>
+      <value>2</value>
+    </entry>
+  </properties>
+</fragment>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+<subsection name='Add Content Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/fragment/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Add a content fragment to the content page based on the fragment 
type path parameter and the portlet name path parameter.</td>
+    </tr>
+    <tr>
+        <td>HTTP Method</td>
+        <td>POST</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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    <td>/portlet/demo::PickANumberPortlet/</td>
+                    <td>
+                        The fragment type and the portlet name to add.
+                        The first path part can be either 'portlet' or 
'layout',
+                        and the second path part must be the portlet name.
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>row</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>
+                        The row position of the added fragment.
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>col</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>
+                        The column position of the added fragment.
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>minrowscol</td>
+                    <td>No</td>
+                    <td>false</td>
+                    <td>true</td>
+                    <td>
+                        The flag to use the least used column index to add the 
fragment.
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no EDIT access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+POST 
http://localhost:8080/jetspeed/services/pagelayout/fragment/portlet/demo::PickANumberPortlet/?_type=json
+
+With the following request header:
+  X-Portal-Path: /default-page.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"demo::PickANumberPortlet",
+  "id":"template-top2.page-template.dashboard-1000.P-125fec68f7c-10000",
+  "type":"portlet",
+  "locked":false,
+  "properties":{"row":"2","column":"2"}
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<fragment>
+  <id>template-top2.page-template.dashboard-1000.P-125fec68f7c-10000</id>
+  <locked>false</locked>
+  <name>demo::PickANumberPortlet</name>
+  <type>portlet</type>
+  <properties>
+    <entry>
+      <key>row</key>
+      <value>2</value>
+    </entry>
+    <entry>
+      <key>column</key>
+      <value>2</value>
+    </entry>
+  </properties>
+</fragment>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+<subsection name='Delete Content Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/fragment/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Deletes the content fragment of the content page based on the 
fragment ID path parameter.</td>
+    </tr>
+    <tr>
+        <td>HTTP Method</td>
+        <td>DELETE</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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    
<td>/template-top2.page-template.dashboard-1000.dashboard-1003/</td>
+                    <td>
+                        The ID of the fragment to delete.
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no EDIT access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+DELETE 
http://localhost:8080/jetspeed/services/pagelayout/fragment/template-top2.page-template.dashboard-1000.P-125fac24b80-10000/?_type=json
+
+With the following request header:
+  X-Portal-Path: /default-page.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"demo::PickANumberPortlet",
+  "id":"template-top2.page-template.dashboard-1000.P-125fec68f7c-10000",
+  "type":"portlet",
+  "locked":false,
+  "properties":{"row":"2","column":"2"}
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<fragment>
+  <id>template-top2.page-template.dashboard-1000.P-125fec68f7c-10000</id>
+  <locked>false</locked>
+  <name>demo::PickANumberPortlet</name>
+  <type>portlet</type>
+  <properties>
+    <entry>
+      <key>row</key>
+      <value>2</value>
+    </entry>
+    <entry>
+      <key>column</key>
+      <value>2</value>
+    </entry>
+  </properties>
+</fragment>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+<subsection name='Move Content Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>
+            /fragment/{id}/pos/
+            <br/><br/>
+            <em>Note: The '{id}' must be replaced by the fragment ID path 
parameter.</em>
+        </td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Moves the content fragment based on the query parameters.</td>
+    </tr>
+    <tr>
+        <td>HTTP Method</td>
+        <td>PUT</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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    
<td>/template-top2.page-template.dashboard-1000.dashboard-1003/</td>
+                    <td>
+                        The ID of the fragment to move.
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>layout</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>template-top2.page-template.dashboard-1000</td>
+                    <td>
+                        The ID of the target layout fragment to which the 
content fragment should be moved.
+                        If this is not provided, the current parent layout 
fragment is used. 
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>dir</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>down</td>
+                    <td>The moving direction. This can be either 'up', 'down', 
'left' or 'right'.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>row</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>The row position of the content fragment to move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>col</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>0</td>
+                    <td>The column position of the content fragment to 
move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>x</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>20</td>
+                    <td>The absolute left position of the content fragment to 
move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>y</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>20</td>
+                    <td>The absolute top position of the content fragment to 
move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>z</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>1000</td>
+                    <td>The Z-INDEX of the content fragment to move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>w</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>400</td>
+                    <td>The width of the content fragment to move.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>h</td>
+                    <td>No</td>
+                    <td>-1</td>
+                    <td>300</td>
+                    <td>The height of the content fragment to move.</td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no EDIT access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+PUT 
http://localhost:8080/jetspeed/services/pagelayout/fragment/template-top2.page-template.dashboard-1000.dashboard-1007/pos/?_type=json&col=0&row=0
+
+With the following request header:
+  X-Portal-Path: /default-page.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"j2-admin::LocaleSelector",
+  "id":"template-top2.page-template.dashboard-1000.dashboard-1007",
+  "type":"portlet",
+  "locked":false,
+  "properties":{"row":"1","column":"2"}
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<fragment>
+  <id>template-top2.page-template.dashboard-1000.dashboard-1007</id>
+  <locked>false</locked>
+  <name>j2-admin::LocaleSelector</name>
+  <type>portlet</type>
+  <properties>
+    <entry>
+      <key>row</key>
+      <value>1</value>
+    </entry>
+    <entry>
+      <key>column</key>
+      <value>2</value>
+    </entry>
+  </properties>
+</fragment>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+<subsection name='Change the portlet mode and window state on Content 
Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>
+            /fragment/{id}/mod/
+            <br/><br/>
+            <em>Note: The '{id}' must be replaced by the fragment ID path 
parameter.</em>
+        </td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>HTTP Method</td>
+        <td>PUT</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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    
<td>/template-top2.page-template.dashboard-1000.dashboard-1003/</td>
+                    <td>
+                        The ID of the fragment to modify.
+                    </td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>mode</td>
+                    <td>Yes</td>
+                    <td></td>
+                    <td>View</td>
+                    <td>The portlet mode of the content fragment.</td>
+                </tr>
+                <tr>
+                    <td>QUERY</td>
+                    <td>state</td>
+                    <td>Yes</td>
+                    <td></td>
+                    <td>Normal</td>
+                    <td>The window state of the content fragment.</td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no EDIT access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+PUT 
http://localhost:8080/jetspeed/services/pagelayout/fragment/template-top2.page-template.dashboard-1000.dashboard-1007/mode/?_type=json&mode=View&state=Normal
+
+With the following request header:
+  X-Portal-Path: /default-page.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"j2-admin::LocaleSelector",
+  "id":"template-top2.page-template.dashboard-1000.dashboard-1007",
+  "type":"portlet",
+  "mode":"View",
+  "state":"Normal",
+  "locked":false,
+  "properties":{"row":"1","column":"2"}
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<fragment>
+  <id>template-top2.page-template.dashboard-1000.dashboard-1007</id>
+  <locked>false</locked>
+  <name>j2-admin::LocaleSelector</name>
+  <type>portlet</type>
+  <mode>View</mode>
+  <state>Normal</state>
+  <properties>
+    <entry>
+      <key>row</key>
+      <value>1</value>
+    </entry>
+    <entry>
+      <key>column</key>
+      <value>2</value>
+    </entry>
+  </properties>
+</fragment>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+<subsection name='Get Decoration of Content Fragment'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/decoration/fragment/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Retrieves decoration of the content fragment based on the fragment 
ID 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>HEADER</td>
+                    <td>X-Portal-Path</td>
+                    <td>No</td>
+                    <td>/</td>
+                    <td>/default-page.psml</td>
+                    <td>
+                        The current portal page path.
+                    </td>
+                </tr>
+                <tr>
+                    <td>PATH</td>
+                    <td></td>
+                    <td>Yes</td>
+                    <td></td>
+                    
<td>/template-top2.page-template.dashboard-1000.dashboard-1003/</td>
+                    <td>
+                        The ID of the fragment to retrieve.
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>HTTP Errors</td>
+        <td>HTTP Error 403 Forbidden when having no VIEW access on the current 
content page.</td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+GET 
http://localhost:8080/jetspeed/services/pagelayout/decoration/fragment/template-top2.page-template.dashboard-1000.dashboard-1007/pos/?_type=json
+
+With the following request header:
+  X-Portal-Path: /default-page.psml
+]]></source>
+        </td>    
+    </tr>
+    <tr>
+        <td>JSON Response Example</td>
+        <td>
+<source><![CDATA[
+{
+  "name":"jetspeed",
+  "basePath":"/decorations/portlet/jetspeed",
+  "actionsOption":"SHOW",
+  "styleSheet":"decorations/portlet/jetspeed/css/styles.css",
+  "baseCSSClass":"jetspeed",
+  "decoratorActions":[
+    {
+      "name":"Configure",
+      "link":"decorations/portlet/jetspeed/images/config.gif",
+      
"action":"http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xjNA__/";,
+      "actionType":"mode",
+      "actionName":"config",
+      "alt":"Configure"
+    },
+    {
+      "name":"Minimize",
+      "link":"decorations/portlet/jetspeed/images/minimized.gif",
+      
"action":"http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xkMQ__/";,
+      "actionType":"state",
+      "actionName":"minimized",
+      "alt":"Minimize"
+    },
+    {
+      "name":"Maximize",
+      "link":"decorations/portlet/jetspeed/images/maximized.gif",
+      
"action":"http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xkMg__/";,
+      "actionType":"state",
+      "actionName":"maximized",
+      "alt":"Maximize"
+    }
+  ]
+}
+]]></source>
+            
+        </td>    
+    </tr>
+    <tr>
+        <td>XML Response Example</td>
+        <td>
+<source><![CDATA[
+<decoration>
+  <name>jetspeed</name>
+  <actionsOption>SHOW</actionsOption>
+  <baseCSSClass>jetspeed</baseCSSClass>
+  <basePath>/decorations/portlet/jetspeed</basePath>
+  <styleSheet>decorations/portlet/jetspeed/css/styles.css</styleSheet>
+  <decoratorActions>
+    <decoratorAction>
+      
<action>http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xjNA__/</action>
+      <actionName>config</actionName>
+      <actionType>mode</actionType>
+      <alt>Configure</alt>
+      <link>decorations/portlet/jetspeed/images/config.gif</link>
+      <name>Configure</name>
+    </decoratorAction>
+    <decoratorAction>
+      
<action>http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xkMQ__/</action>
+      <actionName>minimized</actionName>
+      <actionType>state</actionType>
+      <alt>Minimize</alt>
+      <link>decorations/portlet/jetspeed/images/minimized.gif</link>
+      <name>Minimize</name>
+    </decoratorAction>
+    <decoratorAction>
+      
<action>http://localhost:8080/jetspeed/services/_ns:YXRlbXBsYXRlLXRvcDIucGFnZS10ZW1wbGF0ZS5kYXNoYm9hcmQtMTAwMC5kYXNoYm9hcmQtMTAwM3xkMg__/</action>
+      <actionName>maximized</actionName>
+      <actionType>state</actionType>
+      <alt>Maximize</alt>
+      <link>decorations/portlet/jetspeed/images/maximized.gif</link>
+      <name>Maximize</name>
+    </decoratorAction>
+  </decoratorActions>
+</decoration>
+]]></source>
+        </td>    
+    </tr>
+</table>
+</subsection>
+
+</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&copyids=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&copyids=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='Update Node Info'>
+<table> 
+    <tr>
+        <td>Entry path</td>
+        <td>/info/</td>
+    </tr>
+    <tr>
+        <td>Description</td>
+        <td>Update node info 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 target node path to move
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>title</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>Welcome to Jetspeed</td>
+                    <td>
+                        The title of the node.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>shorttitle</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>Welcome</td>
+                    <td>
+                        The short title of the node.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>hidden</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>true or false</td>
+                    <td>
+                        The flag whether the target node is hidden or not.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>skin</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>jetspeed</td>
+                    <td>
+                        The skin name of the target node.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>version</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>true or false</td>
+                    <td>
+                        The version of the target node.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>docorder</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>default-page.psml, min.psml</td>
+                    <td>
+                        The document order of the target node. The target node 
must be a folder node. Otherwise, this parameter will be just ignored.
+                    </td>                    
+                </tr>
+                <tr>
+                    <td>FORM</td>
+                    <td>url</td>
+                    <td>No</td>
+                    <td></td>
+                    <td>http://portals.apache.org</td>
+                    <td>
+                        The url of the target node. The target node must be a 
link node. Otherwise, this parameter will be just ignored.
+                    </td>                    
+                </tr>
+            </table>
+        </td>
+    </tr>
+    <tr>
+        <td>REST API examples</td>
+        <td>
+<source><![CDATA[
+POST 
http://localhost:8080/jetspeed/services/pagemanagement/info/.psml/default-page.psml?_type=json
+
+With the following request form parameters:
+  title=Welcome to Jetspeed-2 Enterprise Portal
+]]></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-2 Enterprise Portal",
+  "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-2 Enterprise Portal</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.
+Here is the core part of the Spring Assembly. Each service component is 
configured in the resource providers.
+</p>
+<source><![CDATA[
+  <!-- 
+    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="/" />
+    <property name="destinationFactory" ref="cxfDestinationFactory" />
+    <property name="providers">
+      <list>
+        <ref bean="jaxrsJsonProvider" />
+      </list>
+    </property>
+    <property name="resourceProviders">
+      <list>
+        <bean class="org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider">
+          <meta key="j2:cat" value="default" />
+          <constructor-arg ref="jaxrsPortletRegistryService" />
+        </bean>
+        <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>
+  
+  <!-- Portlet Registry JAX-RS Service -->
+  <bean id="jaxrsPortletRegistryService" 
class="org.apache.jetspeed.services.rest.PortletRegistryService">
+    <meta key="j2:cat" value="default" />
+    <constructor-arg 
ref="org.apache.jetspeed.security.SecurityAccessController" />
+    <constructor-arg 
ref="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
+    <constructor-arg ref="org.apache.jetspeed.search.SearchEngine" />
+  </bean>
+  
+  <!-- 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>     
+</body>
+</document>
+

Added: 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-security.xml
URL: 
http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-security.xml?rev=1691449&view=auto
==============================================================================
--- 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-security.xml
 (added)
+++ 
portals/site/jetspeed/jetspeed-2.3/jetspeed-guide-dev/src/site/xdoc/guide-security.xml
 Thu Jul 16 21:01:09 2015
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one or more
+       contributor license agreements.  See the NOTICE file distributed with
+       this work for additional information regarding copyright ownership.
+       The ASF licenses this file to You 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>Guide to Security</title>
+               <subtitle>Security Configuration Overview</subtitle>
+               <authors>
+                       <person name="David Le Strat" 
email="[email protected]" />
+               </authors>
+       </properties>
+       <body>
+               <section name="Configuring Jetspeed-2 Security">
+                       <p>
+                               An overview of Jetspeed-2 security architecture 
is
+                               available
+                               <a href="arch.html">
+                                       here
+                               </a>
+                               .
+                       </p>
+                       <subsection name="Guide to Authentication 
Configuration">
+                               <p>
+                                       Jetspeed-2 provides a
+                                       <a
+                                               href="login-module.html">
+                                               LoginModule implementation
+                                       </a>
+                                       that leverage the security SPI model to 
interact
+                                       with multiple authentication mechanisms.
+                               </p>
+                               <p>
+                                       Jetspeed authentication configuration 
is managed by the <i>security-spi-atn.xml</i> located in 
+                                       the <a 
href="../deployguide/config-overrides.html">portal application assembly 
directory</a>.  Jetspeed-2
+                                       supports authentication against:
+                                       <ul>
+                                               <li>A <a 
href="../deployguide/security-config.html#security-spi-atn_xml">relational 
database</a> (default authentication implementation).</li>
+                                               <li>A <a 
href="../deployguide/ldap.html">LDAP authentication</a> implementation.</li>
+                                   </ul>
+                               </p>
+                       </subsection>
+                       <subsection name="Guide to Authorization Configuration">
+                               <p>
+                                       Jetspeed-2 provides a <a 
href="atz-jaas.html">relational database backed JAAS policy implementation</a>.
+                               </p>
+                               <p>
+                                       Jetspeed-2 authorization implementation 
relies on a SPI model as well and is configured through 
<code>security-spi-atz.xml</code>.
+                                       Configuration details are available <a 
href="../deployguide/security-config.html">here</a>.
+                               </p>
+                       </subsection>
+               </section>
+       </body>
+</document>
\ No newline at end of file


Reply via email to