Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/01/run-it.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/01/run-it.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/01/run-it.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/01/run-it.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,70 @@ +<?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>Run the Custom Portal</title> + <subtitle>Running a Custom Jetspeed Portal</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Running a Custom Jetspeed Portal"> + <p> + In the previous step you <a href="build-it.html">built and deployed</a> your portal project. + You can now start your application servers and log in to your portal. + </p> + <p> + To start up the portal, go to the <i>bin</i> directory of your Tomcat installation. + </p> + <p> + If you are using a Unix system, run: + </p> + <source>./catalina.sh run</source> + <p> + If you are using a Windows system, run: + </p> + <source>catalina.bat run</source> + <p> + The first time you run the portal, it's going to take some time to start up. Wait for the message that the + server has started up, e.g. + </p> + <source>INFO: Server startup in 8948 ms</source> + <p> + Then open up a browser and navigate to <a href="http://localhost:8080/jetexpress/portal">http://localhost:8080/jetexpress/portal</a>. + </p> + <p> + You will see a minimal Jetspeed portal as shown below. Login with the credentials <b>admin/admin</b>. You will be prompted + to change the admin password. + </p> + <a href="../images/01/run-it.png"> + <img src="../images/01/run-it-small.png" alt="Screenshot of custom Jetspeed portal"/> + </a> + </section> + <section name="Next"> + <p> + Now that your portal is up and running, <a href="../02/customizing-overview.html">let's start customizing it.</a> + </p> + <p> + <a href="build-it.html">Previous</a> - <a href="../02/customizing-overview.html">Next</a> + </p> + </section> + </body> +</document> +
Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/customizing-overview.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/customizing-overview.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/customizing-overview.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/customizing-overview.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,73 @@ +<?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. +--> +<!-- + status: TODO +--> +<document> + <properties> + <title>Customization</title> + <subtitle>Decorator and Theme Customization</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Decorator and Theme Customization"> + <p> + Now that your custom Jetspeed portal is <a href="../01/run-it.html">up and running</a>, let's start customizing the portal design. + The portal design, or skins, are known in Jetspeed as <i>decorators and themes</i>. + With decorators and themes, you can customize the portal experience to the branding of your + organization. In this tutorial, we will simply change a few images, CSS styles and colors to get + you on your way. + </p> + <p> + It is important to note that all of the changes made in this section + are made in the build environment. The changes we are making here could just as easily + be made using the portal's live customization features. For example, you can drop a decorator + or theme into the portal while its running. Jetspeed will pick it up automatically. Or, to + customize a page, you can use the portlet customizer or desktop customizer, portlet selector, + and site manager: all administrative portlets that work on your live portal. However, the point of + configuring everything in a Maven build is to be able to easily reproduce portal environments + for development, testing, and new deployments. + </p> + <p> + This section of the tutorial covers customizing: + </p> + <ul> + <li> + Portal Skins (or Decorators). We replace the default logo, colors, and page header and footers with our own. + </li> + <li> + Portal Themes. Same as Portal Skins, but themes apply to the Jetspeed Desktop. + </li> + <li> + Configuring the default portal page to use these new decorators and themes + </li> + </ul> + </section> + <section name="Next"> + <p> + Lets get started with <a href="page-decoration.html">customization of the default portal page decoration</a>. + </p> + <p> + <a href="../01/run-it.html">Previous</a> - <a href="page-decoration.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/default-page.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/default-page.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/default-page.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/default-page.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,57 @@ +<?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. +--> +<!-- + status: FIXME +--> +<document> + <properties> + <title>Default Page</title> + <subtitle>Modifying the Default Page</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Modifying the Default Page"> + <p> + Now that we have created our decorators<!-- and themes-->, lets put them to use on the default page. + Open <i>jetexpress-portal/src/main/webapp/WEB-INF/pages/default-page.psml</i>. + Make the following modifications + </p> + <ul> + <li>for the layout-decorator, replace jetspeed with <b>jetexpress</b></li> + <li>for the portlet-decorator, replace jetspeed with <b>jetexpress</b></li> + <!--<li>add a skin default attribute as <b>skin="jetexpress"</b> for the desktop theme</li>--> + </ul> + <source><![CDATA[<page id="default-page"> + <defaults layout-decorator="jetexpress" + portlet-decorator="jetexpress"]]><!-- + skin="FIXME"/>--></source> + <p>Go ahead and save that file.</p> + </section> + <section name="Next"> + <p> + You are now ready to <a href="deploy-custom.html">deploy your changes to the portal</a>. + </p> + <p> + <a href="desktop-theme.html">Previous</a> - <a href="deploy-custom.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/deploy-custom.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/deploy-custom.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/deploy-custom.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/deploy-custom.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,82 @@ +<?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. +--> +<!-- + status: IN PROGRESS +--> +<document> + <properties> + <title>Deploying Decorations, Themes and Pages</title> + <subtitle>Deploying Decorations, Themes and Pages</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Deploying Decorations, Themes and Pages"> + <p> + In the previous step you <a href="default-page.html">configured the default page to use your new decorators</a>. + In this step we redeploy the portal so we can admire the result. + </p> + <p> + Stop the Tomcat process by pressing Ctrl + C in the command line window where you started it. + </p> + <p> + In your jetexpress project directory, run the following command to redeploy the portal in Tomcat: + </p> + <source>mvn jetspeed:mvn -Dtarget=deploy-portal</source> + <p> + To restart the portal, go to the <i>bin</i> directory of your Tomcat installation. + </p> + <p> + If you are using a Unix system, run: + </p> + <source>./catalina.sh run</source> + <p> + If you are using a Windows system, run: + </p> + <source>catalina.bat run</source> + <p> + Refresh the portal home page, <a href="http://localhost:8080/jetexpress/portal">http://localhost:8080/jetexpress/portal</a>. + You should now see a portal with our new custom decorators: + </p> + <p> + <a href="../images/02/jetexpress-portal.png"> + <img src="../images/02/jetexpress-portal-small.png"/> + </a> + </p> + <!-- + <p> + and desktop theme: + </p> + <p> + TODO screenshot + </p> + --> + </section> + <section name="Next"> + <p> + Now that your portal is up and running, and you know how to customize its look and feel, + <a href="../03/overview.html">let's start developing portlets!</a> + </p> + <p> + <a href="default-page.html">Previous</a> - <a href="../03/overview.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/desktop-theme.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/desktop-theme.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/desktop-theme.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/desktop-theme.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,157 @@ +<?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. +--> +<!-- + status: TODO +--> +<document> + <properties> + <title>Page Themes</title> + <subtitle>Desktop Page Themes</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="TODO"/> + <!-- + <section name="Desktop Page Themes"> + <p> + The Jetspeed Desktop has its own kinds of decorations. + These decorations are called <b>Desktop Themes</b> + + Each Jetspeed Desktop page can be associated with a different theme. Themes + control some important aspect of a desktop page: + </p> + <ul> + <li>The colors, images, CSS styles that skin this page</li> + <li>The header portion of the page</li> + <li>The page margins</li> + <li>The footer portion of the page</li> + <li>Menus displayed on the page</li> + <li>Action buttons displayed on the window</li> + </ul> + <p> + Themes do not control the placement of portlets. That is handled by the Jetspeed Desktop engine, + which follows the layout plan provided by the stuctured page markup (PSML). This is the same + layout instructions applied to a portal page. You will see that themes are much simpler + content than decorators. That is because most of the content in a theme is populated by the + Jetspeed Desktop engine at runtime. + Jetspeed comes with a few desktop themes out of the box. The default desktop theme for + most pages is called <i>blue</i>. It looks like this: + </p> + <img src="../images/theme.png"/> + <p> + We are going to create a new desktop theme for this tutorial. + This new theme can be copied into our project from the <i>/JetspeedTutorial/resources/themes/express/</i> directory. + This will save you the trouble of creating all the logo images and CSS definitions. + </p> + <source> + <![CDATA[ +# Linux +cd /JetspeedTraining/workspace/jetexpress +mkdir portal/src/webapp/desktop-themes/express +cp -r ../../resources/desktop-themes/express/* portal/src/webapp/desktop-themes/express/ + +# Windows +cd \JetspeedTraining\workspace\jetexpress +mkdir portal\src\webapp\desktop-themes\express +xcopy /s ..\..\resources\desktop-themes\express\* portal\src\webapp\desktop-themes\express\ + ]]> + </source> + <subsection name="The Theme template"> + <p> + Have a look at the <i>express</i> theme directory. + Notice that there are two theme files: <i>express.jsp</i> and <i>express.vm</i> + Since there were so many complaints about no JSP support in templates, with the Desktop we + decided to require support for both. The <i>theme.properties</i> determines which templates + is active. Lets look at the Velocity template. We have macros to display-theme relative resources: + </p> + <source><![CDATA[<img src="$jetspeedDesktop.getDesktopThemeResourceUrl('images/logo.gif')" alt="Logo" border="0"/>]]></source> + </subsection> + <subsection name="Theme Variables"> + <p> + JSP and Velocity make several variables about the context of a theme available for dynamic substition of menus and content: + </p> + <table> + <tr> + <th>Variable</th> + <th>Desc</th> + <th>Usage</th> + </tr> + <tr> + <td>$jetspeedDesktop</td> + <td>Retrieve theme resources, and the name of the theme</td> + <td>${jetspeedDesktop.getDesktopTheme()</td> + </tr> + </table> + </subsection> + <subsection name="Content Divs"> + <p> + The remainder of the page is HTML DIV markup with special widget types and identifiers. + The desktop will populate these Divs with various content such as the portlets and menus. + <i>Jetspeed Menus</i> are build from a collection of portal resources + known as the <i>Portal Site</i>. The portal site is a content tree (like a file system) of portal + resources. The site can be stored in the file system or in a database. Resources can be a page, + folder, or link. Lets look at some of the available macros for displaying menus on your page. + </p> + <table> + <tr> + <th>Widget</th> + <th>Type</th> + <th>Desc</th> + </tr> + <tr> + <td>jetspeed-menu-pages</td> + <td>jetspeed:PortalTabContainer</td> + <td>relative pages menu of pages in the current folder. Used to define the page tabs above the portal.</td> + </tr> + <tr> + <td>jetspeed-menu-breadcrumbs</td> + <td>jetspeed:PortalBreadcrumbContainer</td> + <td>paths to page used to provide history links below the page tabs</td> + </tr> + <tr> + <td>jetspeed-menu-navigations</td> + <td>jetspeed:PortalAccordionContainer</td> + <td>relative subfolders and root level links menu used to define the navigation pane beside the portal.</td> + </tr> + </table> + <p> + You can also define your own menus (not covered in this tutorial). + </p> + <p> + Finally, the Div to hold the portlet content must be defined. It is just a plain HTML DIV: + </p> + <source><![CDATA[<div class="layout-${jetspeedDesktop.getDesktopTheme()}" id="jetspeedDesktop"></div>]]></source> + <p> + Notice that while decorators require two templates, desktops only require one template. + This makes for a much simpler page. + </p> + </subsection> + </section> + --> + <section name="Next"> + <p> + TODO + </p> + <p> + <a href="portlet-decoration.html">Previous</a> - <a href="default-page.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/page-decoration.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/page-decoration.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/page-decoration.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/page-decoration.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,206 @@ +<?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. +--> +<!-- + status: IN PROGRESS +--> +<document> + <properties> + <title>Page Decorators</title> + <subtitle>Customizing Page Decorators</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Page Decorators"> + <p> + Each Jetspeed page can be associated with a different page decoration. Page decorations + control some important aspect of a portal page: + </p> + <ul> + <li>The colors, images, CSS styles that skin this page</li> + <li>The header portion of the page</li> + <li>The page margins</li> + <li>The footer portion of the page</li> + <li>Menus displayed on the page</li> + <li>Action buttons displayed on the window</li> + </ul> + <p> + Decorators do not control the placement of portlets. That is handled by layouts. + Jetspeed comes with several page decorations out of the box. The default page decorator for + most pages is simply called <i>jetspeed</i>. It looks like this: + </p> + <img src="../images/02/jetspeed-page-decorator.png"/> + <p> + We are going to create a new decorator for this tutorial. + This new decorator can be copied into our project from the <i>decorations/layout/jetexpress/</i> directory + in <a href="../downloads/tutorial-resources.zip">tutorial-resources.zip</a>. + This will save you the trouble of creating all the logo images and CSS definitions. + </p> + <p> + In your project, under <i>jetexpress-portal/src/main/webapp</i>, create a directory + <i>decorations</i>. Inside it, create a directory <i>layout</i>. From jetspeed-tutorial-resources.zip, + copy the <i>decorations/layout/jetexpress/</i> directory and all its files and subdirectories + to <i>jetexpress-portal/src/main/webapp/decorations/layout</i> in your project. + </p> + <subsection name="The Header"> + <p> + Open up the file <i>decorations/layout/express-page/header.vm</i> + This is a Velocity template, very much like JSP but simpler, with no Java compilation required. + Jetspeed does support JSP-based decorators. However no one has contributed one yet. + We could spend a lot of time teaching you about all the macros available. + But lets just concentrate on changing the logos first. + </p> + <p> + Scroll down to the banner content (search for <i><div class="header"></i>). Here we added our new left-hand side logo, + consisting of a globe and the text 'jetexpress': + </p> + <source><![CDATA[<img src="#GetPageResource('images/earth.jpg')" height="28" width="28"/> +<img src="#GetPageResource('images/jetexpress-logo.gif')" height="28" width="131"/>]]></source> + <p> + <i>#GetPageResource</i> is a Velocity macro. It retrieves a resource (image, CSS, HTML) from + the decoration folder, relative to the root of the <i>jetexpress</i> decoration folder. + Besides the images, the <i>header.vm</i> is pretty much the same as the default Jetspeed decorator. + In fact we simply copied the default decorator to get us started. + This gives you a good start of customizing the page. + </p> + </subsection> + <subsection name="Velocity Variables"> + <p> + Velocity makes several variables about the context of a decoration available for dynamic substition of menus and content: + </p> + <table> + <tr> + <th>Variable</th> + <th>Desc</th> + <th>Usage</th> + </tr> + <tr> + <td>$layoutDecoration</td> + <td>Retrieve layout content from the decoration dir</td> + <td>$layoutDecoration.getResource("decorator-macros.vm")</td> + </tr> + <tr> + <td>$site</td> + <td>Retrieve menus by name</td> + <td>$site.getMenu("pages")</td> + </tr> + </table> + </subsection> + <subsection name="Menus"> + <p> + The remainder of <i>header.vm</i> is HTML markup mixed in with some important macros + for displaying <i>Jetspeed Menus</i>. Jetspeed Menus are built from a collection of portal resources + known as the <i>Portal Site</i>. The portal site is a content tree (like a file system) of portal + resources. The site can be stored in the file system or in a database. Resources can be a page, + folder, or link. Lets look at some of the available macros for displaying menus on your page. + </p> + <p> + The <i>$site</i> always has the following menus available to you at any time: + </p> + <table> + <tr> + <th>Menu</th> + <th>Desc</th> + </tr> + <tr> + <td>pages</td> + <td>relative pages menu of pages in the current folder. Used to define the page tabs above the portal.</td> + </tr> + <tr> + <td>breadcrumbs</td> + <td>paths to page used to provide history links below the page tabs</td> + </tr> + <tr> + <td>navigations</td> + <td>relative subfolders and root level links menu used to define the navigation pane beside the portal.</td> + </tr> + <tr> + <td>back</td> + <td>parent folder menu used to define the single "back" link above the portal page tabs.</td> + </tr> + </table> + <p> + You can also define your own menus (not covered in this tutorial). + </p> + <p> + There are some helper macros for creating different styles of menus. + The macros are defined in the decorator-macros.vm file: + </p> + <table> + <tr> + <th>Macro</th> + <th>Decription</th> + </tr> + <tr> + <td>#includeTabsNavigation($someMenu $LEFT_TO_RIGHT)</td> + <td>Displays a menu in a vertical tabbed navigation style.</td> + </tr> + <tr> + <td>#includeLinksNavigation($breadCrumb $LEFT_TO_RIGHT "" $BREADCRUMBS_STYLE "")</td> + <td>Displays a menu of links according to a given style.</td> + </tr> + <tr> + <td>#includeNestedLinksWithIconNavigation($standardNavs $TOP_TO_BOTTOM)</td> + <td>Displays a nested top-to-bottom menu navigation of folders, links, and pages.</td> + </tr> + <tr> + <td>#PageActionBar()</td> + <td>Not a menu, but the available actions (edit, view, help, print...) for this page</td> + </tr> + </table> + <p> + As you can see in <i>header.vm</i>, we get <i>$site.getMenu("navigations")</i> and + display a nested top-to-bottom menu navigation through the <i>#includeLinksWithIconNavigation</i> + macro: + </p> + <source><![CDATA[ +<!-- Left Navigations Menu Table Data --> +#set($navigationsStandardMenu = $site.getMenu("navigations")) + +#if(!$navigationsStandardMenu.empty) +<td valign="top" id="leftcol" > + <div id="navcolumn"> + <table cellpadding="0" cellspacing="4" border="0" width="100%"> + #includeLinksWithIconNavigation($navigationsStandardMenu $TOP_TO_BOTTOM) + </table> + </div> +</td> +#end]]></source> + </subsection> + <subsection name="The Footer"> + <p> + Open up <i>decorations/layout/jetexpress/footer.vm</i>. Here you can see the "Powered by Jetspeed" logo + displayed in the page footer: + </p> + <source><![CDATA[<img src="#GetPageResource('images/Jetspeed_blue_sm.png')" alt="Jetspeed 2 Powered" border="0" />]]></source> + </subsection> + </section> + <section name="Next"> + <p> + Now that you have a general idea of what the page decorator does, and how you can customize it, + let's have a look at how individual portlets are styled using + <a href="portlet-decoration.html">portlet decorators.</a> + </p> + <p> + <a href="customizing-overview.html">Previous</a> - <a href="portlet-decoration.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/portlet-decoration.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/portlet-decoration.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/portlet-decoration.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/02/portlet-decoration.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,82 @@ +<?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>Portlet Decorators</title> + <subtitle>Customizing Portlet Decorators</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Portlet Decorators"> + <p> + In the previous step we covered <a href="page-decoration.html">decorating page elements</a> such as the page header and footer, + and the menus. In this step we look at decorating individual portlets. + </p> + <p> + Each Jetspeed portlet window on a page can be associated with a different portlet decoration. + Portlet decorations control some important aspects of a portlet window: + </p> + <ul> + <li>The colors, images, CSS styles that skin this window</li> + <li>The title portion of the portlet</li> + <li>The borders of the window</li> + <li>Action buttons displayed on the window</li> + </ul> + <p> + Jetspeed comes with several portlet decorations out of the box. The default page decorator for + most pages is simply called <i>jetspeed</i>. It looks like this: + </p> + <p> + <p> + <img src="../images/02/jetspeed-portlet.png"/> + </p> + </p> + <p> + We are going to create a new decorator for this tutorial. + This new decorator can be copied into our project from the <i>decorations/portlet/jetexpress/</i> directory + in <a href="../downloads/tutorial-resources.zip">tutorial-resources.zip</a>. + This will save you the trouble of creating all the logo images and CSS definitions. + </p> + <p> + In your project, under <i>jetexpress-portal/src/main/webapp/decorations</i>, create a directory + <i>portlet</i>. From jetspeed-tutorial-resources.zip, + copy the <i>decorations/portlet/jetexpress/</i> directory and all its files and subdirectories + to <i>jetexpress-portal/src/main/webapp/decorations/portlet</i> in your project. + </p> + <p> + We are going to skip over the intricate details of portlet decorators, as page decorators are much more + important, as they set your organization's branding. Whereas the standard window decorators are good + enough for getting you started. Go ahead and review the content of our custom portlet decorator. + You will see that the directory layout is the same as for page decorators. The decorator simply + creates a new color variation on an existing window decorator. + </p> + </section> + <section name="Next"> + <p> + Now that you have a general idea of what a portlet decorator does, and how you can customize it, + let's have a look at <a href="desktop-theme.html">desktop themes</a>. + </p> + <p> + <a href="page-decoration.html">Previous</a> - <a href="desktop-theme.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/eclipse.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/eclipse.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/eclipse.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/eclipse.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,71 @@ +<?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>Eclipse Integration</title> + <subtitle>Eclipse Integration</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Eclipse Integration"> + <p> + Before getting started developing portlets, let's get Eclipse setup. + Maven 2 can create Eclipse project and classpath files from the project POMs, + automatically bringing in all dependencies. In the <i>jetexpress</i> project directory, + run the following Maven command: + </p> + <source>mvn eclipse:eclipse</source> + <p> + Since the project is a multi-module project, Maven will generate two project: one for each + submodule. There will be no Eclipse project for the root POM, since it does not + produce any artifact. + </p> + <p> + Now import the new projects. From the Eclipse menu, select <i>File->Import</i>, then + <i>Existing Projects into Workspace</i>, and browse to your <i>jetexpress</i> directory: + </p> + <p> + <img src="../images/03/import-project.png"/> + </p> + <p> + Two project will show up in the list: <i>jetexpress-pa</i> and <i>jetexpress-portal</i>. + Import both projects. + </p> + <p> + <img src="../images/03/import-project2.png"/> + </p> + <p> + Next, set up a classpath variable to point at your local Maven repository, effectively resolving the jars for Eclipse. + In Eclipse, go to <i>Window->Preferences->Java->Build Path->Classpath Variables->New</i> and enter the location + of your local Maven repository (typically this is inside a <i>.m2</i> directory in your user home/profile directory. + </p> + <img src="../images/03/eclipse-classpath.png"/> + </section> + <section name="Next"> + <p> + You are now ready to start developing with Eclipse, and <a href="hello.html">create your first portlet!</a> + </p> + <p> + <a href="overview.html">Previous</a> - <a href="hello.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/hello.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/hello.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/hello.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/hello.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,92 @@ +<?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>Hello World</title> + <subtitle>Hello World Portlet</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Hello World Portlet"> + <p> + Now that you have <a href="eclipse.html">set up Eclipse</a>, create a portlet in the Eclipse Java perspective. + Go to the <i>jetexpress-pa</i> project, click on the <i>org.apache.portals.tutorials</i> package, + and create a new Java class <i>BonjourMonde</i>: + </p> + <img src="../images/03/new-portlet.png"/> + <p> + You will see a new portlet in Eclipse named BonjourMonde. + Go ahead and implement the following methods: + </p> + <img src="../images/03/override-impl.png"/> + <p> + Each one of these methods is associated with a portlet mode. + Lets make these methods actually do something. + Since we are in the render phase when doView/doEdit/doHelp are called, + its probably best to render something. The RenderResponse + renders content to the output stream of the portlet. + Set the content type on the response, and then print + a <i>hello world</i> message using a Java Writer: + </p> + <source><![CDATA[@Override +protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException +{ + response.setContentType("text/html"); + response.getWriter().println("<b>Bonjour: View Mode</b>"); +}]]></source> + <p> + Repeat the same process for Edit and Help modes. + </p> + <p> + Now lets edit the file <i>portlet.xml</i> (located in <i>src/main/webapp/WEB-INF</i>), + and create a portlet descriptor entry for our portlet. Notice that the <supports> element contains + that same portlet modes that we support in our <i>do</i> methods. + </p> + <source><![CDATA[<portlet> + <description>Bonjour Monde Portlet</description> + <portlet-name>BonjourMonde</portlet-name> + <display-name>Bonjour Monde</display-name> + <portlet-class>org.apache.portals.tutorials.BonjourMonde</portlet-class> + <supports> + <mime-type>text/html</mime-type> + <portlet-mode>VIEW</portlet-mode> + <portlet-mode>EDIT</portlet-mode> + <portlet-mode>HELP</portlet-mode> + </supports> + <supported-locale>en</supported-locale> + <portlet-info> + <title>Bonjour Monde</title> + <short-title>Bonjour</short-title> + <keywords>tutorial,bonjour,hello</keywords> + </portlet-info> +</portlet>]]> + </source> + </section> + <section name="Next"> + <p> + Now that you have created a new portlet, <a href="tutorial-psml.html">let's add a page to hold that portlet.</a> + </p> + <p> + <a href="eclipse.html">Previous</a> - <a href="tutorial-psml.html">Next</a> + </p> + </section> + </body> +</document> Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/overview.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/overview.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/overview.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/overview.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,47 @@ +<?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>Portlet 101</title> + <subtitle>Portlet Development 101</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Portlet Development with the Portlet API"> + <p> + This section of the tutorial covers Portlet Development with the Java Portlet API. + </p> + <ul> + <li>Getting started with Eclipse</li> + <li>Bonjour Monde Portlet: the staple Hello World demo to get things rolling introduces the portlet.xml, as well as basic Portlet API concepts.</li> + <li>JSP Portlet: writing portlets in JSP using the Portlet API tag library.</li> + </ul> + </section> + <section name="Next"> + <p> + Before you start developing portlets, <a href="eclipse.html">set up your Eclipse development environment</a>. + </p> + <p> + <a href="../02/deploy-custom.html">Previous</a> - <a href="eclipse.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/taglib.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/taglib.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/taglib.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/taglib.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,172 @@ +<?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>Taglibs</title> + <subtitle>Portlet API Taglib</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="JSP and Portlet API Taglib"> + <p> + Now that you have <a href="tutorial-psml.html">successfully created your first portlet</a>, let's create another one. + This portlet will not have a Java class. Instead it will be written entirely in JSP. + Note that you can mix JSP and a Java class for the implementation of your + Java class<!-- as you will see in the Stock Quote portlet example-->. + Go to the <i>jetexpress-pa</i> project, browse to the <i>src/webapp/WEB-INF/</i> directory, + and create a new subdirectory here called <i>view</i>. In the <i>view</i> directory, + create a JSP file named <b>tutorial.jsp</b>. Enter the following JSP code: + </p> + <source><![CDATA[<%@ page session="true" contentType="text/html;charset=utf-8"%> +<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix='c'%> + +<portlet:defineObjects /> + +<portlet:renderURL var="max" windowState='maximized' /> +<portlet:renderURL var="normal" windowState='normal' /> +<c:out value="${renderRequest.windowState}" /> +<c:if test="${renderRequest.windowState == 'maximized'}"> + <a href='<%=normal%>'>Normal</a> +</c:if> +<c:if test="${renderRequest.windowState == 'normal'}"> + <a href='<%=max%>'>Max</a> +</c:if>]]></source> + <p> + Every portlet JSP page is required to have the <b>defineObjects</b> tag + at the top. Of course you also need the TLD reference. + Portlets need to write their links to go back to the portal, not + back to each individual servlet or JSP. That is the main difference + between writing portlets and servlets. If you are using a framework like + Struts or JSF correctly, these details should be hidden from you in + the framework. The tag that we are using here is <b><portlet:renderURL></b>. + It allows you to create a render phase link back to this portlet, going + through the portal. You can set window states, request parameters, and + portlet mode changes on the URL. The other kind of link that you can create + is an action URL: <b><portlet:actionURL></b>, which is usually + used with a HTML form to post back parameters to the portlet and initial + a blocking action phase event for the targeted portlet. + The <b><portlet:defineObjects></b> tag declares three variables for your + page: + </p> + <table> + <tr> + <th>JSP variable</th> + <th>Description</th> + </tr> + <tr> + <td>renderRequest</td> + <td>The RenderRequest object</td> + </tr> + <tr> + <td>renderResponse</td> + <td>The RenderResponse object</td> + </tr> + <tr> + <td>portletConfig</td> + <td>The PortletConfig object</td> + </tr> + </table> + <p> + Here is the portlet definition for our JSP portlet. Add it to the file <i>portlet.xml</i> + in the directory <i>src/main/webapp/WEB-INF/</i> in the <i>jetexpress-pa</i> project. + It is based on the <b>GenericServletPortlet</b>, provided by Portals Bridges + in a jar file dependency. + Notice the init-param named <b>ViewPage</b>. + This param defines which webapp-relative JSP to use for View Mode. + Similiarly we have are <b>EditPage</b> for edit mode, and <b>HelpPage</b> + for help mode. + </p> + <source><![CDATA[<portlet> + <description>The 2nd Tutorial with JSP</description> + <portlet-name>TutorialPortlet2</portlet-name> + <display-name>Tutorial Portlet 2</display-name> + <portlet-class>org.apache.portals.bridges.common.GenericServletPortlet</portlet-class> + <init-param> + <name>ViewPage</name> + <value>/WEB-INF/view/tutorial.jsp</value> + </init-param> + <init-param> + <name>EditPage</name> + <value>/WEB-INF/view/tutorial.jsp</value> + </init-param> + <init-param> + <name>HelpPage</name> + <value>/WEB-INF/view/tutorial.jsp</value> + </init-param> + <supports> + <mime-type>text/html</mime-type> + <portlet-mode>VIEW</portlet-mode> + <portlet-mode>EDIT</portlet-mode> + <portlet-mode>HELP</portlet-mode> + </supports> + <supported-locale>en</supported-locale> + <portlet-info> + <title>Tutorial Portlet</title> + <short-title>tutorial</short-title> + <keywords>tutorial,hello,JSP,taglib</keywords> + </portlet-info> + <portlet-preferences> + <preference> + <name>test</name> + <value>hello</value> + </preference> + </portlet-preferences> +</portlet>]]></source> + <p> + To use the JSP portlet, add it to the tutorial page we created in the previous step. + Add this portlet window fragment to the tutorial default page, directly underneath the BonjourMonde fragment: + </p> + <source><![CDATA[<fragment id="express-102" type="portlet" name="jetexpress-pa::TutorialPortlet2"/>]]></source> + <p>Stop Tomcat by pressing Ctrl + C in the console window where it is running.</p> + <p> + And then deploy your changes from the jetexpress project directory: + </p> + <source>mvn jetspeed:mvn -Dtarget=deploy-portal +mvn jetspeed:mvn -Dtarget=deploy-pa</source> + <p> + Finally restart Tomcat from the bin directory: + </p> + <p> + If you are using Unix: + </p> + <source>./catalina.sh run</source> + <p> + If you are using Windows: + </p> + <source>catalina.bat run</source> + <p> + The new portlet should now be on the tutorial page in your portal: + </p> + <img src="../images/03/jsp-portlet.png" alt="The JSP portlet running in the portal" /> + </section> + <section name="Next"> + <p> + Now that you know how to develop portlets, you are ready to learn <a href="../04/jetspeed-service.html">how to use Jetspeed Services + in your portlet application.</a> + </p> + <p> + <a href="tutorial-psml.html">Previous</a> - <a href="../04/jetspeed-service.html">Next</a> + </p> + </section> + </body> +</document> + Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/tutorial-psml.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/tutorial-psml.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/tutorial-psml.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/03/tutorial-psml.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,83 @@ +<?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>Adding a Page for the Tutorial Portlets</title> + <subtitle>Adding a Page for the Tutorial Portlets</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Adding a Page for the Tutorial Portlets"> + <p> + Now that you have <a href="hello.html">created a new portlet</a>, let's add a page to hold that portlet. + In the <b>jetexpress-portal</b> project, add a folder to the root of our site named + <i>src/main/webapp/WEB-INF/pages/tutorial/</i>. In addition to creating the folder, + you will need to create a <i>folder.metadata</i> file: + </p> + <source><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<folder> + <title >Tutorial</title> + <metadata name="title" xml:lang="fr">Autodidacte</metadata> + <security-constraints> + <security-constraints-ref>public-edit</security-constraints-ref> + </security-constraints> +</folder>]]></source> + <p> + Then add a new page named <b>default-page.psml</b> under the tutorial directory. + Add a portlet window to reference our new portlet: + </p> + <source><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<page> + <defaults layout-decorator="jetexpress" + portlet-decorator="jetexpress" + skin="jetexpress"/> + <title>JetExpress Tutorials</title> + <short-title>Tutorials</short-title> + <fragment id="tutorial-100" type="layout" name="jetspeed-layouts::VelocityTwoColumns"> + <fragment id="express-101" type="portlet" name="jetexpress-pa::BonjourMonde"/> + </fragment> +</page>]]></source> + <p> + Stop Tomcat and deploy your portlet and the new pages: + </p> + <source><![CDATA[mvn jetspeed:mvn -Dtarget=deploy-pa +mvn jetspeed:mvn -Dtarget=deploy-portal]]></source> + <p> + After you restart Tomcat and log in to the portal, you will see the new tutorial page + in the left menu: + </p> + <img src="../images/03/menu-tutorial.png"/> + <p> + Click on the tutorial link to see the new page with the BonjourMonde portlet: + </p> + <img src="../images/03/bonjourmonde-portlet.png"/> + </section> + <section name="Next"> + <p> + TODO + </p> + <p> + <a href="hello.html">Previous</a> - <a href="taglib.html">Next</a> + </p> + </section> + </body> +</document> + \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/04/jetspeed-service.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/04/jetspeed-service.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/04/jetspeed-service.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/04/jetspeed-service.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,304 @@ +<?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="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Jetspeed Services"> + <p> + This tutorial shows you how to use Jetspeed Services from the Jetexpress Portlet Application. + Please note that all edits, unless explicity specified otherwise, are applied to the jetexpress-pa source tree. + You will learn how to: + </p> + <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> + <p> + 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>org.apache.portals.tutorials.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. + Create a file <i>jetspeed-portlet.xml</i> in <i>src/main/webapp/WEB-INF/</i>, and add the following + services under the <js:services> element. This tells Jetspeed what services you require: + </p> + <source><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<portlet-app id="jetexpress-pa" version="1.0" + xmlns="http://portals.apache.org/jetspeed" + xmlns:js="http://portals.apache.org/jetspeed" + xmlns:dc="http://www.purl.org/dc" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd"> + + <js:services> + <js:service name='GroupManager'/> + <js:service name='PageManager'/> + <js:service name='PortalAdministration'/> + <js:service name='PortletRegistryComponent'/> + <js:service name='RoleManager'/> + <js:service name='UserManager'/> + </js:services> + +</portlet-app>]]></source> + <p> + Create a new JSP page named <i>services-tutorial.jsp</i> in the <i>src/main/webapp/WEB-INF/view/</i> directory. + Enter the following code: + </p> + <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/jsp/jstl/core" prefix='c'%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='c'%> + +<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> + <ul> + <li> + Create a portlet in the <i>org.apache.portals.tutorials</i> 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> + 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 class imports. + </p> + <p> + Implement the init(PortletConfig config) method: + </p> + <source><![CDATA[ @Override + public void init(PortletConfig config) throws PortletException { + super.init(config); + 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> + Finally implement the undefined methods using the Jetspeed Services: + </p> + <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> + </section> + <section name="The End"> + <p> + <a href="../03/taglib.html">Previous</a> + </p> + </section> + </body> +</document> + Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/before-you-start.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/before-you-start.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/before-you-start.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/before-you-start.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,98 @@ +<?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. +--> +<!-- + status: IN PROGRESS + --> +<document> + <properties> + <title>Before you start</title> + <authors> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Before you start"> + <p> + Before you <a href="01/genapp.html">start the tutorial</a>, you might want to read + some more information on the tools we use. + </p> + <subsection name="Maven"> + <p> + <a href="http://maven.apache.org/">Apache Maven</a> is a "software project management + and comprehension tool". In this tutorial we use it to manage the portal build + and deployment. + </p> + <p> + Technically it is not required to use Maven to build a custom Jetspeed portal. + But it gives you much more control over your build, dependency and release + management, and generally makes your life easier. + </p> + <p> + You will need Maven version 2.0.9 or newer. + </p> + </subsection> + <subsection name="Tomcat"> + <p> + <a href="http://tomcat.apache.org/">Apache Tomcat</a> is an + application server. You need to install it on your system. Generally this + involves nothing more than downloading and unzipping the Tomcat + distribution in a location of your choice. + </p> + <p> + Jetspeed can be deployed in other application servers, such as Websphere, but + in this tutorial we use Tomcat. + </p> + <p> + You will need Tomcat version 6.0.33 or newer. + </p> + </subsection> + <subsection name="Derby"> + <p> + <a href="http://db.apache.org/derby/">Apache Derby</a> is a lightweight + relational database. + </p> + <p> + You do not need to install Derby, it is embedded in the Jetspeed portal and is + automatically set up and populated. + </p> + <p> + Jetspeed supports other databases, such as MySQL or Oracle, but in this tutorial we + assume you use Derby. + </p> + </subsection> + <subsection name="Eclipse"> + <p> + <a href="http://www.eclipse.org/">Eclipse</a> is an integrated development environment + for Java. The use of an IDE is highly recommended as it speeds up development, + compiling and debugging. + </p> + <p> + We used Eclipse 3.4.1 when writing this tutorial. + </p> + </subsection> + </section> + <section name="Next"> + <p> + You are now ready to <a href="01/genapp.html">start the tutorial!</a> + </p> + <p> + <a href="index.html">Previous</a> - <a href="01/genapp.html">Next</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/index.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/index.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/index.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/index.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,80 @@ +<?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 Tutorial</title> + <subtitle>The Jetspeed Complete Tutorial</subtitle> + <authors> + <person name="David Sean Taylor" email="[email protected]" /> + <person name="Niels van Kampenhout" email="[email protected]" /> + </authors> + </properties> + <body> + <section name="Welcome to the Jetspeed Tutorial!"> + <p> + The Jetspeed Tutorial is a step-by-step set of instruction and source code for + creating a custom Jetspeed Portal from scratch. + </p> + <p> + When starting a new Jetspeed portal project, + we strongly recommend that you create a custom portal project, + and do not edit the Jetspeed-2 source and resources directly. + </p> + <p> + This tutorial will guide you through the steps to create a sample portal named <b>jetexpress</b>. + The goal of this tutorial is to prepare you for creating your own custom Jetspeed portal, + complete with your own set of portal pages, your company logos and text, your own set of portlet applications, + and any special integration required to run inside Jetspeed. + </p> + <subsection name='Prerequisites'> + The tutorial requires the following software installed on your system: + <ul> + <li><a href="http://java.sun.com/javase/downloads/index.jsp">Java Development Kit</a> 1.5 or higher</li> + <li><a href="http://tomcat.apache.org/">Apache Tomcat</a> 6.0.33 or higher</li> + <li><a href="http://maven.apache.org/">Maven</a> 2.2.1 or higher</li> + <li>An internet connection so that Maven can download plugins and dependencies</li> + <li>Jetspeed-2 tutorial resources <a href="downloads/tutorial-resources.zip">download</a></li> + </ul> + <p> + In the tutorial we assume you are using <a href="http://www.eclipse.org/">Eclipse</a>, but you can use any other Java IDE. + Of course you can also use your favorite text editor and command line tools combo, but an IDE is highly recommended. + </p> + </subsection> + <!-- + <subsection name='Tutorial Resources'> + <p> + During the tutorial, at times you will be asked to copy files from the <i>resources</i> directory. + You can cut and paste the <i>copy | cp</i> commands (for Windows and Linux) into a shell, + and copy the resources into your new custom portal project. These commands are not really + a part of the normal development cycle, but are there to demonstrate the incremental changes + to the portal as we progress through the tutorial. + </p> + </subsection> + --> + </section> + <section name="Next"> + <p> + Before you start the tutorial, <a href="before-you-start.html">you might want to read some more + information on the tools we are going to use.</a> + </p> + <p> + Or you can skip the extra info and <a href='01/genapp.html'>start the tutorial.</a> + </p> + </section> + </body> +</document> \ No newline at end of file Added: portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/reference/build-commands.xml URL: http://svn.apache.org/viewvc/portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/reference/build-commands.xml?rev=1691449&view=auto ============================================================================== --- portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/reference/build-commands.xml (added) +++ portals/site/jetspeed/jetspeed-2.3/jetspeed-tutorial/src/site/xdoc/reference/build-commands.xml Thu Jul 16 21:01:09 2015 @@ -0,0 +1,92 @@ +<?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>Build Commands</title> + </properties> + <body> + <section name="Build Commands for Maven-2 and Jetspeed"> + <p> + The custom portal project <a href="../01/genapp.html">generated by the Jetspeed Archetype</a> provides the + following Maven build commands. All build commands must be run from the project root directory. + </p> + <table> + <thead> + <tr> + <th>Target</th> + <th>Example command</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>install-pa</td> + <td><code>mvn jetspeed:mvn -Dtarget=install-pa</code></td> + <td>Cleans and builds the portlet application subproject.</td> + </tr> + <tr> + <td>install-portal</td> + <td><code>mvn jetspeed:mvn -Dtarget=install-portal</code></td> + <td>Cleans and builds the portal application subproject</td> + </tr> + <tr> + <td>install</td> + <td><code>mvn jetspeed:mvn -Dtarget=install</code></td> + <td>Does `install-pa' and `install-portal'.</td> + </tr> + <tr> + <td>db</td> + <td><code>mvn jetspeed:mvn -Dtarget=db</code></td> + <td>Initializes the database and seed the initial data for your custom portal.</td> + </tr> + <tr> + <td>portal-seed</td> + <td><code>mvn jetspeed:mvn -Dtarget=portal-seed</code></td> + <td>Just seeds the initial data for your custom portal without initializing the database.</td> + </tr> + <tr> + <td>deploy-pa</td> + <td><code>mvn jetspeed:mvn -Dtarget=deploy-pa</code></td> + <td>Deploys your custom portlet application.</td> + </tr> + <tr> + <td>deploy-portal</td> + <td><code>mvn jetspeed:mvn -Dtarget=deploy-portal</code></td> + <td>Deploys your custom portal.</td> + </tr> + <tr> + <td>portal-seed-dbpsml</td> + <td><code>mvn jetspeed:mvn -Dtarget=portal-seed-dbpsml</code></td> + <td>Seeds database-based pages data for your custom portal application.</td> + </tr> + <tr> + <td>deploy-portal-dbpsml</td> + <td><code>mvn jetspeed:mvn -Dtarget=deploy-portal-dbpsml</code></td> + <td>Deploys your custom portal with seeding database-based pages data.</td> + </tr> + <tr> + <td>all</td> + <td><code>mvn jetspeed:mvn -Dtarget=all</code></td> + <td>Installs and deploys your custom portal and custom portlet application, initializes and seeds the database.</td> + </tr> + </tbody> + </table> + </section> + </body> +</document> +
