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