View Javadoc
1   package us.codecraft.webmagic.model.formatter;
2   
3   import java.util.Arrays;
4   import java.util.List;
5   
6   /**
7    * @author code4crafter@gmail.com
8    * @since 0.3.2
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 }