01: /***
02: * Retrotranslator: a Java bytecode transformer that translates Java classes
03: * compiled with JDK 5.0 into classes that can be run on JVM 1.4.
04: *
05: * Copyright (c) 2005 - 2008 Taras Puchko
06: * All rights reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * 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: */package net.sf.retrotranslator.runtime.format;
32:
33: import java.util.*;
34:
35: /**
36: * @author Taras Puchko
37: */
38: abstract class Conversion {
39:
40: private static Map<String, Conversion> map = new HashMap<String, Conversion>();
41:
42: static {
43: put("b", "B", new GeneralConversion.BooleanConversion());
44: put("h", "H", new GeneralConversion.HashConversion());
45: put("s", "S", new GeneralConversion.StringConversion());
46: put("c", "C", new CharacterConversion());
47: put("d", null, new DecimalIntegralConversion());
48: put("o", null,
49: new NondecimalIntegralConversion.OctalConversion());
50: put(
51: "x",
52: "X",
53: new NondecimalIntegralConversion.HexadecimalConversion());
54: put(
55: "e",
56: "E",
57: new FloatingPointConversion.ComputerizedScientificConversion());
58: put("f", null, new FloatingPointConversion.DecimalConversion());
59: put(
60: "g",
61: "G",
62: new FloatingPointConversion.GeneralScientificConversion());
63: put("a", "A", new HexadecimalExponentialConversion());
64: put("%", null, new PercentConversion());
65: put("n", null, new LineSeparatorConversion());
66: for (Map.Entry<Character, DateTimeConversion> entry : DateTimeConversion
67: .getConversions().entrySet()) {
68: Character c = entry.getKey();
69: put("t" + c, "T" + c, entry.getValue());
70: }
71: }
72:
73: public static Conversion getInstance(String code) {
74: return map.get(code);
75: }
76:
77: public abstract void format(FormatContext context);
78:
79: private static void put(String lower, String upper, Conversion value) {
80: map.put(lower, value);
81: if (upper != null) {
82: map.put(upper, value);
83: }
84: }
85:
86: }
|