]> git.basschouten.com Git - openhab-addons.git/commitdiff
[miio] Implement alternative MiIoQuantityTypes (#9203)
authorMarcel <marcel@verpaalen.com>
Fri, 4 Dec 2020 17:37:49 +0000 (09:37 -0800)
committerGitHub <noreply@github.com>
Fri, 4 Dec 2020 17:37:49 +0000 (09:37 -0800)
* [miio] Implement alternative MiIoQuantityTypes

* Improved way avoiding multiple entries for Unit
* Test cases for the MiIoQuantityTypes class
* Apply suggestions from code review

Signed-off-by: Marcel Verpaalen <marcel@verpaalen.com>
Co-authored-by: Connor Petty <mistercpp2000+gitsignoff@gmail.com>
bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoQuantiyTypes.java
bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/MiIoQuantityTypesTest.java [new file with mode: 0644]

index 49cf9a3f297cab9e4ab4660b18ad7ec0a8d9478f..c3c06418afacc39943b9e3447270c5b302f4bb32 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.miio.internal;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -24,6 +25,8 @@ import org.openhab.core.library.unit.ImperialUnits;
 import org.openhab.core.library.unit.SIUnits;
 import org.openhab.core.library.unit.SmartHomeUnits;
 
+import tec.uom.se.unit.Units;
+
 /**
  * Enum of the units used in the miio protocol
  * Used to find the right {@link javax.measure.Unit} given the string of the unit
@@ -33,31 +36,50 @@ import org.openhab.core.library.unit.SmartHomeUnits;
 @NonNullByDefault
 public enum MiIoQuantiyTypes {
 
-    CELCIUS(SIUnits.CELSIUS),
+    CELCIUS(SIUnits.CELSIUS, "C"),
     FAHRENHEIT(ImperialUnits.FAHRENHEIT),
-    SECOND(SmartHomeUnits.SECOND),
-    MINUTE(SmartHomeUnits.MINUTE),
-    HOUR(SmartHomeUnits.HOUR),
-    SECONDS(SmartHomeUnits.SECOND),
-    MINUTES(SmartHomeUnits.MINUTE),
-    HOURS(SmartHomeUnits.HOUR),
+    SECOND(SmartHomeUnits.SECOND, "seconds"),
+    MINUTE(SmartHomeUnits.MINUTE, "minutes"),
+    HOUR(SmartHomeUnits.HOUR, "hours"),
     AMPERE(SmartHomeUnits.AMPERE),
-    WATT(SmartHomeUnits.WATT);
+    WATT(SmartHomeUnits.WATT),
+    SQUARE_METRE(Units.SQUARE_METRE, "square_meter", "squaremeter"),
+    PERCENT(SmartHomeUnits.PERCENT);
 
     private final Unit<?> unit;
+    private final String[] aliasses;
 
     private static Map<String, Unit<?>> stringMap = Arrays.stream(values())
             .collect(Collectors.toMap(Enum::toString, MiIoQuantiyTypes::getUnit));
 
-    private MiIoQuantiyTypes(Unit<?> unit) {
+    private static Map<String, Unit<?>> aliasMap() {
+        Map<String, Unit<?>> aliassesMap = new HashMap<>();
+        for (MiIoQuantiyTypes miIoQuantiyType : values()) {
+            for (String alias : miIoQuantiyType.getAliasses()) {
+                aliassesMap.put(alias.toLowerCase(), miIoQuantiyType.getUnit());
+            }
+        }
+        return aliassesMap;
+    }
+
+    private MiIoQuantiyTypes(Unit<?> unit, String... aliasses) {
         this.unit = unit;
+        this.aliasses = aliasses;
     }
 
     public Unit<?> getUnit() {
         return unit;
     }
 
+    public String[] getAliasses() {
+        return aliasses;
+    }
+
     public static @Nullable Unit<?> get(String unitName) {
-        return stringMap.get(unitName.toUpperCase());
+        Unit<?> unit = stringMap.get(unitName.toUpperCase());
+        if (unit == null) {
+            unit = aliasMap().get(unitName.toLowerCase());
+        }
+        return unit;
     }
 }
diff --git a/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/MiIoQuantityTypesTest.java b/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/MiIoQuantityTypesTest.java
new file mode 100644 (file)
index 0000000..d5346d5
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2010-2020 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.miio.internal;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static tec.uom.se.unit.Units.SQUARE_METRE;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.junit.jupiter.api.Test;
+import org.openhab.core.library.unit.SmartHomeUnits;
+
+/**
+ * Test case for {@link MiIoQuantityTypes}
+ *
+ * @author Marcel Verpaalen - Initial contribution
+ *
+ */
+@NonNullByDefault
+public class MiIoQuantityTypesTest {
+
+    @Test
+    public void UnknownUnitTest() {
+
+        String unitName = "some none existent unit";
+        assertNull(MiIoQuantiyTypes.get(unitName));
+    }
+
+    @Test
+    public void regularsUnitTest() {
+
+        String unitName = "minute";
+        assertEquals(SmartHomeUnits.MINUTE, MiIoQuantiyTypes.get(unitName));
+
+        unitName = "Minute";
+        assertEquals(SmartHomeUnits.MINUTE, MiIoQuantiyTypes.get(unitName));
+    }
+
+    @Test
+    public void aliasUnitsTest() {
+
+        String unitName = "square_meter";
+        assertEquals(SQUARE_METRE, MiIoQuantiyTypes.get(unitName));
+
+        unitName = "Square_meter";
+        assertEquals(SQUARE_METRE, MiIoQuantiyTypes.get(unitName));
+
+        unitName = "squaremeter";
+        assertEquals(SQUARE_METRE, MiIoQuantiyTypes.get(unitName));
+    }
+}