You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/02/24 00:32:01 UTC

svn commit: r747208 - /portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml

Author: taylor
Date: Mon Feb 23 23:32:00 2009
New Revision: 747208

URL: http://svn.apache.org/viewvc?rev=747208&view=rev
Log:
eoln

Added:
    portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml   (with props)

Added: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml?rev=747208&view=auto
==============================================================================
--- portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml (added)
+++ portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml Mon Feb 23 23:32:00 2009
@@ -0,0 +1,393 @@
+<?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>Jetspeed Service</title>
+		<subtitle>Jetspeed Services</subtitle>
+		<authors>
+			<person name="David Sean Taylor" email="taylor@apache.org" />
+			<person name="David Dyer"
+				email="ddyer@artifact-software.com" />
+			<person name="Ron Wheeler"
+				email="rwheeler@artifact-software.com" />
+		</authors>
+	</properties>
+	<body>
+		<section name="Jetspeed Services">
+			<p>
+				This tutorial shows you how to use Jetspeed Services
+				from the Express Demo Portlet Application. Please note
+				that all edits, unless explicity specified otherwise,
+				are applied to the express-demo PA source tree. We will
+				learn how to:
+				<ul>
+					<li>add new roles</li>
+					<li>add new groups</li>
+					<li>register new users</li>
+					<li>manipulate pages</li>
+					<li>get a filtered list of portlets</li>
+				</ul>
+				using the RoleManager, GroupManager,
+				PortletAdministration, and Page Manager Jetspeed API
+				interfaces.
+			</p>
+			<p>
+				Lets get started by entering a new portlet in the
+				portlet.xml:
+			</p>
+			<source>
+				<![CDATA[	
+<portlet id="ServicesTutorialPortlet">    
+    <description>Tutorial for using Jetspeed Services, such as PortalAdministration, PageManager, Registry.</description>
+    <portlet-name>ServicesTutorialPortlet</portlet-name>
+    <display-name>Jetspeed Services Tutorial Portlet</display-name>
+    <portlet-class>com.bluesunrise.portal.portlets.services.ServicesTutorialPortlet</portlet-class>
+    <init-param>
+        <description>This parameter sets the template used in view mode.</description>
+        <name>ViewPage</name>
+        <value>/WEB-INF/view/services-tutorial.jsp</value>
+    </init-param>
+    <init-param>
+        <description>Comma-separated list of roles to create via Role Manager</description>
+        <name>roles</name>
+        <value>role1,role2,role3</value>
+    </init-param>    
+    <init-param>
+        <description>Comma-separated list of groups to create via Group Manager</description>
+        <name>groups</name>
+        <value>group1,group2,group3</value>
+    </init-param>    
+    <init-param>
+        <description>Comma-separated list of Users to create and Register via PortalAdminstration service</description>
+        <name>users</name>
+        <value>user1,user2,user3</value>
+    </init-param>        
+    <init-param>
+        <description>Comma-separated list of roles to assign to a new user</description>
+        <name>registration-roles</name>
+        <value>user,role1,role2</value>
+    </init-param>
+    <init-param>
+        <description>Comma-separated list of groups to assign to a new user</description>
+        <name>registration-groups</name>
+        <value>group1,group2</value>
+    </init-param>
+    <init-param>
+        <name>portlet-icon</name>
+        <value>start-here.png</value>
+    </init-param>    
+    <supports>
+        <mime-type>text/html</mime-type>
+        <portlet-mode>VIEW</portlet-mode>
+    </supports>
+    <supported-locale>en</supported-locale>
+    <portlet-info>
+        <title>Services Tutorial</title>
+        <short-title>Services</short-title>
+        <keywords>tutorial,services,jetspeed-services</keywords>
+    </portlet-info>
+ </portlet>	 
+	     ]]>
+			</source>
+			<p>
+				Jetspeed has an extended descriptor for defining
+				extended portal features and services. Edit the
+				<b>jetspeed-portlet.xml</b>
+				found in
+				<i>src/webapp/WEB-INF/</i>
+				, and add the following services under the
+				&lt;js:services&gt; element. This tells Jetspeed what
+				services you require:
+			</p>
+			<source>
+				<![CDATA[	
+        <js:service name='GroupManager'/>    
+        <js:service name='PageManager'/>    
+        <js:service name='PortalAdministration'/>        
+        <js:service name='PortletRegistryComponent'/>
+        <js:service name='RoleManager'/>	 
+        <js:service name='UserManager'/>        
+	     ]]>
+			</source>
+			<p>
+				Create a new JSP page named
+				<b>services-tutorial.jsp</b>
+				in the
+				<i>src/webapp/WEB-INF/view/</i>
+				directory. Enter the following code:
+				<source>
+					<![CDATA[	
+<%@ page language="java" session="true" %>
+<%@ page import="javax.portlet.*" %>
+
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
+<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
+
+<portlet:defineObjects/>
+
+<portlet:actionURL var="newRolesAction"/>
+<br/>
+<div class='portlet-section-header'>Services Tutorial Portlet</div>
+
+<form name="servicesTutorialForm" action="<c:out value="${newRolesAction}"/>" method="post">
+<input type="submit" name='action' value="createRoles" class="portlet-form-button" />
+<input type="submit" name='action' value="createGroups" class="portlet-form-button" />
+<input type="submit" name='action' value="registerUsers" class="portlet-form-button" />
+<input type="submit" name='action' value="modifyPages" class="portlet-form-button" />
+<input type="submit" name='action' value="createSharedPages" class="portlet-form-button" />
+</form>
+<c:if test="${message != null}">
+<div class='portlet-msg-info'><c:out value="${message}"/></div>
+</c:if>
+<c:if test="${errorMessage != null}">
+<div class='portlet-msg-error'><c:out value="${errorMessage}"/></div>
+</c:if>    
+	     ]]>
+				</source>
+			</p>
+			<p>
+				<ul>
+					<li>
+						Create a new package using Eclipse:
+						<b>com.bluesunrise.portal.portlets.services</b>
+					</li>
+					<li>
+						Create a portlet in the above package named
+						<b>ServicesTutorialPortlet.java</b>
+						extending
+						<b>GenericServletPortlet</b>
+						.
+					</li>
+					<li>
+						Override and implement the
+						<b>init</b>
+						,
+						<b>doView</b>
+						and
+						<b>processAction</b>
+						methods
+					</li>
+				</ul>
+			</p>
+			<p>Add the following data members to the portlet class:</p>
+			<source>
+				<![CDATA[	
+    private PortalAdministration admin;
+    private PageManager pageManager;
+    private RoleManager roleManager;
+    private UserManager userManager;
+    private GroupManager groupManager;
+    protected PortletRegistry registry;
+
+    private List registrationRoles;
+    private List registrationGroups;
+    private List newRoles;
+    private List newGroups;
+    private List newUsers;    
+    ]]>
+			</source>
+			<p>
+				Press
+				<b>Ctrl-Shift-O</b>
+				to resolve the two above class imports.
+			</p>
+			<p>
+				Enter the following code into the init(PortletConfig
+				config) method, replacing whats there:
+			</p>
+			<source>
+				<![CDATA[
+	    super.init();				
+        admin = (PortalAdministration) getPortletContext().getAttribute(
+				CommonPortletServices.CPS_PORTAL_ADMINISTRATION);
+		if (null == admin) {
+			throw new PortletException(
+					"Failed to find the Portal Administration on portlet initialization");
+		}
+		userManager = (UserManager) getPortletContext().getAttribute(
+				CommonPortletServices.CPS_USER_MANAGER_COMPONENT);
+		if (null == userManager) {
+			throw new PortletException(
+					"Failed to find the User Manager on portlet initialization");
+		}
+		roleManager = (RoleManager) getPortletContext().getAttribute(
+				CommonPortletServices.CPS_ROLE_MANAGER_COMPONENT);
+		if (null == roleManager) {
+			throw new PortletException(
+					"Failed to find the Role Manager on portlet initialization");
+		}
+		groupManager = (GroupManager) getPortletContext().getAttribute(
+				CommonPortletServices.CPS_GROUP_MANAGER_COMPONENT);
+		if (null == groupManager) {
+			throw new PortletException(
+					"Failed to find the Group Manager on portlet initialization");
+		}
+		pageManager = (PageManager) getPortletContext().getAttribute(
+				CommonPortletServices.CPS_PAGE_MANAGER_COMPONENT);
+		if (null == pageManager) {
+			throw new PortletException(
+					"Failed to find the Page Manager on portlet initialization");
+		}
+        registry = (PortletRegistry)getPortletContext().getAttribute(CommonPortletServices.CPS_REGISTRY_COMPONENT);
+        if (null == registry) {
+			throw new PortletException(
+					"Failed to find the Portlet Registry on portlet initialization");
+		}                
+        this.newRoles = getInitParameterList(config, "roles");
+        this.newGroups = getInitParameterList(config, "groups");
+        this.newUsers = getInitParameterList(config, "users");        
+        this.registrationRoles = getInitParameterList(config, "registration-roles");
+        this.registrationGroups = getInitParameterList(config, "registration-groups");	 
+	     ]]>
+			</source>
+			<p>Add this helper function to the class:</p>
+			<source>
+				<![CDATA[	
+    protected List getInitParameterList(PortletConfig config, String ipName)
+    {
+        String temp = config.getInitParameter(ipName);
+        if (temp == null) return new ArrayList();
+
+        String[] temps = temp.split("\\,");
+        for (int ix = 0; ix < temps.length; ix++)
+            temps[ix] = temps[ix].trim();
+
+        return Arrays.asList(temps);
+    }
+	     ]]>
+			</source>
+			<p>Write the doView method:</p>
+			<source>
+				<![CDATA[	
+	public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException 
+	{
+		request.setAttribute("message", request.getParameter("message"));
+		request.setAttribute("errorMessage", request.getParameter("errorMessage"));
+		super.doView(request, response);
+	}	 
+	     ]]>
+			</source>
+			<p>Write the portletAction method:</p>
+			<source>
+				<![CDATA[	
+	public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException 
+	{
+		String action = request.getParameter("action");
+		try
+		{
+			if (action != null)
+			{			
+				if (action.equals("createRoles"))
+				{
+					String message = "Created " + createRoles() + " roles";
+					response.setRenderParameter("message", message);
+				}
+				else if (action.equals("createGroups"))
+				{
+					String message = "Created " + createGroups() + " groups";
+					response.setRenderParameter("message", message);
+				}
+				else if (action.equals("registerUsers"))
+				{
+					String message = "Registered " + registerUsers() + " users";
+					response.setRenderParameter("message", message);
+				}
+				else if (action.equals("modifyPages"))
+				{
+					String message = "Modified " + modifyPages() + " pages";
+					response.setRenderParameter("message", message);					
+				}
+				else if (action.equals("createSharedPages"))
+				{
+					String message = "Created " + createSharedPages() + " pages";
+					response.setRenderParameter("message", message);										
+				}
+			}
+		}
+		catch (Exception e)
+		{
+			response.setRenderParameter("serviceError", e.getMessage());
+			// TODO: proper logging
+			e.printStackTrace();
+		}
+	}	 
+	     ]]>
+			</source>
+			<p>
+				Implement the undefined methods using the Jetspeed
+				Services...
+				<table>
+					<tr>
+						<th>method</th>
+						<th>purpose</th>
+					</tr>
+					<tr>
+						<td>createRoles</td>
+						<td>
+							using the roles init param, create new roles
+							with the RoleManager service. If the role
+							already exists, skip it.
+						</td>
+					</tr>
+					<tr>
+						<td>createGroups</td>
+						<td>
+							using the groups init param, create new
+							groups with the GroupManager service. If the
+							group already exists, skip it.
+						</td>
+					</tr>
+					<tr>
+						<td>registerUsers</td>
+						<td>
+							using the users init param, register new
+							users with the PortalAdministration service.
+							If the user already exists, skip it.
+						</td>
+					</tr>
+					<tr>
+						<td>modifyPages</td>
+						<td>
+							using the users init param, modify pages
+							with the PageManager service. If the page
+							doesnt exist, dont create it. Modifications:
+							for user1, create a 1 column collection of 1
+							portlet, for user2, create a 2 column
+							collection of 2 portlets, for user3 create a
+							3 column collection of 3 portets
+						</td>
+					</tr>
+					<tr>
+						<td>createSharedPages</td>
+						<td>
+							create a folder named /shared, create a page
+							name /friends.psml. add some portlets to the
+							page. grant public-view security constraint
+							to the folder
+						</td>
+					</tr>
+				</table>
+			</p>
+			<p>
+				<a href='../04/taglib.html'>Previous</a>
+			</p>
+		</section>
+	</body>
+</document>
+

Propchange: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/branches/JETSPEED-2.1.3-POSTRELEASE/xdocs/tutorials/ant/05/jetspeed-service.xml
------------------------------------------------------------------------------
    svn:keywords = Id



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