1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.cosylab.gui.adapters;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import com.cosylab.gui.displayers.CommonDisplayer;
26 import com.cosylab.gui.displayers.DoubleConsumer;
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 public class MultiplierConverter extends SimpleConverterSupport
48 implements DoubleConsumer
49 {
50 private static final long serialVersionUID = 2621276961866711269L;
51
52 public static final String SHORT_NAME = "Multiplier";
53
54
55 private double multiplicationFactor = 1.0;
56
57
58
59
60 public MultiplierConverter()
61 {
62 this(1.0);
63 }
64
65
66
67
68
69
70 public MultiplierConverter(double factor)
71 {
72
73 setMultiplicationFactor(factor);
74
75
76 name = "MulitplierConverter";
77 }
78
79
80
81
82
83
84
85 public void setCharacteristics(Map characteristics)
86 {
87
88
89 cacheLastCharacteristics(characteristics);
90
91 HashMap map = new HashMap(characteristics);
92
93 double min;
94 double max;
95
96
97 if (map.containsKey(CommonDisplayer.C_GRAPH_MIN)
98 && map.containsKey(CommonDisplayer.C_GRAPH_MAX)) {
99 min = ((Number)map.get(CommonDisplayer.C_GRAPH_MIN)).doubleValue();
100 max = ((Number)map.get(CommonDisplayer.C_GRAPH_MAX)).doubleValue();
101
102 if (multiplicationFactor < 0) {
103 double a = max;
104 max = min;
105 min = a;
106 }
107
108 map.put(CommonDisplayer.C_GRAPH_MIN,
109 new Double(min * multiplicationFactor));
110 map.put(CommonDisplayer.C_GRAPH_MAX,
111 new Double(max * multiplicationFactor));
112 }
113
114
115 if (map.containsKey(CommonDisplayer.C_MINIMUM)
116 && map.containsKey(CommonDisplayer.C_MAXIMUM)) {
117 min = ((Number)map.get(CommonDisplayer.C_MINIMUM)).doubleValue();
118 max = ((Number)map.get(CommonDisplayer.C_MAXIMUM)).doubleValue();
119
120 if (multiplicationFactor < 0) {
121 double a = max;
122 max = min;
123 min = a;
124 }
125
126 map.put(CommonDisplayer.C_MINIMUM,
127 new Double(min * multiplicationFactor));
128 map.put(CommonDisplayer.C_MAXIMUM,
129 new Double(max * multiplicationFactor));
130 }
131
132
133 map.put(CommonDisplayer.C_UNITS,
134 "1/" + multiplicationFactor + "*" + map.get(CommonDisplayer.C_UNITS));
135
136 super.setCharacteristics(map);
137 }
138
139
140
141
142
143
144 public double getMultiplicationFactor()
145 {
146 return multiplicationFactor;
147 }
148
149
150
151
152
153
154
155
156 public void setMultiplicationFactor(double d)
157 {
158 if (d == 0.0) {
159 throw new IllegalArgumentException(
160 "It's a bad idea to set multiplication factor to 0.0.");
161 }
162
163 multiplicationFactor = d;
164
165 if (getLastCharacteristics() != null) {
166
167 setCharacteristics(getLastCharacteristics());
168 }
169 }
170
171
172
173
174
175
176 protected double transform(double value)
177 {
178 return value * multiplicationFactor;
179 }
180
181
182
183
184
185
186 protected double inverseTransform(double value)
187 {
188 return value / multiplicationFactor;
189 }
190
191
192
193
194
195 public String getName(){
196 return SHORT_NAME;
197 }
198
199
200
201
202
203 public String toString(){
204 return SHORT_NAME + ": " + getMultiplicationFactor();
205 }
206
207
208
209
210
211 @Override
212 public boolean equals(Object obj) {
213 if (!(obj instanceof MultiplierConverter)) return false;
214 MultiplierConverter c = (MultiplierConverter)obj;
215 return c.getMultiplicationFactor() == multiplicationFactor;
216 }
217 }
218
219