1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.converter.impl;
17
18 import java.math.BigDecimal;
19 import java.math.BigInteger;
20
21 import org.seasar.cubby.converter.ConversionException;
22 import org.seasar.cubby.converter.ConversionHelper;
23 import org.seasar.cubby.validator.MessageInfo;
24
25
26
27
28
29
30
31
32
33
34 public abstract class AbstractIntegerNumberConverter extends AbstractConverter {
35
36
37
38
39 public Object convertToObject(final Object value,
40 final Class<?> objectType, final ConversionHelper helper)
41 throws ConversionException {
42 if (value == null) {
43 return null;
44 }
45 return convert(value.toString());
46 }
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 protected Number convert(final String value) throws ConversionException {
62 if (value == null || value.length() == 0) {
63 return null;
64 }
65
66 final BigInteger integer;
67 try {
68 integer = new BigInteger(value);
69 } catch (final NumberFormatException e) {
70 try {
71 new BigDecimal(value);
72 final MessageInfo messageInfo = new MessageInfo();
73 messageInfo.setKey("valid.integer");
74 throw new ConversionException(messageInfo);
75 } catch (final NumberFormatException e1) {
76 final MessageInfo messageInfo = new MessageInfo();
77 messageInfo.setKey("valid.number");
78 throw new ConversionException(messageInfo);
79 }
80 }
81
82 final BigInteger min = this.getMinValue();
83 final BigInteger max = this.getMaxValue();
84 if ((min != null && min.compareTo(integer) > 0)
85 || (max != null && max.compareTo(integer) < 0)) {
86 final MessageInfo messageInfo = new MessageInfo();
87 messageInfo.setKey("valid.range");
88 messageInfo.setArguments(min, max);
89 throw new ConversionException(messageInfo);
90 }
91
92 return convert(integer);
93 }
94
95
96
97
98
99
100
101
102 protected abstract Number convert(BigInteger integer);
103
104
105
106
107
108
109
110
111
112 protected abstract BigInteger getMinValue();
113
114
115
116
117
118
119
120
121
122 protected abstract BigInteger getMaxValue();
123
124
125
126
127 public String convertToString(final Object value,
128 final ConversionHelper helper) {
129 if (value == null) {
130 return null;
131 }
132 return value.toString();
133 }
134
135 }