KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > turbine > services > intake > model > BigDecimalField


1 package org.apache.turbine.services.intake.model;
2
3 /*
4  * Copyright 2001-2004 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License")
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18
19 import java.math.BigDecimal JavaDoc;
20
21 import java.text.DecimalFormatSymbols JavaDoc;
22
23 import org.apache.commons.lang.StringUtils;
24
25 import org.apache.turbine.services.intake.IntakeException;
26 import org.apache.turbine.services.intake.validator.BigDecimalValidator;
27 import org.apache.turbine.services.intake.xmlmodel.XmlField;
28
29 /**
30  * @author <a HREF="mailto:jmcnally@collab.net">John McNally</a>
31  * @author <a HREF="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
32  * @author <a HREF="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
33  * @author <a HREF="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
34  * @version $Id: BigDecimalField.java,v 1.10.2.2 2004/05/20 03:16:39 seade Exp $
35  */

36 public class BigDecimalField
37         extends Field
38 {
39     /**
40      * Constructor.
41      *
42      * @param field xml field definition object
43      * @param group xml group definition object
44      * @throws IntakeException thrown by superclass
45      */

46     public BigDecimalField(XmlField field, Group group)
47             throws IntakeException
48     {
49         super(field, group);
50     }
51
52     /**
53      * Sets the default value for a BigDecimal field
54      *
55      * @param prop Parameter for the default values
56      */

57     public void setDefaultValue(String JavaDoc prop)
58     {
59         defaultValue = null;
60
61         if (prop == null)
62         {
63             return;
64         }
65
66         defaultValue = new BigDecimal JavaDoc(prop);
67     }
68
69     /**
70      * Set the empty Value. This value is used if Intake
71      * maps a field to a parameter returned by the user and
72      * the corresponding field is either empty (empty string)
73      * or non-existant.
74      *
75      * @param prop The value to use if the field is empty.
76      */

77     public void setEmptyValue(String JavaDoc prop)
78     {
79         emptyValue = null;
80
81         if (prop == null)
82         {
83             return;
84         }
85
86         emptyValue = new BigDecimal JavaDoc(prop);
87     }
88
89     /**
90      * A suitable validator.
91      *
92      * @return A suitable validator
93      */

94     protected String JavaDoc getDefaultValidator()
95     {
96         return BigDecimalValidator.class.getName();
97     }
98
99     /**
100      * Sets the value of the field from data in the parser.
101      */

102     protected void doSetValue()
103     {
104         if (isMultiValued)
105         {
106             String JavaDoc[] inputs = parser.getStrings(getKey());
107             BigDecimal JavaDoc[] values = new BigDecimal JavaDoc[inputs.length];
108             for (int i = 0; i < inputs.length; i++)
109             {
110                 values[i] = StringUtils.isNotEmpty(inputs[i])
111                         ? canonicalizeDecimalInput(inputs[i]) : (BigDecimal JavaDoc) getEmptyValue();
112             }
113             setTestValue(values);
114         }
115         else
116         {
117             String JavaDoc val = parser.getString(getKey());
118             setTestValue(StringUtils.isNotEmpty(val) ? canonicalizeDecimalInput(val) : (BigDecimal JavaDoc) getEmptyValue());
119         }
120     }
121
122     /**
123      * Canonicalizes an user-inputted <code>BigDecimal</code> string
124      * to the system's internal format.
125      *
126      * @param bigDecimal Text conforming to a <code>BigDecimal</code>
127      * description for a set of <code>DecimalFormatSymbols</code>.
128      * @return The canonicalized representation.
129      */

130     protected final BigDecimal JavaDoc canonicalizeDecimalInput(String JavaDoc bigDecimal)
131     {
132         if (getLocale() != null)
133         {
134             DecimalFormatSymbols JavaDoc internal = new DecimalFormatSymbols JavaDoc();
135             DecimalFormatSymbols JavaDoc user = new DecimalFormatSymbols JavaDoc(getLocale());
136
137             if (!internal.equals(user))
138             {
139                 bigDecimal = bigDecimal.replace(user.getDecimalSeparator(),
140                         internal.getDecimalSeparator());
141             }
142         }
143         return new BigDecimal JavaDoc(bigDecimal);
144     }
145 }
146
Popular Tags