KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > retrotranslator > runtime > java > text > _DecimalFormat


1 /***
2  * Retrotranslator: a Java bytecode transformer that translates Java classes
3  * compiled with JDK 5.0 into classes that can be run on JVM 1.4.
4  *
5  * Copyright (c) 2005 - 2007 Taras Puchko
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the copyright holders nor the names of its
17  * contributors may be used to endorse or promote products derived from
18  * this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30  * THE POSSIBILITY OF SUCH DAMAGE.
31  */

32 package net.sf.retrotranslator.runtime.java.text;
33
34 import java.math.BigDecimal JavaDoc;
35 import java.text.*;
36 import net.sf.retrotranslator.runtime.impl.*;
37
38 /**
39  * @author Taras Puchko
40  */

41 public class _DecimalFormat {
42
43     private static final WeakIdentityTable<DecimalFormat, _DecimalFormat> formats =
44             new WeakIdentityTable<DecimalFormat, _DecimalFormat>() {
45                 protected _DecimalFormat initialValue() {
46                     return new _DecimalFormat();
47                 }
48             };
49
50     private boolean parseBigDecimal;
51
52     protected _DecimalFormat() {
53     }
54
55     @Advanced
56     public static boolean isParseBigDecimal(DecimalFormat format) {
57         _DecimalFormat value = formats.lookup(format);
58         return value != null && value.parseBigDecimal;
59     }
60
61     @Advanced
62     public static void setParseBigDecimal(DecimalFormat format, boolean newValue) {
63         formats.obtain(format).parseBigDecimal = newValue;
64     }
65
66     @Advanced
67     public static Number JavaDoc parse(DecimalFormat format, String JavaDoc source) throws ParseException {
68         return correctNumber(format, format.parse(source));
69     }
70
71     @Advanced
72     public static Number JavaDoc parse(DecimalFormat format, String JavaDoc source, ParsePosition parsePosition) {
73         return correctNumber(format, format.parse(source, parsePosition));
74     }
75
76     @Advanced
77     public static Object JavaDoc parseObject(DecimalFormat format, String JavaDoc source) throws ParseException {
78         return correctObject(format, format.parseObject(source));
79     }
80
81     @Advanced
82     public static Object JavaDoc parseObject(DecimalFormat format, String JavaDoc source, ParsePosition pos) {
83         return correctObject(format, format.parseObject(source, pos));
84     }
85
86     private static Number JavaDoc correctNumber(DecimalFormat format, Number JavaDoc number) {
87         if (number == null || !isParseBigDecimal(format)) {
88             return number;
89         }
90         if (number instanceof Double JavaDoc) {
91             Double JavaDoc result = (Double JavaDoc) number;
92             if (result.isInfinite() || result.isNaN()) {
93                 return result;
94             }
95         }
96         return new BigDecimal JavaDoc(number.toString());
97     }
98
99     private static Object JavaDoc correctObject(DecimalFormat format, Object JavaDoc object) {
100         return object instanceof Number JavaDoc ? correctNumber(format, (Number JavaDoc) object) : object;
101     }
102
103     protected static Number JavaDoc fixNumber(Format format, Number JavaDoc number) {
104         return format instanceof DecimalFormat ? correctNumber((DecimalFormat) format, number) : number;
105     }
106
107     protected static Object JavaDoc fixObject(Format format, Object JavaDoc object) {
108         return object instanceof Number JavaDoc ? fixNumber(format, (Number JavaDoc) object) : object;
109     }
110
111 }
112
Popular Tags