UnitConverter.java
- package de.turnertech.ows.common;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Optional;
- public class UnitConverter {
-
- private UnitConverter() {}
- private static final Map<Unit[], Double> scalarMap = new HashMap<>();
- static {
- scalarMap.put(new Unit[]{Unit.NAUTICAL_MILE, Unit.CENTIMETRE}, 185200.0);
- scalarMap.put(new Unit[]{Unit.NAUTICAL_MILE, Unit.METRE}, 1852.0);
- scalarMap.put(new Unit[]{Unit.NAUTICAL_MILE, Unit.KILOMETRE}, 1.852);
- scalarMap.put(new Unit[]{Unit.KILOMETRE, Unit.METRE}, 1000.0);
- scalarMap.put(new Unit[]{Unit.KILOMETRE, Unit.CENTIMETRE}, 100000.0);
- scalarMap.put(new Unit[]{Unit.METRE, Unit.CENTIMETRE}, 100.0);
- scalarMap.put(new Unit[]{Unit.INCH, Unit.CENTIMETRE}, 2.54);
- scalarMap.put(new Unit[]{Unit.FOOT, Unit.METRE}, 0.3048);
- }
- public static Double putScalar(Unit from, Unit to, double scalar) {
- if(scalar == 0.0) {
- throw new ArithmeticException("Do not add a scalar value of 0 to UnitConverter. This can cause divide by 0 fails in the event the scalar is used as a divisor");
- }
- return scalarMap.put(new Unit[]{from, to}, scalar);
- }
- public static Optional<Double> convert(Unit from, Unit to, double value) {
- if(from == to) {
- return Optional.of(value);
- }
- Double scalar = scalarMap.getOrDefault(new Unit[]{from, to}, null);
- if(scalar != null) {
- return Optional.of(value * scalar);
- }
-
- Double divisor = scalarMap.getOrDefault(new Unit[]{to, from}, null);
- if(divisor != null) {
- return Optional.of(value / divisor);
- }
- return Optional.empty();
- }
- }