<!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" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>ShortEditor xref</title>
<link type="text/css" rel="stylesheet" href="../../../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../../../apidocs/org/apache/mina/integration/beans/ShortEditor.html">View Javadoc</a></div><pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> *  Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> *  or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> *  distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> *  regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> *  to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> *  "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> *  with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *    <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> *  Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> *  software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> *  KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> *  specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> *  under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> *</em>
<a name="19" href="#19">19</a>  <em class="jxr_comment"> */</em>
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">package</strong> org.apache.mina.integration.beans;
<a name="21" href="#21">21</a>  
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.beans.PropertyEditor;
<a name="23" href="#23">23</a>  
<a name="24" href="#24">24</a>  <em class="jxr_javadoccomment">/**</em>
<a name="25" href="#25">25</a>  <em class="jxr_javadoccomment"> * A {@link PropertyEditor} which converts a {@link String} into</em>
<a name="26" href="#26">26</a>  <em class="jxr_javadoccomment"> * a {@link Short} and vice versa.</em>
<a name="27" href="#27">27</a>  <em class="jxr_javadoccomment"> *</em>
<a name="28" href="#28">28</a>  <em class="jxr_javadoccomment"> * @author The Apache MINA Project (dev@mina.apache.org)</em>
<a name="29" href="#29">29</a>  <em class="jxr_javadoccomment"> * @version $Revision: 601229 $, $Date: 2007-12-05 08:13:18 +0100 (Wed, 05 Dec 2007) $</em>
<a name="30" href="#30">30</a>  <em class="jxr_javadoccomment"> */</em>
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/mina/integration/beans/ShortEditor.html">ShortEditor</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/mina/integration/beans/NumberEditor.html">NumberEditor</a> {
<a name="32" href="#32">32</a>      @Override
<a name="33" href="#33">33</a>      <strong class="jxr_keyword">protected</strong> Object toValue(String text, <strong class="jxr_keyword">int</strong> radix) {
<a name="34" href="#34">34</a>          <strong class="jxr_keyword">return</strong> Short.parseShort(text, radix);
<a name="35" href="#35">35</a>      }
<a name="36" href="#36">36</a>  
<a name="37" href="#37">37</a>      @Override
<a name="38" href="#38">38</a>      <strong class="jxr_keyword">protected</strong> Object defaultValue() {
<a name="39" href="#39">39</a>          <strong class="jxr_keyword">return</strong> Short.valueOf((<strong class="jxr_keyword">short</strong>) 0);
<a name="40" href="#40">40</a>      }
<a name="41" href="#41">41</a>  }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

