View Javadoc
1   /*
2    * Copyright (C) 2020 Alberto Irurueta Carro (alberto@irurueta.com)
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.irurueta.units;
17  
18  import java.math.BigDecimal;
19  
20  /**
21   * Contains a magnetic flux density value and unit.
22   */
23  public class MagneticFluxDensity extends Measurement<MagneticFluxDensityUnit> {
24  
25      /**
26       * Constructor with value and unit.
27       *
28       * @param value magnetic flux density value.
29       * @param unit  unit of magnetic flux density.
30       * @throws IllegalArgumentException if either value or unit is null.
31       */
32      public MagneticFluxDensity(final Number value, final MagneticFluxDensityUnit unit) {
33          super(value, unit);
34      }
35  
36      /**
37       * Constructor.
38       */
39      MagneticFluxDensity() {
40          super();
41      }
42  
43      /**
44       * Determines if two magnetic flux densities are equal up to a certain tolerance.
45       * If needed, this method attempts unit conversion to compare both objects.
46       *
47       * @param other     another measurement to compare.
48       * @param tolerance amount of tolerance to determine whether two magnetic flux density instances are equal or not.
49       * @return true if provided magnetic flux density is assumed ot be equal to this instance, false otherwise.
50       */
51      @Override
52      public boolean equals(final Measurement<MagneticFluxDensityUnit> other, final double tolerance) {
53          if (super.equals(other, tolerance)) {
54              return true;
55          }
56  
57          // attempt conversion to common units
58          if (other == null) {
59              return false;
60          }
61  
62          final var otherValue = MagneticFluxDensityConverter.convert(other.getValue().doubleValue(),
63                  other.getUnit(), getUnit());
64          return Math.abs(getValue().doubleValue() - otherValue) <= tolerance;
65      }
66  
67      /**
68       * Ads two magnetic flux density values and units and returns the result.
69       *
70       * @param value1     1st argument value.
71       * @param unit1      1st argument unit
72       * @param value2     2nd argument value.
73       * @param unit2      2nd argument unit.
74       * @param resultUnit unit of result to be returned.
75       * @return result of addition.
76       */
77      public static double add(
78              final double value1, final MagneticFluxDensityUnit unit1,
79              final double value2, final MagneticFluxDensityUnit unit2,
80              final MagneticFluxDensityUnit resultUnit) {
81          final var v1 = MagneticFluxDensityConverter.convert(value1, unit1, resultUnit);
82          final var v2 = MagneticFluxDensityConverter.convert(value2, unit2, resultUnit);
83          return v1 + v2;
84      }
85  
86      /**
87       * Adds two magnetic flux density values and units and returns the result.
88       *
89       * @param value1     1st argument value.
90       * @param unit1      1st argument unit.
91       * @param value2     2nd argument value.
92       * @param unit2      2nd argument unit.
93       * @param resultUnit unit of result to be returned.
94       * @return result of addition.
95       */
96      public static Number add(
97              final Number value1, final MagneticFluxDensityUnit unit1,
98              final Number value2, final MagneticFluxDensityUnit unit2,
99              final MagneticFluxDensityUnit resultUnit) {
100         return BigDecimal.valueOf(add(value1.doubleValue(), unit1, value2.doubleValue(), unit2, resultUnit));
101     }
102 
103     /**
104      * Adds two magnetic flux density instances and stores the result into
105      * provided instance.
106      *
107      * @param arg1   1st argument.
108      * @param arg2   2nd argument.
109      * @param result instance where result will be stored.
110      */
111     public static void add(
112             final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensity result) {
113         result.setValue(add(arg1.getValue(), arg1.getUnit(), arg2.getValue(), arg2.getUnit(), result.getUnit()));
114     }
115 
116     /**
117      * Adds two magnetic flux density instances.
118      *
119      * @param arg1 1st argument.
120      * @param arg2 2nd argument.
121      * @param unit unit of returned magnetic flux density.
122      * @return a new instance containing result.
123      */
124     public static MagneticFluxDensity addAndReturnNew(
125             final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensityUnit unit) {
126         final var result = new MagneticFluxDensity();
127         result.setUnit(unit);
128         add(arg1, arg2, result);
129         return result;
130     }
131 
132     /**
133      * Adds provided magnetic flux density value and unit and returns a new
134      * magnetic flux density instance using provided unit.
135      *
136      * @param value      value to be added.
137      * @param unit       unit of value to be added.
138      * @param resultUnit unit of returned magnetic flux density.
139      * @return a new magnetic flux density containing result.
140      */
141     public MagneticFluxDensity addAndReturnNew(
142             final double value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
143         final var result = new MagneticFluxDensity();
144         result.setUnit(resultUnit);
145         result.setValue(add(getValue().doubleValue(), getUnit(), value, unit, resultUnit));
146         return result;
147     }
148 
149     /**
150      * Adds provided magnetic flux density value and unit and returns a new
151      * magnetic flux density instance using provided unit.
152      *
153      * @param value      value to be added.
154      * @param unit       unit of value to be added.
155      * @param resultUnit unit of returned frequency.
156      * @return a new frequency containing result.
157      */
158     public MagneticFluxDensity addAndReturnNew(
159             final Number value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
160         final var result = new MagneticFluxDensity();
161         result.setUnit(resultUnit);
162         result.setValue(add(getValue(), getUnit(), value, unit, resultUnit));
163         return result;
164     }
165 
166     /**
167      * Adds provided magnetic flux density to current instance and returns
168      * a new magnetic flux density instance.
169      *
170      * @param b    magnetic flux density to be added.
171      * @param unit unit of returned magnetic flux density.
172      * @return a new magnetic flux density containing result.
173      */
174     public MagneticFluxDensity addAndReturnNew(final MagneticFluxDensity b, final MagneticFluxDensityUnit unit) {
175         return addAndReturnNew(this, b, unit);
176     }
177 
178     /**
179      * Adds provided magnetic flux density value and unit and updates current
180      * magnetic flux density instance.
181      *
182      * @param value magnetic flux density value to be added.
183      * @param unit  unit of magnetic flux density value.
184      */
185     public void add(final double value, final MagneticFluxDensityUnit unit) {
186         setValue(add(getValue(), getUnit(), value, unit, getUnit()));
187     }
188 
189     /**
190      * Adds provided magnetic flux density value and unit and updates current
191      * magnetic flux density instance.
192      *
193      * @param value magnetic flux density value to be added.
194      * @param unit  unit of magnetic flux density value.
195      */
196     public void add(final Number value, final MagneticFluxDensityUnit unit) {
197         setValue(add(getValue(), getUnit(), value, unit, getUnit()));
198     }
199 
200     /**
201      * Adds provided magnetic flux density and updates current magnetic
202      * flux density instance.
203      *
204      * @param magneticFluxDensity magnetic flux density to be added.
205      */
206     public void add(final MagneticFluxDensity magneticFluxDensity) {
207         add(this, magneticFluxDensity, this);
208     }
209 
210     /**
211      * Adds provided magnetic flux density and stores the result into
212      * provided magnetic flux density instance.
213      *
214      * @param b      magnetic flux density to be added.
215      * @param result instance where result will be stored.
216      */
217     public void add(final MagneticFluxDensity b, final MagneticFluxDensity result) {
218         add(this, b, result);
219     }
220 
221     /**
222      * Subtracts two magnetic flux density values and units and returns the
223      * result.
224      *
225      * @param value1     1st argument value.
226      * @param unit1      1st argument unit.
227      * @param value2     2nd argument value.
228      * @param unit2      2nd argument unit.
229      * @param resultUnit unit of result to be returned.
230      * @return result of subtraction.
231      */
232     public static double subtract(
233             final double value1, final MagneticFluxDensityUnit unit1,
234             final double value2, final MagneticFluxDensityUnit unit2,
235             final MagneticFluxDensityUnit resultUnit) {
236         final var v1 = MagneticFluxDensityConverter.convert(value1, unit1, resultUnit);
237         final var v2 = MagneticFluxDensityConverter.convert(value2, unit2, resultUnit);
238         return v1 - v2;
239     }
240 
241     /**
242      * Subtracts two magnetic flux density values and units and returns the
243      * result.
244      *
245      * @param value1     1st argument value.
246      * @param unit1      1st argument unit.
247      * @param value2     2nd argument value.
248      * @param unit2      2nd argument unit.
249      * @param resultUnit unit of result to be returned.
250      * @return result of subtraction.
251      */
252     public static Number subtract(
253             final Number value1, final MagneticFluxDensityUnit unit1,
254             final Number value2, final MagneticFluxDensityUnit unit2,
255             final MagneticFluxDensityUnit resultUnit) {
256         return BigDecimal.valueOf(subtract(value1.doubleValue(), unit1, value2.doubleValue(), unit2, resultUnit));
257     }
258 
259     /**
260      * Subtracts two magnetic flux density instances and stores the result
261      * into provided instance.
262      *
263      * @param arg1   1st argument.
264      * @param arg2   2nd argument.
265      * @param result instance where result will be stored.
266      */
267     public static void subtract(
268             final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensity result) {
269         result.setValue(subtract(arg1.getValue(), arg1.getUnit(), arg2.getValue(), arg2.getUnit(), result.getUnit()));
270     }
271 
272     /**
273      * Subtracts two magnetic flux density instances.
274      *
275      * @param arg1 1st argument.
276      * @param arg2 2nd argument.
277      * @param unit unit of returned magnetic flux density.
278      * @return a new instance containing result.
279      */
280     public static MagneticFluxDensity subtractAndReturnNew(
281             final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensityUnit unit) {
282         final var result = new MagneticFluxDensity();
283         result.setUnit(unit);
284         subtract(arg1, arg2, result);
285         return result;
286     }
287 
288     /**
289      * Subtracts provided magnetic flux density value and unit and returns a
290      * new magnetic flux density instance using provided unit.
291      *
292      * @param value      value to be subtracted.
293      * @param unit       unit of value to be subtracted.
294      * @param resultUnit unit of returned magnetic flux density.
295      * @return a new magnetic flux density containing result.
296      */
297     public MagneticFluxDensity subtractAndReturnNew(
298             final double value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
299         final var result = new MagneticFluxDensity();
300         result.setUnit(resultUnit);
301         result.setValue(subtract(getValue().doubleValue(), getUnit(), value, unit, resultUnit));
302         return result;
303     }
304 
305     /**
306      * Subtracts provided magnetic flux density value and unit and returns a
307      * new magnetic flux density instance using provided unit.
308      *
309      * @param value      value to be subtracted.
310      * @param unit       unit of value to be subtracted.
311      * @param resultUnit unit of returned magnetic flux density.
312      * @return a new magnetic flux density containing result.
313      */
314     public MagneticFluxDensity subtractAndReturnNew(
315             final Number value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
316         final var result = new MagneticFluxDensity();
317         result.setUnit(resultUnit);
318         result.setValue(subtract(getValue(), getUnit(), value, unit, resultUnit));
319         return result;
320     }
321 
322     /**
323      * Subtracts provided magnetic flux density from current instance and
324      * returns a new instance.
325      *
326      * @param b    magnetic flux density to be subtracted.
327      * @param unit unit of returned magnetic flux density.
328      * @return a new magnetic flux density containing result.
329      */
330     public MagneticFluxDensity subtractAndReturnNew(final MagneticFluxDensity b, final MagneticFluxDensityUnit unit) {
331         return subtractAndReturnNew(this, b, unit);
332     }
333 
334     /**
335      * Subtracts provided magnetic flux density value and unit and updates
336      * current magnetic flux density instance.
337      *
338      * @param value magnetic flux density value to be subtracted.
339      * @param unit  unit of magnetic flux density value.
340      */
341     public void subtract(final double value, final MagneticFluxDensityUnit unit) {
342         setValue(subtract(getValue(), getUnit(), value, unit, getUnit()));
343     }
344 
345     /**
346      * Subtracts provided magnetic flux density value and unit and update current
347      * magnetic flux density instance.
348      *
349      * @param value magnetic flux density value to be subtracted.
350      * @param unit  unit of magnetic flux density value.
351      */
352     public void subtract(final Number value, final MagneticFluxDensityUnit unit) {
353         setValue(subtract(getValue(), getUnit(), value, unit, getUnit()));
354     }
355 
356     /**
357      * Subtracts provided magnetic flux density and updates current magnetic
358      * flux density.
359      *
360      * @param b magnetic flux density to be subtracted.
361      */
362     public void subtract(final MagneticFluxDensity b) {
363         subtract(this, b, this);
364     }
365 
366     /**
367      * Subtracts provided magnetic flux density and stores the result into
368      * provided magnetic flux density.
369      *
370      * @param b      magnetic flux density to be subtracted.
371      * @param result instance where result will be stored.
372      */
373     public void subtract(final MagneticFluxDensity b, final MagneticFluxDensity result) {
374         subtract(this, b, result);
375     }
376 }