diff --git a/bom/compile/pom.xml b/bom/compile/pom.xml index 3a41f764d6e..f1dcf5df360 100644 --- a/bom/compile/pom.xml +++ b/bom/compile/pom.xml @@ -151,19 +151,19 @@ javax.measure unit-api - 1.0 + 2.1.2 compile - tec.uom - uom-se - 1.0.10 + si.uom + si-units + 2.0.1 compile - tec.uom.lib - uom-lib-common - 1.0.3 + tech.units + indriya + 2.1.2 compile diff --git a/bom/runtime/pom.xml b/bom/runtime/pom.xml index 3061040328c..48c817b2341 100644 --- a/bom/runtime/pom.xml +++ b/bom/runtime/pom.xml @@ -436,22 +436,41 @@ + + jakarta.annotation + jakarta.annotation-api + 2.0.0 + compile + + + jakarta.inject + jakarta.inject-api + 2.0.0 + compile + javax.measure unit-api - 1.0 + 2.1.2 compile + - tec.uom - uom-se - 1.0.10 + org.openhab.osgiify + si.uom.si-units + 2.0.1 compile - tec.uom.lib - uom-lib-common - 1.0.3 + si.uom + si-quantity + 2.0.1 + compile + + + tech.units + indriya + 2.1.2 compile diff --git a/bundles/org.openhab.core.persistence/src/test/java/org/openhab/core/persistence/extensions/PersistenceExtensionsTest.java b/bundles/org.openhab.core.persistence/src/test/java/org/openhab/core/persistence/extensions/PersistenceExtensionsTest.java index c88fbc24ae4..976b90f1f21 100644 --- a/bundles/org.openhab.core.persistence/src/test/java/org/openhab/core/persistence/extensions/PersistenceExtensionsTest.java +++ b/bundles/org.openhab.core.persistence/src/test/java/org/openhab/core/persistence/extensions/PersistenceExtensionsTest.java @@ -142,22 +142,22 @@ public void testHistoricStateQuantityType() { ZonedDateTime.of(2012, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); assertThat(historicItem.getState(), is(instanceOf(QuantityType.class))); - assertEquals("2012.0 °C", historicItem.getState().toString()); + assertEquals("2012 °C", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(quantityItem, ZonedDateTime.of(2011, 12, 31, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); - assertEquals("2011.0 °C", historicItem.getState().toString()); + assertEquals("2011 °C", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(quantityItem, ZonedDateTime.of(2011, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); - assertEquals("2011.0 °C", historicItem.getState().toString()); + assertEquals("2011 °C", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(quantityItem, ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); - assertEquals("2000.0 °C", historicItem.getState().toString()); + assertEquals("2000 °C", historicItem.getState().toString()); // default persistence service historicItem = PersistenceExtensions.historicState(quantityItem, @@ -210,19 +210,19 @@ public void testMaximumSinceQuantityType() { ZonedDateTime.of(2012, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); assertThat(historicItem.getState(), is(instanceOf(QuantityType.class))); - assertEquals("1.0 °C", historicItem.getState().toString()); + assertEquals("1 °C", historicItem.getState().toString()); historicItem = PersistenceExtensions.maximumSince(quantityItem, ZonedDateTime.of(2005, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); - assertEquals("2012.0 °C", historicItem.getState().toString()); + assertEquals("2012 °C", historicItem.getState().toString()); assertEquals(ZonedDateTime.of(2012, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), historicItem.getTimestamp()); // default persistence service historicItem = PersistenceExtensions.maximumSince(quantityItem, ZonedDateTime.of(2005, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault())); assertNotNull(historicItem); - assertEquals("1.0 °C", historicItem.getState().toString()); + assertEquals("1 °C", historicItem.getState().toString()); } @Test @@ -281,19 +281,19 @@ public void testMinimumSinceQuantityType() { ZonedDateTime.of(1940, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); assertThat(historicItem.getState(), is(instanceOf(QuantityType.class))); - assertEquals("5000.0 °C", historicItem.getState().toString()); + assertEquals("5000 °C", historicItem.getState().toString()); historicItem = PersistenceExtensions.minimumSince(quantityItem, ZonedDateTime.of(2005, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), TestPersistenceService.ID); assertNotNull(historicItem); - assertEquals("2005.0 °C", historicItem.getState().toString()); + assertEquals("2005 °C", historicItem.getState().toString()); assertEquals(ZonedDateTime.of(2005, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()), historicItem.getTimestamp()); // default persistence service historicItem = PersistenceExtensions.minimumSince(quantityItem, ZonedDateTime.of(2005, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault())); assertNotNull(historicItem); - assertEquals("5000.0 °C", historicItem.getState().toString()); + assertEquals("5000 °C", historicItem.getState().toString()); } @Test @@ -601,22 +601,22 @@ public void testPreviousStateQuantityTypeNoSkip() { TestPersistenceService.ID); assertNotNull(prevStateItem); assertThat(prevStateItem.getState(), is(instanceOf(QuantityType.class))); - assertEquals("2012.0 °C", prevStateItem.getState().toString()); + assertEquals("2012 °C", prevStateItem.getState().toString()); quantityItem.setState(QuantityType.valueOf(4321, SIUnits.CELSIUS)); prevStateItem = PersistenceExtensions.previousState(quantityItem, false, TestPersistenceService.ID); assertNotNull(prevStateItem); - assertEquals("2012.0 °C", prevStateItem.getState().toString()); + assertEquals("2012 °C", prevStateItem.getState().toString()); quantityItem.setState(QuantityType.valueOf(2012, SIUnits.CELSIUS)); prevStateItem = PersistenceExtensions.previousState(quantityItem, false, TestPersistenceService.ID); assertNotNull(prevStateItem); - assertEquals("2012.0 °C", prevStateItem.getState().toString()); + assertEquals("2012 °C", prevStateItem.getState().toString()); quantityItem.setState(QuantityType.valueOf(3025, SIUnits.CELSIUS)); prevStateItem = PersistenceExtensions.previousState(quantityItem, false, TestPersistenceService.ID); assertNotNull(prevStateItem); - assertEquals("2012.0 °C", prevStateItem.getState().toString()); + assertEquals("2012 °C", prevStateItem.getState().toString()); // default persistence service prevStateItem = PersistenceExtensions.previousState(quantityItem, false); @@ -640,7 +640,7 @@ public void testPreviousStateQuantityTypeSkip() { quantityItem.setState(QuantityType.valueOf(2012, SIUnits.CELSIUS)); HistoricItem prevStateItem = PersistenceExtensions.previousState(quantityItem, true, TestPersistenceService.ID); assertNotNull(prevStateItem); - assertEquals("2011.0 °C", prevStateItem.getState().toString()); + assertEquals("2011 °C", prevStateItem.getState().toString()); // default persistence service prevStateItem = PersistenceExtensions.previousState(quantityItem, true); diff --git a/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemHysteresisStateProfile.java b/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemHysteresisStateProfile.java index 9177deb5d10..b0acffd83d4 100644 --- a/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemHysteresisStateProfile.java +++ b/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemHysteresisStateProfile.java @@ -32,7 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tec.uom.se.AbstractUnit; +import tech.units.indriya.AbstractUnit; /*** * This is the default implementation for a {@link SystemHysteresisStateProfile}. diff --git a/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemRangeStateProfile.java b/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemRangeStateProfile.java index b3d05a78fac..8a4ae5399f9 100644 --- a/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemRangeStateProfile.java +++ b/bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/profiles/SystemRangeStateProfile.java @@ -32,7 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tec.uom.se.AbstractUnit; +import tech.units.indriya.AbstractUnit; /*** * This is the default implementation for a {@link SystemRangeStateProfile}. diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityType.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityType.java index c22c1e3a58c..dc0a45afaf5 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityType.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityType.java @@ -24,6 +24,7 @@ import javax.measure.Dimension; import javax.measure.IncommensurableException; import javax.measure.Quantity; +import javax.measure.Quantity.Scale; import javax.measure.UnconvertibleException; import javax.measure.Unit; import javax.measure.UnitConverter; @@ -41,9 +42,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tec.uom.se.AbstractUnit; -import tec.uom.se.function.QuantityFunctions; -import tec.uom.se.quantity.Quantities; +import tech.units.indriya.AbstractUnit; +import tech.units.indriya.quantity.Quantities; +import tech.uom.lib.common.function.QuantityFunctions; /** * The measure type extends DecimalType to handle physical unit measurement @@ -97,7 +98,13 @@ public QuantityType(String value) { // getQuantity needs a space between numeric value and unit String formatted = String.join(" ", constituents); - quantity = (Quantity) Quantities.getQuantity(formatted); + if (!formatted.contains(" ")) { + BigDecimal bd = new BigDecimal(value); + quantity = (Quantity) Quantities.getQuantity(bd, AbstractUnit.ONE, Scale.RELATIVE); + } else { + Quantity absoluteQuantity = (Quantity) Quantities.getQuantity(formatted); + quantity = Quantities.getQuantity(absoluteQuantity.getValue(), absoluteQuantity.getUnit(), Scale.RELATIVE); + } } /** @@ -111,7 +118,7 @@ public QuantityType(String value) { public QuantityType(Number value, Unit unit) { // Avoid scientific notation for double BigDecimal bd = new BigDecimal(value.toString()); - quantity = (Quantity) Quantities.getQuantity(bd, unit); + quantity = (Quantity) Quantities.getQuantity(bd, unit, Scale.RELATIVE); } /** @@ -156,7 +163,7 @@ public boolean equals(@Nullable Object obj) { return false; } QuantityType other = (QuantityType) obj; - if (!quantity.getUnit().getDimension().equals(other.quantity.getUnit().getDimension())) { + if (!quantity.getUnit().isCompatible(other.quantity.getUnit())) { return false; } else if (compareTo((QuantityType) other) != 0) { return false; @@ -363,7 +370,7 @@ public QuantityType add(QuantityType state) { * @return the negated value of this QuantityType. */ public QuantityType negate() { - return new QuantityType<>(quantity.multiply(-1)); + return new QuantityType<>(quantity.negate()); } /** diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityTypeArithmeticGroupFunction.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityTypeArithmeticGroupFunction.java index 45b9caeff41..871f262a7bf 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityTypeArithmeticGroupFunction.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/types/QuantityTypeArithmeticGroupFunction.java @@ -92,8 +92,11 @@ public State calculate(@Nullable Set items) { sum = itemState; // initialise the sum from the first item count++; } else { - sum = sum.add(itemState); - count++; + itemState = itemState.toUnit(sum.getUnit()); + if (itemState != null) { + sum = sum.add(itemState); + count++; + } } } } @@ -131,8 +134,11 @@ public State calculate(@Nullable Set items) { if (itemState != null) { if (sum == null) { sum = itemState; // initialise the sum from the first item - } else if (sum.getUnit().isCompatible(itemState.getUnit())) { - sum = sum.add(itemState); + } else { + itemState = itemState.toUnit(sum.getUnit()); + if (itemState != null) { + sum = sum.add(itemState); + } } } } diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/BinaryPrefix.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/BinaryPrefix.java index 190eca52d36..030f48ba86c 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/BinaryPrefix.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/BinaryPrefix.java @@ -20,9 +20,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault; -import tec.uom.lib.common.function.SymbolSupplier; -import tec.uom.lib.common.function.UnitConverterSupplier; -import tec.uom.se.function.RationalConverter; +import tech.units.indriya.function.MultiplyConverter; +import tech.uom.lib.common.function.SymbolSupplier; +import tech.uom.lib.common.function.UnitConverterSupplier; /** * The binary prefixes used to derive units by specific powers of 2. @@ -31,14 +31,14 @@ */ @NonNullByDefault public enum BinaryPrefix implements SymbolSupplier, UnitConverterSupplier { - YOBI("Yi", new RationalConverter(BigInteger.valueOf(2).pow(80), BigInteger.ONE)), - ZEBI("Zi", new RationalConverter(BigInteger.valueOf(2).pow(70), BigInteger.ONE)), - EXBI("Ei", new RationalConverter(BigInteger.valueOf(2).pow(60), BigInteger.ONE)), - PEBI("Pi", new RationalConverter(BigInteger.valueOf(2).pow(50), BigInteger.ONE)), - TEBI("Ti", new RationalConverter(BigInteger.valueOf(2).pow(40), BigInteger.ONE)), - GIBI("Gi", new RationalConverter(BigInteger.valueOf(2).pow(30), BigInteger.ONE)), - MEBI("Mi", new RationalConverter(BigInteger.valueOf(2).pow(20), BigInteger.ONE)), - KIBI("Ki", new RationalConverter(BigInteger.valueOf(2).pow(10), BigInteger.ONE)); + YOBI("Yi", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(80), BigInteger.ONE)), + ZEBI("Zi", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(70), BigInteger.ONE)), + EXBI("Ei", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(60), BigInteger.ONE)), + PEBI("Pi", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(50), BigInteger.ONE)), + TEBI("Ti", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(40), BigInteger.ONE)), + GIBI("Gi", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(30), BigInteger.ONE)), + MEBI("Mi", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(20), BigInteger.ONE)), + KIBI("Ki", MultiplyConverter.ofRational(BigInteger.valueOf(2).pow(10), BigInteger.ONE)); /** * The symbol of this prefix, as returned by {@link #getSymbol}. @@ -61,7 +61,7 @@ public enum BinaryPrefix implements SymbolSupplier, UnitConverterSupplier { * @param symbol the symbol of this prefix. * @param converter the associated unit converter. */ - BinaryPrefix(String symbol, RationalConverter converter) { + BinaryPrefix(String symbol, MultiplyConverter converter) { this.symbol = symbol; this.converter = converter; } diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/CustomUnits.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/CustomUnits.java index 041d6a09dfb..efffe825f3e 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/CustomUnits.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/CustomUnits.java @@ -12,7 +12,7 @@ */ package org.openhab.core.library.unit; -import tec.uom.se.AbstractSystemOfUnits; +import tech.units.indriya.AbstractSystemOfUnits; /** * Base class for all custom unit classes added in openHAB. diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/ImperialUnits.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/ImperialUnits.java index bb88bb3451e..b324e06bba6 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/ImperialUnits.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/ImperialUnits.java @@ -23,13 +23,12 @@ import org.eclipse.jdt.annotation.NonNullByDefault; -import tec.uom.se.format.SimpleUnitFormat; -import tec.uom.se.function.AddConverter; -import tec.uom.se.function.MultiplyConverter; -import tec.uom.se.function.RationalConverter; -import tec.uom.se.unit.ProductUnit; -import tec.uom.se.unit.TransformedUnit; -import tec.uom.se.unit.Units; +import tech.units.indriya.format.SimpleUnitFormat; +import tech.units.indriya.function.AddConverter; +import tech.units.indriya.function.MultiplyConverter; +import tech.units.indriya.unit.ProductUnit; +import tech.units.indriya.unit.TransformedUnit; +import tech.units.indriya.unit.Units; /** * Imperial units used for the United States and Liberia. @@ -45,30 +44,30 @@ public final class ImperialUnits extends CustomUnits { /** Additionally defined units to be used in openHAB **/ public static final Unit INCH_OF_MERCURY = addUnit(new TransformedUnit<>("inHg", Units.PASCAL, - new RationalConverter(BigInteger.valueOf(3386388), BigInteger.valueOf(1000)))); + MultiplyConverter.ofRational(BigInteger.valueOf(3386388), BigInteger.valueOf(1000)))); - public static final Unit FAHRENHEIT = addUnit(new TransformedUnit<>("°F", Units.KELVIN, - new RationalConverter(BigInteger.valueOf(5), BigInteger.valueOf(9)).concatenate(new AddConverter(459.67)))); + public static final Unit FAHRENHEIT = addUnit( + new TransformedUnit<>("°F", Units.KELVIN, MultiplyConverter + .ofRational(BigInteger.valueOf(5), BigInteger.valueOf(9)).concatenate(new AddConverter(459.67)))); public static final Unit MILES_PER_HOUR = addUnit(new TransformedUnit<>("mph", Units.KILOMETRE_PER_HOUR, - new RationalConverter(BigInteger.valueOf(1609344), BigInteger.valueOf(1000000)))); + MultiplyConverter.ofRational(BigInteger.valueOf(1609344), BigInteger.valueOf(1000000)))); /** Length **/ public static final Unit INCH = addUnit(new TransformedUnit<>("in", Units.METRE, - new RationalConverter(BigInteger.valueOf(254), BigInteger.valueOf(10000)))); + MultiplyConverter.ofRational(BigInteger.valueOf(254), BigInteger.valueOf(10000)))); - public static final Unit FOOT = addUnit(new TransformedUnit<>("ft", INCH, new MultiplyConverter(12.0))); + public static final Unit FOOT = addUnit(new TransformedUnit<>("ft", INCH, MultiplyConverter.of(12.0))); - public static final Unit YARD = addUnit(new TransformedUnit<>("yd", FOOT, new MultiplyConverter(3.0))); + public static final Unit YARD = addUnit(new TransformedUnit<>("yd", FOOT, MultiplyConverter.of(3.0))); - public static final Unit CHAIN = addUnit(new TransformedUnit<>("ch", YARD, new MultiplyConverter(22.0))); + public static final Unit CHAIN = addUnit(new TransformedUnit<>("ch", YARD, MultiplyConverter.of(22.0))); - public static final Unit FURLONG = addUnit( - new TransformedUnit<>("fur", CHAIN, new MultiplyConverter(10.0))); + public static final Unit FURLONG = addUnit(new TransformedUnit<>("fur", CHAIN, MultiplyConverter.of(10.0))); - public static final Unit MILE = addUnit(new TransformedUnit<>("mi", FURLONG, new MultiplyConverter(8.0))); + public static final Unit MILE = addUnit(new TransformedUnit<>("mi", FURLONG, MultiplyConverter.of(8.0))); - public static final Unit LEAGUE = addUnit(new TransformedUnit<>("lea", MILE, new MultiplyConverter(3.0))); + public static final Unit LEAGUE = addUnit(new TransformedUnit<>("lea", MILE, MultiplyConverter.of(3.0))); public static final Unit SQUARE_FOOT = addUnit(new ProductUnit<>(FOOT.multiply(FOOT))); public static final Unit CUBIC_FOOT = addUnit(new ProductUnit<>(SQUARE_FOOT.multiply(FOOT))); diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/MetricPrefix.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/MetricPrefix.java index a9a6d40be5f..887a6517945 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/MetricPrefix.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/MetricPrefix.java @@ -19,7 +19,7 @@ /** * The metric prefixes used to derive units by specific powers of 10. This delegates to the enum instances of - * {@link tec.uom.se.unit.MetricPrefix}. + * {@link javax.measure.MetricPrefix}. * * @author Henning Treu - Initial contribution */ @@ -27,82 +27,82 @@ public class MetricPrefix { public static > Unit YOTTA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.YOTTA(unit); + return javax.measure.MetricPrefix.YOTTA(unit); } public static > Unit ZETTA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.ZETTA(unit); + return javax.measure.MetricPrefix.ZETTA(unit); } public static > Unit EXA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.EXA(unit); + return javax.measure.MetricPrefix.EXA(unit); } public static > Unit PETA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.PETA(unit); + return javax.measure.MetricPrefix.PETA(unit); } public static > Unit TERA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.TERA(unit); + return javax.measure.MetricPrefix.TERA(unit); } public static > Unit GIGA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.GIGA(unit); + return javax.measure.MetricPrefix.GIGA(unit); } public static > Unit MEGA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.MEGA(unit); + return javax.measure.MetricPrefix.MEGA(unit); } public static > Unit KILO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.KILO(unit); + return javax.measure.MetricPrefix.KILO(unit); } public static > Unit HECTO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.HECTO(unit); + return javax.measure.MetricPrefix.HECTO(unit); } public static > Unit DEKA(Unit unit) { - return tec.uom.se.unit.MetricPrefix.DEKA(unit); + return javax.measure.MetricPrefix.DEKA(unit); } public static > Unit DECI(Unit unit) { - return tec.uom.se.unit.MetricPrefix.DECI(unit); + return javax.measure.MetricPrefix.DECI(unit); } public static > Unit CENTI(Unit unit) { - return tec.uom.se.unit.MetricPrefix.CENTI(unit); + return javax.measure.MetricPrefix.CENTI(unit); } public static > Unit MILLI(Unit unit) { - return tec.uom.se.unit.MetricPrefix.MILLI(unit); + return javax.measure.MetricPrefix.MILLI(unit); } public static > Unit MICRO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.MICRO(unit); + return javax.measure.MetricPrefix.MICRO(unit); } public static > Unit NANO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.NANO(unit); + return javax.measure.MetricPrefix.NANO(unit); } public static > Unit PICO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.PICO(unit); + return javax.measure.MetricPrefix.PICO(unit); } public static > Unit FEMTO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.FEMTO(unit); + return javax.measure.MetricPrefix.FEMTO(unit); } public static > Unit ATTO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.ATTO(unit); + return javax.measure.MetricPrefix.ATTO(unit); } public static > Unit ZEPTO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.ZEPTO(unit); + return javax.measure.MetricPrefix.ZEPTO(unit); } public static > Unit YOCTO(Unit unit) { - return tec.uom.se.unit.MetricPrefix.YOCTO(unit); + return javax.measure.MetricPrefix.YOCTO(unit); } } diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/SIUnits.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/SIUnits.java index d75fa317b45..de4886f0fb1 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/SIUnits.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/SIUnits.java @@ -24,8 +24,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault; -import tec.uom.se.format.SimpleUnitFormat; -import tec.uom.se.unit.Units; +import tech.units.indriya.format.SimpleUnitFormat; +import tech.units.indriya.unit.Units; /** * Delegate SI units to {@link Units} to hide this dependency from the rest of openHAB. diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/Units.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/Units.java index 0bd10b3a2f9..f63b2b0585c 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/Units.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/library/unit/Units.java @@ -57,16 +57,15 @@ import org.openhab.core.library.dimension.Intensity; import org.openhab.core.library.dimension.VolumetricFlowRate; -import tec.uom.se.AbstractUnit; -import tec.uom.se.format.SimpleUnitFormat; -import tec.uom.se.function.ExpConverter; -import tec.uom.se.function.LogConverter; -import tec.uom.se.function.MultiplyConverter; -import tec.uom.se.function.PiMultiplierConverter; -import tec.uom.se.function.RationalConverter; -import tec.uom.se.unit.AlternateUnit; -import tec.uom.se.unit.ProductUnit; -import tec.uom.se.unit.TransformedUnit; +import si.uom.NonSI; +import tech.units.indriya.AbstractUnit; +import tech.units.indriya.format.SimpleUnitFormat; +import tech.units.indriya.function.ExpConverter; +import tech.units.indriya.function.LogConverter; +import tech.units.indriya.function.MultiplyConverter; +import tech.units.indriya.unit.AlternateUnit; +import tech.units.indriya.unit.ProductUnit; +import tech.units.indriya.unit.TransformedUnit; /** * Delegate common units to {@link Units} to hide this dependency from the rest of openHAB. @@ -82,109 +81,112 @@ public final class Units extends CustomUnits { // Alphabetical ordered by Unit. public static final Unit METRE_PER_SQUARE_SECOND = addUnit( - tec.uom.se.unit.Units.METRE_PER_SQUARE_SECOND); + tech.units.indriya.unit.Units.METRE_PER_SQUARE_SECOND); public static final Unit STANDARD_GRAVITY = addUnit(METRE_PER_SQUARE_SECOND.multiply(9.80665)); - public static final Unit MOLE = addUnit(tec.uom.se.unit.Units.MOLE); + public static final Unit MOLE = addUnit(tech.units.indriya.unit.Units.MOLE); + public static final Unit LITRE = addUnit(tech.units.indriya.unit.Units.LITRE); @SuppressWarnings("unchecked") - public static final Unit DEUTSCHE_HAERTE = addUnit( - new TransformedUnit<>("°dH", (Unit) MetricPrefix.MILLI(tec.uom.se.unit.Units.MOLE) - .divide(tec.uom.se.unit.Units.LITRE), RationalConverter.of(5.6, 1))); - public static final Unit DEGREE_ANGLE = addUnit(new TransformedUnit<>(tec.uom.se.unit.Units.RADIAN, - new PiMultiplierConverter().concatenate(new RationalConverter(BigInteger.ONE, BigInteger.valueOf(180))))); - public static final Unit RADIAN = addUnit(tec.uom.se.unit.Units.RADIAN); - public static final Unit DOBSON_UNIT = addUnit(new ProductUnit(MetricPrefix - .MILLI(tec.uom.se.unit.Units.MOLE).multiply(0.4462).divide(tec.uom.se.unit.Units.SQUARE_METRE))); - public static final Unit KATAL = addUnit(tec.uom.se.unit.Units.KATAL); - public static final Unit KILOGRAM_PER_CUBICMETRE = addUnit( - new ProductUnit(tec.uom.se.unit.Units.KILOGRAM.divide(tec.uom.se.unit.Units.CUBIC_METRE))); + public static final Unit DEUTSCHE_HAERTE = addUnit(new TransformedUnit<>("°dH", + (Unit) MetricPrefix.MILLI(Units.MOLE).divide(Units.LITRE), MultiplyConverter.of(5.6))); + public static final Unit DEGREE_ANGLE = addUnit(NonSI.DEGREE_ANGLE); + public static final Unit RADIAN = addUnit(tech.units.indriya.unit.Units.RADIAN); + public static final Unit DOBSON_UNIT = addUnit( + new ProductUnit(MetricPrefix.MILLI(tech.units.indriya.unit.Units.MOLE).multiply(0.4462) + .divide(tech.units.indriya.unit.Units.SQUARE_METRE))); + public static final Unit KATAL = addUnit(tech.units.indriya.unit.Units.KATAL); + public static final Unit KILOGRAM_PER_CUBICMETRE = addUnit(new ProductUnit( + tech.units.indriya.unit.Units.KILOGRAM.divide(tech.units.indriya.unit.Units.CUBIC_METRE))); public static final Unit MICROGRAM_PER_CUBICMETRE = addUnit(new TransformedUnit<>(KILOGRAM_PER_CUBICMETRE, - new RationalConverter(BigInteger.ONE, BigInteger.valueOf(1000000000)))); + MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(1000000000)))); public static final Unit ONE = addUnit(AbstractUnit.ONE); - public static final Unit PERCENT = addUnit(tec.uom.se.unit.Units.PERCENT); + public static final Unit PERCENT = addUnit(tech.units.indriya.unit.Units.PERCENT); public static final Unit PARTS_PER_BILLION = addUnit( - new TransformedUnit<>(ONE, new RationalConverter(BigInteger.ONE, BigInteger.valueOf(1000000000)))); + new TransformedUnit<>(ONE, MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(1000000000)))); public static final Unit PARTS_PER_MILLION = addUnit( - new TransformedUnit<>(ONE, new RationalConverter(BigInteger.ONE, BigInteger.valueOf(1000000)))); + new TransformedUnit<>(ONE, MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(1000000)))); public static final Unit DECIBEL = addUnit(ONE.transform( - new LogConverter(10).inverse().concatenate(new RationalConverter(BigInteger.ONE, BigInteger.TEN)))); - public static final Unit AMPERE = addUnit(tec.uom.se.unit.Units.AMPERE); - public static final Unit FARAD = addUnit(tec.uom.se.unit.Units.FARAD); - public static final Unit COULOMB = addUnit(tec.uom.se.unit.Units.COULOMB); - public static final Unit AMPERE_HOUR = addUnit(tec.uom.se.unit.Units.COULOMB.multiply(3600)); + new LogConverter(10).inverse().concatenate(MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.TEN)))); + public static final Unit AMPERE = addUnit(tech.units.indriya.unit.Units.AMPERE); + public static final Unit FARAD = addUnit(tech.units.indriya.unit.Units.FARAD); + public static final Unit COULOMB = addUnit(tech.units.indriya.unit.Units.COULOMB); + public static final Unit AMPERE_HOUR = addUnit( + tech.units.indriya.unit.Units.COULOMB.multiply(3600)); public static final Unit MILLIAMPERE_HOUR = addUnit(MetricPrefix.MILLI(AMPERE_HOUR)); - public static final Unit SIEMENS = addUnit(tec.uom.se.unit.Units.SIEMENS); - public static final Unit SIEMENS_PER_METRE = addUnit( - new ProductUnit(tec.uom.se.unit.Units.SIEMENS.divide(tec.uom.se.unit.Units.METRE))); - public static final Unit HENRY = addUnit(tec.uom.se.unit.Units.HENRY); - public static final Unit VOLT = addUnit(tec.uom.se.unit.Units.VOLT); - public static final Unit OHM = addUnit(tec.uom.se.unit.Units.OHM); - public static final Unit JOULE = addUnit(tec.uom.se.unit.Units.JOULE); + public static final Unit SIEMENS = addUnit(tech.units.indriya.unit.Units.SIEMENS); + public static final Unit SIEMENS_PER_METRE = addUnit(new ProductUnit( + tech.units.indriya.unit.Units.SIEMENS.divide(tech.units.indriya.unit.Units.METRE))); + public static final Unit HENRY = addUnit(tech.units.indriya.unit.Units.HENRY); + public static final Unit VOLT = addUnit(tech.units.indriya.unit.Units.VOLT); + public static final Unit OHM = addUnit(tech.units.indriya.unit.Units.OHM); + public static final Unit JOULE = addUnit(tech.units.indriya.unit.Units.JOULE); public static final Unit WATT_SECOND = addUnit( - new ProductUnit<>(tec.uom.se.unit.Units.WATT.multiply(tec.uom.se.unit.Units.SECOND))); + new ProductUnit<>(tech.units.indriya.unit.Units.WATT.multiply(tech.units.indriya.unit.Units.SECOND))); public static final Unit WATT_HOUR = addUnit( - new ProductUnit<>(tec.uom.se.unit.Units.WATT.multiply(tec.uom.se.unit.Units.HOUR))); + new ProductUnit<>(tech.units.indriya.unit.Units.WATT.multiply(tech.units.indriya.unit.Units.HOUR))); public static final Unit KILOWATT_HOUR = addUnit(MetricPrefix.KILO(WATT_HOUR)); public static final Unit MEGAWATT_HOUR = addUnit(MetricPrefix.MEGA(WATT_HOUR)); - public static final Unit VAR = addUnit(new AlternateUnit<>(tec.uom.se.unit.Units.WATT, "var")); + public static final Unit VAR = addUnit(new AlternateUnit<>(tech.units.indriya.unit.Units.WATT, "var")); public static final Unit KILOVAR = addUnit(MetricPrefix.KILO(VAR)); - public static final Unit VAR_HOUR = addUnit(new ProductUnit<>(VAR.multiply(tec.uom.se.unit.Units.HOUR)), - Energy.class); + public static final Unit VAR_HOUR = addUnit( + new ProductUnit<>(VAR.multiply(tech.units.indriya.unit.Units.HOUR)), Energy.class); public static final Unit KILOVAR_HOUR = addUnit(MetricPrefix.KILO(VAR_HOUR)); - public static final Unit VOLT_AMPERE = addUnit(new AlternateUnit<>(tec.uom.se.unit.Units.WATT, "VA")); + public static final Unit VOLT_AMPERE = addUnit( + new AlternateUnit<>(tech.units.indriya.unit.Units.WATT, "VA")); + public static final Unit KILOVOLT_AMPERE = addUnit(MetricPrefix.KILO(VOLT_AMPERE)); public static final Unit VOLT_AMPERE_HOUR = addUnit( - new ProductUnit<>(VOLT_AMPERE.multiply(tec.uom.se.unit.Units.HOUR)), Energy.class); - public static final Unit NEWTON = addUnit(tec.uom.se.unit.Units.NEWTON); - public static final Unit HERTZ = addUnit(tec.uom.se.unit.Units.HERTZ); + new ProductUnit<>(VOLT_AMPERE.multiply(tech.units.indriya.unit.Units.HOUR)), Energy.class); + public static final Unit NEWTON = addUnit(tech.units.indriya.unit.Units.NEWTON); + public static final Unit HERTZ = addUnit(tech.units.indriya.unit.Units.HERTZ); public static final Unit IRRADIANCE = addUnit( - new ProductUnit<>(tec.uom.se.unit.Units.WATT.divide(tec.uom.se.unit.Units.SQUARE_METRE))); + new ProductUnit<>(tech.units.indriya.unit.Units.WATT.divide(tech.units.indriya.unit.Units.SQUARE_METRE))); public static final Unit MICROWATT_PER_SQUARE_CENTIMETRE = addUnit( - new TransformedUnit<>(IRRADIANCE, new RationalConverter(BigInteger.ONE, BigInteger.valueOf(100)))); - public static final Unit LUX = addUnit(tec.uom.se.unit.Units.LUX); - public static final Unit LUMEN = addUnit(tec.uom.se.unit.Units.LUMEN); - public static final Unit CANDELA = addUnit(tec.uom.se.unit.Units.CANDELA); - public static final Unit WEBER = addUnit(tec.uom.se.unit.Units.WEBER); - public static final Unit TESLA = addUnit(tec.uom.se.unit.Units.TESLA); - public static final Unit WATT = addUnit(tec.uom.se.unit.Units.WATT); + new TransformedUnit<>(IRRADIANCE, MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(100)))); + public static final Unit LUX = addUnit(tech.units.indriya.unit.Units.LUX); + public static final Unit LUMEN = addUnit(tech.units.indriya.unit.Units.LUMEN); + public static final Unit CANDELA = addUnit(tech.units.indriya.unit.Units.CANDELA); + public static final Unit WEBER = addUnit(tech.units.indriya.unit.Units.WEBER); + public static final Unit TESLA = addUnit(tech.units.indriya.unit.Units.TESLA); + public static final Unit WATT = addUnit(tech.units.indriya.unit.Units.WATT); public static final Unit DECIBEL_MILLIWATTS = new TransformedUnit<>("dBm", MetricPrefix.MILLI(WATT), - new ExpConverter(10.0).concatenate(new MultiplyConverter(0.1))); + new ExpConverter(10.0).concatenate(MultiplyConverter.of(0.1))); public static final Unit MILLIMETRE_OF_MERCURY = addUnit( - new TransformedUnit<>("mmHg", tec.uom.se.unit.Units.PASCAL, - new RationalConverter(BigInteger.valueOf(133322368), BigInteger.valueOf(1000000)))); - public static final Unit BAR = addUnit(new TransformedUnit<>("bar", tec.uom.se.unit.Units.PASCAL, - new RationalConverter(BigInteger.valueOf(100000), BigInteger.ONE))); + new TransformedUnit<>("mmHg", tech.units.indriya.unit.Units.PASCAL, + MultiplyConverter.ofRational(BigInteger.valueOf(133322368), BigInteger.valueOf(1000000)))); + public static final Unit BAR = addUnit(new TransformedUnit<>("bar", tech.units.indriya.unit.Units.PASCAL, + MultiplyConverter.ofRational(BigInteger.valueOf(100000), BigInteger.ONE))); public static final Unit MILLIBAR = addUnit(MetricPrefix.MILLI(BAR)); - public static final Unit BECQUEREL = addUnit(tec.uom.se.unit.Units.BECQUEREL); - public static final Unit BECQUEREL_PER_CUBIC_METRE = addUnit( - new ProductUnit<>(tec.uom.se.unit.Units.BECQUEREL.divide(tec.uom.se.unit.Units.CUBIC_METRE))); - public static final Unit GRAY = addUnit(tec.uom.se.unit.Units.GRAY); - public static final Unit SIEVERT = addUnit(tec.uom.se.unit.Units.SIEVERT); + public static final Unit BECQUEREL = addUnit(tech.units.indriya.unit.Units.BECQUEREL); + public static final Unit BECQUEREL_PER_CUBIC_METRE = addUnit(new ProductUnit<>( + tech.units.indriya.unit.Units.BECQUEREL.divide(tech.units.indriya.unit.Units.CUBIC_METRE))); + public static final Unit GRAY = addUnit(tech.units.indriya.unit.Units.GRAY); + public static final Unit SIEVERT = addUnit(tech.units.indriya.unit.Units.SIEVERT); public static final Unit MILLIMETRE_PER_HOUR = addUnit( - new TransformedUnit<>("mm/h", tec.uom.se.unit.Units.KILOMETRE_PER_HOUR, - new RationalConverter(BigInteger.ONE, BigInteger.valueOf(1000000)))); + new TransformedUnit<>("mm/h", tech.units.indriya.unit.Units.KILOMETRE_PER_HOUR, + MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(1000000)))); public static final Unit INCHES_PER_HOUR = addUnit(new TransformedUnit<>("in/h", - ImperialUnits.MILES_PER_HOUR, new RationalConverter(BigInteger.ONE, BigInteger.valueOf(63360)))); - public static final Unit METRE_PER_SECOND = addUnit(tec.uom.se.unit.Units.METRE_PER_SECOND); - public static final Unit KNOT = addUnit(new TransformedUnit<>("kn", tec.uom.se.unit.Units.KILOMETRE_PER_HOUR, - new RationalConverter(BigInteger.valueOf(1852), BigInteger.valueOf(1000)))); - public static final Unit STERADIAN = addUnit(tec.uom.se.unit.Units.STERADIAN); - public static final Unit KELVIN = addUnit(tec.uom.se.unit.Units.KELVIN); - public static final Unit