1 package us.codecraft.webmagic.model.formatter;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6
7
8
9
10 public abstract class BasicTypeFormatter<T> implements ObjectFormatter<T> {
11
12 @Override
13 public void initParam(String[] extra) {
14
15 }
16
17 @Override
18 public T format(String raw) throws Exception {
19 if (raw == null) {
20 return null;
21 }
22 raw = raw.trim();
23 return formatTrimmed(raw);
24 }
25
26 protected abstract T formatTrimmed(String raw) throws Exception;
27 public static final List<Class<? extends ObjectFormatter>> basicTypeFormatters = Arrays.<Class<? extends ObjectFormatter>>asList(IntegerFormatter.class,
28 LongFormatter.class, DoubleFormatter.class, FloatFormatter.class, ShortFormatter.class,
29 CharactorFormatter.class, ByteFormatter.class, BooleanFormatter.class);
30 public static final List<BasicClassDetector> basicClassDetector= Arrays.asList(new IntegerClassDetector(),
31 new LongClassDetector(),
32 new FloatClassDetector(),
33 new DoubleClassDetector(),
34 new ShortClassDetector(),
35 new ByteClassDetector(),
36 new BooleanClassDetector(),
37 new CharacterClassDetector());
38
39 public static Class<?> detectBasicClass(Class<?> type) {
40 for (BasicClassDetector detector : basicClassDetector) {
41 Class<?> detectedClass = detector.detectBasicClass(type);
42 if (detectedClass != null) {
43 return detectedClass;
44 }
45 }
46 return type;
47 }
48
49 public static class IntegerFormatter extends BasicTypeFormatter<Integer> {
50 @Override
51 public Integer formatTrimmed(String raw) throws Exception {
52 return Integer.parseInt(raw);
53 }
54
55 @Override
56 public Class<Integer> clazz() {
57 return Integer.class;
58 }
59 }
60
61 public static class LongFormatter extends BasicTypeFormatter<Long> {
62 @Override
63 public Long formatTrimmed(String raw) throws Exception {
64 return Long.parseLong(raw);
65 }
66
67 @Override
68 public Class<Long> clazz() {
69 return Long.class;
70 }
71 }
72
73 public static class DoubleFormatter extends BasicTypeFormatter<Double> {
74 @Override
75 public Double formatTrimmed(String raw) throws Exception {
76 return Double.parseDouble(raw);
77 }
78
79 @Override
80 public Class<Double> clazz() {
81 return Double.class;
82 }
83 }
84
85 public static class FloatFormatter extends BasicTypeFormatter<Float> {
86 @Override
87 public Float formatTrimmed(String raw) throws Exception {
88 return Float.parseFloat(raw);
89 }
90
91 @Override
92 public Class<Float> clazz() {
93 return Float.class;
94 }
95 }
96
97 public static class ShortFormatter extends BasicTypeFormatter<Short> {
98 @Override
99 public Short formatTrimmed(String raw) throws Exception {
100 return Short.parseShort(raw);
101 }
102
103 @Override
104 public Class<Short> clazz() {
105 return Short.class;
106 }
107 }
108
109 public static class CharactorFormatter extends BasicTypeFormatter<Character> {
110 @Override
111 public Character formatTrimmed(String raw) throws Exception {
112 return raw.charAt(0);
113 }
114
115 @Override
116 public Class<Character> clazz() {
117 return Character.class;
118 }
119 }
120
121 public static class ByteFormatter extends BasicTypeFormatter<Byte> {
122 @Override
123 public Byte formatTrimmed(String raw) throws Exception {
124 return Byte.parseByte(raw, 10);
125 }
126
127 @Override
128 public Class<Byte> clazz() {
129 return Byte.class;
130 }
131 }
132
133 public static class BooleanFormatter extends BasicTypeFormatter<Boolean> {
134 @Override
135 public Boolean formatTrimmed(String raw) throws Exception {
136 return Boolean.parseBoolean(raw);
137 }
138
139 @Override
140 public Class<Boolean> clazz() {
141 return Boolean.class;
142 }
143 }
144
145 }