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
32 public class NumberEditor extends AbstractPropertyEditor {
33 private static final Pattern DECIMAL = Pattern.compile(
34 "[-+]?[0-9]*\\.?[0-9]*(?:[Ee][-+]?[0-9]+)?");
35 private static final Pattern HEXADECIMAL = Pattern.compile("0x[0-9a-fA-F]+");
36 private static final Pattern OCTET = Pattern.compile("0[0-9][0-9]*");
37
38 @Override
39 protected final String toText(Object value) {
40 return value.toString();
41 }
42
43 @Override
44 protected final Object toValue(String text) throws IllegalArgumentException {
45 if (text.length() == 0) {
46 return defaultValue();
47 }
48
49 if (HEXADECIMAL.matcher(text).matches()) {
50 return toValue(text.substring(2), 16);
51 }
52
53 if (OCTET.matcher(text).matches()) {
54 return toValue(text, 8);
55 }
56
57 if (DECIMAL.matcher(text).matches()) {
58 return toValue(text, 10);
59 }
60
61 throw new NumberFormatException("Not a number: " + text);
62 }
63
64 protected Object toValue(String text, int radix) {
65 return Integer.parseInt(text, radix);
66 }
67
68 @Override
69 protected Object defaultValue() {
70 return Integer.valueOf(0);
71 }
72 }