1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.irurueta.units;
17
18 import java.text.ParseException;
19 import java.util.Locale;
20
21
22
23
24 public class MagneticFluxDensityFormatter extends MeasureFormatter<MagneticFluxDensity, MagneticFluxDensityUnit> {
25
26
27
28
29 public static final String NANOTESLA = "nT";
30
31
32
33
34 public static final String MICROTESLA = "µT";
35
36
37
38
39 public static final String MILLITESLA = "mT";
40
41
42
43
44 public static final String TESLA = "T";
45
46
47
48
49 public static final String KILOTESLA = "KT";
50
51
52
53
54 public static final String MEGATESLA = "MT";
55
56
57
58
59 public static final String GIGATESLA = "GT";
60
61
62
63
64 public MagneticFluxDensityFormatter() {
65 super();
66 }
67
68
69
70
71
72
73
74 public MagneticFluxDensityFormatter(final Locale locale) {
75 super(locale);
76 }
77
78
79
80
81
82
83
84 public MagneticFluxDensityFormatter(final MagneticFluxDensityFormatter formatter) {
85 this(formatter.getLocale());
86 }
87
88
89
90
91
92
93
94
95 @Override
96 public boolean equals(final Object obj) {
97 final var equals = super.equals(obj);
98 return (obj instanceof MagneticFluxDensityFormatter) && equals;
99 }
100
101
102
103
104
105
106
107
108 @Override
109 public int hashCode() {
110 return super.hashCode();
111 }
112
113
114
115
116
117
118
119
120
121 @Override
122 public UnitSystem getUnitSystem(final String source) {
123 return UnitSystem.METRIC;
124 }
125
126
127
128
129
130
131
132
133
134
135 @Override
136 public MagneticFluxDensity parse(final String source) throws ParseException, UnknownUnitException {
137 return internalParse(source, new MagneticFluxDensity());
138 }
139
140
141
142
143
144
145
146
147
148 @Override
149 public MagneticFluxDensityUnit findUnit(final String source) {
150 if (source.contains(NANOTESLA + " ") || source.endsWith(NANOTESLA)) {
151 return MagneticFluxDensityUnit.NANOTESLA;
152 }
153 if (source.contains(MICROTESLA + " ") || source.endsWith(MICROTESLA)) {
154 return MagneticFluxDensityUnit.MICROTESLA;
155 }
156 if (source.contains(MILLITESLA + " ") || source.endsWith(MILLITESLA)) {
157 return MagneticFluxDensityUnit.MILLITESLA;
158 }
159 if (source.contains(KILOTESLA + " ") || source.endsWith(KILOTESLA)) {
160 return MagneticFluxDensityUnit.KILOTESLA;
161 }
162 if (source.contains(MEGATESLA + " ") || source.endsWith(MEGATESLA)) {
163 return MagneticFluxDensityUnit.MEGATESLA;
164 }
165 if (source.contains(GIGATESLA + " ") || source.endsWith(GIGATESLA)) {
166 return MagneticFluxDensityUnit.GIGATESLA;
167 }
168 if (source.contains(TESLA + " ") || source.endsWith(TESLA)) {
169 return MagneticFluxDensityUnit.TESLA;
170 }
171 return null;
172 }
173
174
175
176
177
178
179
180
181
182
183
184
185
186 @Override
187 public String formatAndConvert(final Number value, final MagneticFluxDensityUnit unit, final UnitSystem system) {
188 return formatAndConvertMetric(value, unit);
189 }
190
191
192
193
194
195
196
197
198
199
200
201
202
203 public String formatAndConvertMetric(final Number value, final MagneticFluxDensityUnit unit) {
204 final var v = value.doubleValue();
205
206 final var nanoTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.NANOTESLA);
207 if (Math.abs(nanoTesla) < MagneticFluxDensityConverter.TESLAS_PER_MICROTESLA
208 / MagneticFluxDensityConverter.TESLAS_PER_NANOTESLA) {
209 return format(nanoTesla, MagneticFluxDensityUnit.NANOTESLA);
210 }
211
212 final var microTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.MICROTESLA);
213 if (Math.abs(microTesla) < (MagneticFluxDensityConverter.TESLAS_PER_MILLITESLA
214 / MagneticFluxDensityConverter.TESLAS_PER_MICROTESLA)) {
215 return format(microTesla, MagneticFluxDensityUnit.MICROTESLA);
216 }
217
218 final var milliTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.MILLITESLA);
219 if (Math.abs(milliTesla) < (1.0 / MagneticFluxDensityConverter.TESLAS_PER_MILLITESLA)) {
220 return format(milliTesla, MagneticFluxDensityUnit.MILLITESLA);
221 }
222
223 final var tesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.TESLA);
224 if (Math.abs(tesla) < MagneticFluxDensityConverter.TESLAS_PER_KILOTESLA) {
225 return format(tesla, MagneticFluxDensityUnit.TESLA);
226 }
227
228 final var kiloTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.KILOTESLA);
229 if (Math.abs(kiloTesla) < (MagneticFluxDensityConverter.TESLAS_PER_MEGATESLA
230 / MagneticFluxDensityConverter.TESLAS_PER_KILOTESLA)) {
231 return format(kiloTesla, MagneticFluxDensityUnit.KILOTESLA);
232 }
233
234 final var megaTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.MEGATESLA);
235 if (Math.abs(megaTesla) < (MagneticFluxDensityConverter.TESLAS_PER_GIGATESLA
236 / MagneticFluxDensityConverter.TESLAS_PER_MEGATESLA)) {
237 return format(megaTesla, MagneticFluxDensityUnit.MEGATESLA);
238 }
239
240 final var gigaTesla = MagneticFluxDensityConverter.convert(v, unit, MagneticFluxDensityUnit.GIGATESLA);
241 return format(gigaTesla, MagneticFluxDensityUnit.GIGATESLA);
242 }
243
244
245
246
247
248
249
250 @Override
251 public String getUnitSymbol(MagneticFluxDensityUnit unit) {
252 return switch (unit) {
253 case NANOTESLA -> NANOTESLA;
254 case MICROTESLA -> MICROTESLA;
255 case MILLITESLA -> MILLITESLA;
256 case KILOTESLA -> KILOTESLA;
257 case MEGATESLA -> MEGATESLA;
258 case GIGATESLA -> GIGATESLA;
259 default -> TESLA;
260 };
261 }
262
263
264
265
266
267
268
269
270 @Override
271 public UnitSystem getUnitSystem() {
272 return UnitSystem.METRIC;
273 }
274 }