1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.cosylab.gui.components.numberfield;
21
22 import com.cosylab.logging.DebugLogger;
23
24 import com.cosylab.util.PrintfFormat;
25 import com.cosylab.util.StringUtilities;
26
27 import java.util.logging.Level;
28 import java.util.logging.Logger;
29
30
31
32
33
34
35
36
37
38 public class DefaultNumberDescriptor implements NumberDescriptor
39 {
40
41
42
43 public final static String NAME = "Default Visualization";
44
45
46
47
48 public final static String DESCRIPTION = "Prints value to string according to ANSI format string.";
49 private final Logger logger = DebugLogger.getLogger("DND", Level.OFF);
50 private String format;
51 private Class type = Double.class;
52 private PrintfFormat formatter;
53
54
55
56
57 public Number parseNumber(String number)
58 {
59 try {
60 if (type == Long.class) {
61 if ("-".equals(number.trim())) {
62 return new Long(0);
63 }
64
65 logger.fine("Long '" + number + "'");
66
67 double d = StringUtilities.parseDouble(number);
68
69 if (Double.isNaN(d)) {
70 return null;
71 }
72
73 return new Long((long)d);
74 }
75
76 double newValue = StringUtilities.parseDouble(number);
77
78 if (Double.isInfinite(Math.abs(newValue))) {
79 logger.fine("Infinite '" + number + "'");
80
81 return null;
82 }
83
84 if (Double.isNaN(newValue)) {
85 logger.fine("NaN '" + number + "'");
86
87 return null;
88 }
89
90 logger.fine("Dobule '" + number + "' -> " + newValue);
91
92 return new Double(newValue);
93 } catch (Exception e) {
94
95 logger.fine("Exception " + e);
96 }
97
98 logger.fine("Plain failed '" + number + "'");
99
100 return null;
101 }
102
103
104
105
106 public String printString(Number number)
107 {
108 String s = formatter.sprintf(number).replace(',', '.');
109 logger.fine("'" + number + "' -> '" + s + "'");
110
111 return s;
112 }
113
114
115
116
117 public String printEditString(Number number)
118 {
119 String s = printString(number).trim();
120
121 if (s.charAt(0) == '+') {
122 s = s.substring(1);
123 }
124
125 logger.fine("'" + number + "' -> '" + s + "'");
126 return s;
127 }
128
129
130
131
132 public String getFormat()
133 {
134 return format;
135 }
136
137
138
139
140 public void setFormat(String format)
141 {
142 logger.info("newFormat '" + format + "'");
143 this.format = format;
144 formatter = new PrintfFormat(format);
145 }
146
147
148
149
150
151
152
153 public void setNumberType(Class newClass)
154 {
155 logger.info("newClass '" + newClass + "'");
156
157 if (newClass != Double.class && newClass != Long.class) {
158 throw new IllegalArgumentException("Type '" + newClass
159 + "' not supported.");
160 }
161
162 type = newClass;
163 }
164
165
166
167
168 public Class getNumberType()
169 {
170 return type;
171 }
172 }
173
174