<!--
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.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /><title>App xref</title>
<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../apidocs/def/configuration/App.html">View Javadoc</a></div><pre>

<a name="L1" href="#L1">1</a>   <strong>package</strong> def.configuration;
<a name="L2" href="#L2">2</a>   
<a name="L3" href="#L3">3</a>   <em>/**</em>
<a name="L4" href="#L4">4</a>   <em> * This is a sample class used for testing</em>
<a name="L5" href="#L5">5</a>   <em> *</em>
<a name="L6" href="#L6">6</a>   <em> * @author Maria Odea Ching</em>
<a name="L7" href="#L7">7</a>   <em> */</em>
<a name="L8" href="#L8">8</a>   <strong>public</strong> <strong>class</strong> <a href="../../def/configuration/App.html">App</a>
<a name="L9" href="#L9">9</a>   {
<a name="L10" href="#L10">10</a>      <strong>protected</strong> String unusedVar1;
<a name="L11" href="#L11">11</a>  
<a name="L12" href="#L12">12</a>      <strong>private</strong> <strong>int</strong> unusedVar2;
<a name="L13" href="#L13">13</a>  
<a name="L14" href="#L14">14</a>      String unusedvar3;
<a name="L15" href="#L15">15</a>  
<a name="L16" href="#L16">16</a>      <em>/**</em>
<a name="L17" href="#L17">17</a>  <em>     * The main method</em>
<a name="L18" href="#L18">18</a>  <em>     *</em>
<a name="L19" href="#L19">19</a>  <em>     * @param args  an array of strings that contains the arguments</em>
<a name="L20" href="#L20">20</a>  <em>     */</em>
<a name="L21" href="#L21">21</a>      <strong>public</strong> <strong>static</strong> <strong>void</strong> main( String[] args )
<a name="L22" href="#L22">22</a>      {
<a name="L23" href="#L23">23</a>          System.out.println( <span class="string">"Sample Application."</span> );
<a name="L24" href="#L24">24</a>      }
<a name="L25" href="#L25">25</a>  
<a name="L26" href="#L26">26</a>      <em>/**</em>
<a name="L27" href="#L27">27</a>  <em>     * Sample method</em>
<a name="L28" href="#L28">28</a>  <em>     *</em>
<a name="L29" href="#L29">29</a>  <em>     * @param str   the value to be displayed</em>
<a name="L30" href="#L30">30</a>  <em>     */</em>
<a name="L31" href="#L31">31</a>      <strong>protected</strong> <strong>void</strong> sampleMethod( String str )
<a name="L32" href="#L32">32</a>      {
<a name="L33" href="#L33">33</a>          <strong>try</strong>
<a name="L34" href="#L34">34</a>          {
<a name="L35" href="#L35">35</a>              System.out.println( str );
<a name="L36" href="#L36">36</a>          }
<a name="L37" href="#L37">37</a>          <strong>catch</strong> ( Exception e )
<a name="L38" href="#L38">38</a>          {
<a name="L39" href="#L39">39</a>  
<a name="L40" href="#L40">40</a>          }
<a name="L41" href="#L41">41</a>      }
<a name="L42" href="#L42">42</a>  
<a name="L43" href="#L43">43</a>      <em>/**</em>
<a name="L44" href="#L44">44</a>  <em>     * Test method</em>
<a name="L45" href="#L45">45</a>  <em>     *</em>
<a name="L46" href="#L46">46</a>  <em>     * @param unusedParam1</em>
<a name="L47" href="#L47">47</a>  <em>     * @param unusedParam2</em>
<a name="L48" href="#L48">48</a>  <em>     */</em>
<a name="L49" href="#L49">49</a>      <strong>public</strong> <strong>void</strong> testMethod( String unusedParam1, String unusedParam2)
<a name="L50" href="#L50">50</a>      {
<a name="L51" href="#L51">51</a>          System.out.println( <span class="string">"Test method"</span> );
<a name="L52" href="#L52">52</a>      }
<a name="L53" href="#L53">53</a>  
<a name="L54" href="#L54">54</a>  }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

