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©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> + +<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
