1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.converter.impl;
18
19 import java.math.BigDecimal;
20 import java.math.BigInteger;
21
22 import org.seasar.cubby.action.MessageInfo;
23 import org.seasar.cubby.converter.ConversionException;
24 import org.seasar.cubby.converter.ConversionHelper;
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 BigDecimal decimal;
67 try {
68 decimal = new BigDecimal(value);
69 } catch (final NumberFormatException e) {
70 final MessageInfo messageInfo = new MessageInfo();
71 messageInfo.setKey("valid.number");
72 throw new ConversionException(messageInfo);
73 }
74
75 final BigInteger integer;
76 try {
77 integer = decimal.toBigIntegerExact();
78 } catch (final ArithmeticException e) {
79 final MessageInfo messageInfo = new MessageInfo();
80 messageInfo.setKey("valid.integer");
81 throw new ConversionException(messageInfo);
82 }
83
84 final BigInteger min = this.getMinValue();
85 final BigInteger max = this.getMaxValue();
86 if ((min != null && min.compareTo(integer) > 0)
87 || (max != null && max.compareTo(integer) < 0)) {
88 final MessageInfo messageInfo = new MessageInfo();
89 messageInfo.setKey("valid.range");
90 messageInfo.setArguments(min, max);
91 throw new ConversionException(messageInfo);
92 }
93
94 return convert(integer);
95 }
96
97
98
99
100
101
102
103
104 protected abstract Number convert(BigInteger integer);
105
106
107
108
109
110
111
112
113
114 protected abstract BigInteger getMinValue();
115
116
117
118
119
120
121
122
123
124 protected abstract BigInteger getMaxValue();
125
126
127
128
129 public String convertToString(final Object value,
130 final ConversionHelper helper) {
131 if (value == null) {
132 return null;
133 }
134 return value.toString();
135 }
136
137 }