<?xml version="1.0"?>
<!--
	Copyright 2006 The Apache Software Foundation
	
	Licensed under the Apache License, Version 2.0 (the "License");
	you may not use this file except in compliance with the License.
	You may obtain a copy of the License at
	
	http://www.apache.org/licenses/LICENSE-2.0
	
	Unless required by applicable law or agreed to in writing, software
	distributed under the License is distributed on an "AS IS" BASIS,
	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	See the License for the specific language governing permissions and
	limitations under the License.
-->
<document>
	<properties>
		<title>Jetspeed Simple Velocity Portlet Guide</title>
		<subtitle>Documentation for Creating a Simple Velocity Portlet</subtitle>
		<authors>
			<person name="David Le Strat" email="dlestrat@apache.org" />
			<person name="Philip Mark Donaghy" email="philip.donaghy@gmail.com" />
		</authors>
	</properties>
	<body>
		<section name="Jetspeed Simple Velocity Portlet Guide">
			<p>
				This guide provides a tutorial for creating a very
				simple Velocity portlet with one template in the portlet view mode.
			</p>
			<subsection name="1. The Portlet Class">
				<p>
				Create the file VelocitySimplest.java in a directory called
				velocity-simplest/WEB-INF/classes:
				<source>
public class VelocitySimplest extends org.apache.portals.bridges.velocity.GenericVelocityPortlet
{

    public void doView(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)
                throws javax.portlet.PortletException, java.io.IOException
    {
        super.doView(request, response);
    }
}
				</source>
				</p>
				<p>
				Compile the class in the velocity-simplest/WEB-INF/classes directory using the command,
				<source>
javac -cp portlet-api-1.0.jar:portals-bridges-velocity-1.0.jar:portals-bridges-common-1.0.jar VelocitySimplest.java
				</source>
				</p>
			</subsection>
			<subsection name="2. The portlet.xml">
			<p>
			Create the file portlet.xml in the velocity-simplest/WEB-INF directory.
			<source><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app id="velocitysimplest" version="1.0">
  <portlet id="VelocitySimplest">
    <portlet-name>VelocitySimplest</portlet-name>
    <display-name>Velocity Simplest Display Name</display-name>
    <portlet-class>VelocitySimplest</portlet-class>
    <init-param>
        <name>ViewPage</name>
        <value>/WEB-INF/view/world.vm</value>
    </init-param>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>VIEW</portlet-mode>
    </supports>
    <supported-locale>en</supported-locale>
    <portlet-info>
      <title>Velocity Simplest Title</title>
      <short-title>Velocity Simplest Short Title</short-title>
    </portlet-info>
  </portlet>
</portlet-app>]]>
			</source>
			</p>
			</subsection>
			<subsection name="3. The web.xml">
			<p>
			Create the file web.xml in the velocity-simplest/WEB-INF directory.
			<source><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                         "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>Velocity Simplest</display-name>
  <description>The world's simplest Velocity portlet</description>

  <!-- Define Velocity Servlet -->
  <servlet>
    <servlet-name>velocity</servlet-name>
    <servlet-class>org.apache.portals.bridges.velocity.BridgesVelocityViewServlet</servlet-class>
  </servlet>

  <!-- Map *.vm files to Velocity  -->
  <servlet-mapping>
    <servlet-name>velocity</servlet-name>
    <url-pattern>*.vm</url-pattern>
  </servlet-mapping>

</web-app>]]>
			</source>
			</p>
			</subsection>
			<subsection name="4. The View">
			<p>
                        Create the world.vm file in the velocity-simplest/WEB-INF/view directory. Put
                        whatever content
                        you desire in it. Notice that the template file is defined in the portlet init
                        parameter <code>
                        ViewPage</code>. The objects <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/PortletConfig.html">PortletConfig</a>, <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/RenderRequest.html">RenderRequest</a>, and <a href="http://portals.apache.org/pluto/multiproject/portlet-api/apidocs/javax/portlet/RenderResponse.html">RenderResponse</a>
                        are automatically
                        placed in the Velocity context for use in Velocity templates. Here is a sample
                        template showing a few of these objects methods and properties.
<source>
$portletConfig.portletName
$portletConfig.portletContext.serverInfo
#set ($MESSAGES = $portletConfig.getResourceBundle($renderRequest.Locale))
$renderRequest.portletMode
$renderResponse.namespace
</source>
			</p>
			</subsection>
			<subsection name="5. The Dependency JARs">
			<p>
                        Copy the commons-beanutils-1.7.0.jar, commons-collections-3.1.jar,
                        commons-digester-1.7.jar, portals-bridges-velocity-1.0.jar,
                        velocity-1.4.jar, and velocity-tools-1.1.jar to the velocity-simplest/WEB-INF/lib
                        directory. IMPORTANT: 
                        Do NOT put the portlet-api-1.0.jar in the war file. If you have already built
                        Jetspeed these
                        jars should be in your Maven repository. If so executing these commands in the lib
                        directory will set up the dependencies for you.
<source>
ln -s ~/.maven/repository/commons-beanutils/jars/commons-beanutils-1.7.0.jar
ln -s ~/.maven/repository/commons-collections/jars/commons-collections-3.1.jar
ln -s ~/.maven/repository/commons-digester/jars/commons-digester-1.7.jar
ln -s ~/.maven/repository/org.apache.portals.bridges/jars/portals-bridges-velocity-1.0.jar
ln -s ~/.maven/repository/velocity/jars/velocity-1.4.jar
ln -s ~/.maven/repository/velocity-tools/jars/velocity-tools-1.1.jar
</source>
			</p>
			</subsection>
			<subsection name="6. The WAR file">
			<p>
			From the directory velocity-simplest combine the files above into a war file using the command,
			<source>
jar cvf ../velocitysimplest.war .
			</source>
			</p>
			</subsection>
			<subsection name="7. Deploy the WAR file">
			<p>
			Copy the war file to <code>$CATALINA_HOME/webapps/jetspeed/WEB-INF/deploy</code>.
                        Jetspeed-2 will deploy the webapp.
			</p>
			</subsection>
			<subsection name="8. The PSML">
			<p>
                        Create the PSML page using the Jetspeed portlet chooser. Login and click on the
                        edit page icon.
                        Your user must have the permission to edit pages. The user <code>admin</code>
                        password
                        <code>admin</code> has permission to edit all pages.
			</p>
			</subsection>
		</section>
	</body>
</document>
