jford       2004/04/08 14:53:58

  Added:       tutorial/xdocs/12 index.xml paramstylearchitecture.xml
  Log:
  Converted Chapter 12 tutorial to xdoc format
  
  Revision  Changes    Path
  1.1                  jakarta-jetspeed/tutorial/xdocs/12/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <!--
  Copyright 2004 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>
      <author email="[EMAIL PROTECTED]">David Sean Taylor</author>
      <title>Parameter Styles</title>
    </properties>
  
  <body>
  
  <section name="Parameter Styles">
  
  <p>
  Parameter styles are custom widgets which allow you to present portlet parameter 
using something other than the default input text box control. These widgets can be as 
simple as text area control or as complex as a pop up calendar control. 
  In this tutorial, you will learn how to:
  </p>
  
  <p>
  <ul>
  <li>1. Write a simple parameter style</li>
  <li>2. Modify the stock quote portlet from the VelocityPortlet tutorial to use 
parameter styles</li>
  </ul>
  </p>
  
  <p>Let's get started. From the JPortal distribution root directory, type:</p>
  
  <source>
  ant tutorial-12
  </source>
  
  <p>
  Recommend bringing up these files in your editor:
  </p>
  
  <p>
  <ul>
  <li>1. webapp/WEB-INF/conf/t12-portlets.xreg</li>
  <li>2. webapp/WEB-INF/conf/templates/vm/parameters/html/InputWithHelp.vm </li>
  <li>3. webapp/WEB-INF/conf/templates/vm/portlets/html/tutorial-stock-quote.vm </li>
  <li>4. 
webapp/src/java/com/bluesunrise/jportal/modules/actions/portlets/TutorialStockQuoteAction.java</li>
  </ul>
  </p>
  <p>
  since we will refer to them in Tutorial 12.
  </p>
  
  </section>
  </body>
  </document>
  
  
  1.1                  jakarta-jetspeed/tutorial/xdocs/12/paramstylearchitecture.xml
  
  Index: paramstylearchitecture.xml
  ===================================================================
  <?xml version="1.0"?>
  <!--
  Copyright 2004 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>
      <author email="[EMAIL PROTECTED]">David Sean Taylor</author>
      <title>Parameter Styles Architecture</title>
    </properties>
  
  <body>
  
  <section name="Parameter Styles Architecture">
  
  <p>
  Parameter styles have been implemented using the Turbine <a 
href="http://jakarta.apache.org/turbine/turbine-2/fsd.html";>module</a> mechanism. For 
those of you not familiar with Turbine, <a 
href="http://jakarta.apache.org/turbine/turbine-2/fsd.html";>modules</a> are webapp 
resources (screens, actions, layouts, navigations, etc) which may be loaded 
dynamically based on a predefined module search path. 
  </p>
  
  <p>
  A Portlet parameter is defined in a registry entry as having a custom presentation 
style by setting its type attribute to <b>"style"</b> and then adding additional 
portlet parameters to define the style name and any style options. The additional 
parameters are linked to a parameter via the parameter name. 
  </p>
  
  <p>
  <b>Popup Calendar Date Style</b>
  </p>
  
  <p>
  In the example below, we have a widget named <b>"date"</b> whose style is 
<b>"PopupCalendar"</b>, and the style format string is <b>"mm/dd/yyyy"</b>.
  </p>
  
  <p>
  <source>
  <![CDATA[
  <parameter name="date" value="" type="style" hidden="false">
      <meta-info>
          <title>Date</title>
          <description>Date with popup calendar. Format pattern: mm/dd/yyyy
          </description>
      </meta-info>
  </parameter>
  
  <parameter name="date.style" value="PopupCalendar" hidden="true"/>
  <parameter name="date.style.format" value="mm/dd/yyyy" hidden="true"/>
  ]]>
  </source>
  </p>
  
  <p>
  <b>Velocity Parameter Style</b>
  </p>
  
  <p>
  In the example below, we have a widget named <b>"password"</b> whose style is 
<b>"VelocityParameterPresentationStyle"</b>. 
  This is a very flexible parameter style, which allows you to reuse a velocity 
template to format the presentation of your widget. 
  Velocity Parameter Style templates should be placed in the Jetspeed deployment under 
<b>/WEB-INF/templates/vm/parameters/html</b> (for HTML portlets). Similarly, WML 
portlets would be found under <b>/WEB-INF/templates/vm/parameters/wml</b>. 
  The resolution of portlet templates is based on several configuration files and a 
resolution algorithm. 
  See the section on <a 
href="http://www.bluesunrise.com/jetspeed-docs/JetspeedTutorial.htm#_7.4_Template_Resolution";>Template
 Resolution</a> for more details.
  </p>
  
  <p>
  <source>
  <![CDATA[
  <parameter name="password" value="secret" type="style" hidden="false"/>
  <parameter name="password.style" 
             value="VelocityParameterPresentationStyle" hidden="true"/>
  <parameter name="password.style.template" value="Password.vm" 
             hidden="true"/>
  ]]>
  </source>
  Velocity Parameter Style
  </p>
  
  <p>
  <b>JSP Parameter Style</b>
  </p>
  
  <p>
  In the example below, we have a widget named <b>"password"</b> whose style is 
<b>"JSPParameterPresentationStyle"</b>. 
  This is a very flexible parameter style, which allows you to reuse a JSP template to 
format the presentation of your widget. 
  JSP Parameter Style templates should be placed in the Jetspeed deployment under 
<b>/WEB-INF/templates/jsp/parameters/html</b> (for HTML portlets). 
  Similarly, WML portlets would be found under 
<b>/WEB-INF/templates/jsp/parameters/wml</b>. 
  The resolution of portlet templates is based on several configuration files and a 
resolution algorithm. 
  See the section on <a 
href="http://www.bluesunrise.com/jetspeed-docs/JetspeedTutorial.htm#_7.4_Template_Resolution";>Template
 Resolution</a> for more details.
  </p>
  
  <p>
  <source>
  <![CDATA[
  <parameter name="password" value="secret" type="style" hidden="false"/>
  <parameter name="password.style" value="JspParameterPresentationStyle" 
hidden="true"/>
  <parameter name="password.style.template" value="Password.jsp" hidden="true"/>
  ]]>
  </source>
  JSP Parameter Style
  </p>
  
  <p>
  <source>
  <![CDATA[
  ## InputWithHelp.vm
  #set ($src = $parms.get("src")) ## Retrieve the "src" parameter from the $parms map
  <input type="text" name="$name" value="$value" size="30" disabled>
  <img src="$src" alt="Info" #foreach($event in $events.keySet()) 
$event="$events.get($event)"#end>
  ]]>
  </source>
  </p>
  
  <p>
  <source>
  <![CDATA[
  <parameter name="about" value="About Bluesunrise Stock Quote Web Service" 
type="style" hidden="false"/>
  <parameter name="about.style" value="VelocityParameterPresentationStyle" 
hidden="true"/>
  <parameter name="about.style.template" value="InputWithHelp.vm" hidden="true"/>
  <parameter name="about.style.src" value="images/info.gif" hidden="true"/>
  <parameter name="about.style.javascript.onclick" value="alert('For additional info 
on the stock quote web service contact [EMAIL PROTECTED]')" hidden="true"/>
  ]]>
  </source>
  </p>
  
  <p>
  <source>
  <![CDATA[
  package com.bluesunrise.jportal.modules.actions.portlets;
  
  // Turbine stuff
  import org.apache.turbine.util.Log;
  import org.apache.turbine.util.RunData;
  import org.apache.turbine.services.TurbineServices;
  
  // Velocity Stuff
  import org.apache.velocity.context.Context;
  
  // Jetspeed stuff
  import org.apache.jetspeed.portal.portlets.VelocityPortlet;
  import org.apache.jetspeed.webservices.finance.stockmarket.StockQuoteService;
  import org.apache.jetspeed.webservices.finance.stockmarket.StockQuote;
  import org.apache.jetspeed.util.PortletConfigState;
  import org.apache.jetspeed.util.StringUtils;
  
  /**
   * This action sets up the template context for retrieving stock quotes.
   *
   */
  
  public class TutorialStockQuoteAction extends VelocityPortletAction
  {
  private static final String SYMBOLS = "symbols";
  private static final String COLUMNS = "columns";
  private static final String SORT = "sort";
  private static final String QUOTES = "quotes";
  private static final String[] ALL_COLUMNS = {"Symbol","Price","Change","Volume"};
  private static final String SELECTED_COLUMNS = "selected-columns";1
  
  /**
   * Build the normal state content for this portlet.
   *
   * @param portlet The velocity-based portlet that is being built.
   * @param context The velocity context for this request.
   * @param rundata The turbine rundata context for this request.
   */
  
  protected void buildNormalContext(VelocityPortlet portlet, Context context, RunData 
rundata)
  {
      try
      {
          // Get reference to stock quote web service
          StockQuoteService service = (StockQuoteService) 
TurbineServices.getInstance().
          getService(StockQuoteService.SERVICE_NAME);
  
          // Retrieve portlet parameters
          String symbols = PortletConfigState.getParameter(portlet, rundata, SYMBOLS, 
"IBM,MSFT,ORCL,SUNW");
         String columns = PortletConfigState.getParameter(portlet, rundata, COLUMNS, 
StringUtils.arrayToString(ALL_COLUMNS, ","));2
         String[] selectedColumnsArray = StringUtils.stringToArray(columns, ",");3
         String sort = PortletConfigState.getParameter(portlet, rundata, SYMBOLS, 
"Symbol");4
  
          // Request stock quote(s) from the stock quote web service
          String[] symbolArray = StringUtils.stringToArray(symbols, ",");
          StockQuote[] quotes = service.fullQuotes(symbolArray);
  
          // Place appropriate objects in Velocity context
          context.put(QUOTES, quotes);
          context.put(SELECTED_COLUMNS, selectedColumnsArray);5
         context.put(COLUMNS, columns);6
      }
      catch (Exception e)
      {
          Log.error(e);
      }
  }
  ]]>
  </source>
  </p>
  
  <p>
  So far the changes are related to stock quote column selection:
  </p>
  
  <p>
  <ul>
  <li>1. The SELECTED_COLUMN will be placed in the Velocity context as list of 
selected column headings.</li>
  <li>2. The columns variable will hold user customized value of columns selected for 
display. Please note the usage of PortletConfigState.getParameter() method to retrieve 
the value of COLUMNS from user's PSML.</li>
  <li>3. Here we convert columns which is in a comma-delimited format to a string 
array selectedColumnsArray.</li>
  <li>4. For the sake of example, we can also retrieve a custom sort setting. We will 
not be implementing the actual sort though.</li>
  <li>5. The selectedColumnsArray is placed in the Velocity context so the template 
can use it as headings.</li>
  <li>6. The columns is placed in the Velocity context so the template can determine 
which stock quote fields to dsiplay.</li>
  </ul>
  </p>
  
  <p>
  Next, here's a modified Velocity template tutorial-stock-quote.vm used to display 
the stock quotes:
  </p>
  
  <p>
  <source>
  <![CDATA[
  ## tutorial-stock-quote.vm
  <table>
      <tr>
          <td>
              <table border="true" cellspacing="1" cellpadding="3">
                  <tr>
                      #foreach ($column in $selected-columns)
                          #headerCell ($column)
                      #end
                  </tr>
  
                  #foreach ($quote in $quotes)
                  <tr>
                      #if ($columns.indexOf("Symbol") >= 0) #entryCell ($quote.Symbol) 
#end
                      #if ($columns.indexOf("Price") >= 0) #entryCell ($quote.Price) 
#end
                      #if ($columns.indexOf("Change") >= 0) #entryCell ($quote.Change) 
#end
                      #if ($columns.indexOf("Volume") >= 0) #entryCell ($quote.Volume) 
#end
                  </tr>
                  #end
              </table>
          </td>
      </tr>
  </table>
  ]]>
  </source>
  </p>
  
  <p>
  <source>
  <![CDATA[
  <portlet-entry name="TutorialStockQuote" hidden="false" type="ref" parent="Velocity" 
application="false">
      <meta-info>
          <title>Tutorial Stock Portfolio with parameter styles</title>
          <description>Tutorial Stock Portfolio Portlet with parameter 
styles</description>
      </meta-info>
      <parameter name="template" value="tutorial-stock-quote2" hidden="true"/>
      <parameter name="action" value="portlets.TutorialStockQuoteAction2" 
hidden="true"/>
      <parameter name="sort" value="Symbol" type="style" hidden="true">
          <meta-info>
              <title>Sort</title>
              <description>Sort is not implemented</description>
          </meta-info>
      </parameter>
      <parameter name="sort.style" value="ListBox" hidden="true"/>
      <parameter name="sort.style.items" value="Symbol,Price,Change,Volume" 
hidden="true"/>
      <parameter name="columns" value="Symbols,Price,Change,Volume" type="style" 
hidden="false">
          <meta-info>
              <title>Columns</title>
              <description>Columns to display</description>
          </meta-info>
      </parameter>
      <parameter name="columns.style.items" value="Symbol,Price,Change,Volume" 
hidden="true"/>
      <parameter name="columns.style.layout" value="$eastwest" hidden="true"/>
      <parameter name="columns.style" value="CheckBoxGroup" hidden="true"/>
      <parameter name="symbols" value="MSFT,IBM,ORCL,SUNW" type="style" hidden="false">
          <meta-info>
              <title>Symbols</title>
              <description>List of comma-separated stock symbols</description>
          </meta-info>
      </parameter>
      <parameter name="symbols.style" value="TextArea" hidden="true"/>
      <parameter name="About" value="About Stock Quote Web Service" type="style" 
hidden="false"/>
      <parameter name="About.style" value="VelocityParameterPresentationStyle" 
hidden="true"/>
      <parameter name="About.style.template" value="InputWithHelp.vm" hidden="true"/>
      <parameter name="About.style.src" value="images/info.gif" hidden="true"/>
      <parameter name="About.style.javascript:onclick" value="alert('For additional 
contact [EMAIL PROTECTED]')" hidden="true"/> 
      <media-type ref="html"/>
      <category group="Jetspeed">tutorial</category>
  </portlet-entry>
  ]]>
  </source>
  </p>
  
  
  </section>
  </body>
  </document>
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to