1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.integration.beans;
21
22 import java.beans.PropertyEditor;
23 import java.util.regex.Pattern;
24
25
26
27
28
29
30
31 public class NumberEditor extends AbstractPropertyEditor {
32 private static final Pattern DECIMAL = Pattern.compile(
33 "[-+]?[0-9]*\\.?[0-9]*(?:[Ee][-+]?[0-9]+)?");
34 private static final Pattern HEXADECIMAL = Pattern.compile("0x[0-9a-fA-F]+");
35 private static final Pattern OCTET = Pattern.compile("0[0-9][0-9]*");
36
37 @Override
38 protected final String toText(Object value) {
39 return value.toString();
40 }
41
42 @Override
43 protected final Object toValue(String text) throws IllegalArgumentException {
44 if (text.length() == 0) {
45 return defaultValue();
46 }
47
48 if (HEXADECIMAL.matcher(text).matches()) {
49 return toValue(text.substring(2), 16);
50 }
51
52 if (OCTET.matcher(text).matches()) {
53 return toValue(text, 8);
54 }
55
56 if (DECIMAL.matcher(text).matches()) {
57 return toValue(text, 10);
58 }
59
60 throw new NumberFormatException("Not a number: " + text);
61 }
62
63 protected Object toValue(String text, int radix) {
64 return Integer.parseInt(text, radix);
65 }
66
67 @Override
68 protected Object defaultValue() {
69 return Integer.valueOf(0);
70 }
71 }