]> git.basschouten.com Git - openhab-addons.git/commitdiff
[influxdb] Fix exception handling and improve some type conversions (#15452)
authorJ-N-K <github@klug.nrw>
Sat, 9 Sep 2023 13:08:58 +0000 (15:08 +0200)
committerGitHub <noreply@github.com>
Sat, 9 Sep 2023 13:08:58 +0000 (15:08 +0200)
Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/InfluxDBStateConvertUtils.java
bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/influx1/InfluxDB1RepositoryImpl.java
bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxDBStateConvertUtilsTest.java

index 82d45b12ea92ebcc39cf7c1874153d89edc6bad4..755412dc902f54d680c6d38465aec6b86298383c 100644 (file)
@@ -29,8 +29,10 @@ import org.openhab.core.library.items.ColorItem;
 import org.openhab.core.library.items.ContactItem;
 import org.openhab.core.library.items.DateTimeItem;
 import org.openhab.core.library.items.DimmerItem;
+import org.openhab.core.library.items.ImageItem;
 import org.openhab.core.library.items.LocationItem;
 import org.openhab.core.library.items.NumberItem;
+import org.openhab.core.library.items.PlayerItem;
 import org.openhab.core.library.items.RollershutterItem;
 import org.openhab.core.library.items.SwitchItem;
 import org.openhab.core.library.types.DateTimeType;
@@ -39,10 +41,14 @@ import org.openhab.core.library.types.HSBType;
 import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.library.types.OpenClosedType;
 import org.openhab.core.library.types.PercentType;
+import org.openhab.core.library.types.PlayPauseType;
 import org.openhab.core.library.types.PointType;
 import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.types.RawType;
+import org.openhab.core.library.types.RewindFastforwardType;
 import org.openhab.core.library.types.StringType;
 import org.openhab.core.types.State;
+import org.openhab.core.types.UnDefType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,7 +87,7 @@ public class InfluxDBStateConvertUtils {
         } else if (state instanceof DateTimeType type) {
             value = type.getZonedDateTime().toInstant().toEpochMilli();
         } else {
-            value = state.toString();
+            value = state.toFullString();
         }
         return value;
     }
@@ -137,9 +143,21 @@ public class InfluxDBStateConvertUtils {
             Instant i = Instant.ofEpochMilli(new BigDecimal(valueStr).longValue());
             ZonedDateTime z = ZonedDateTime.ofInstant(i, TimeZone.getDefault().toZoneId());
             return new DateTimeType(z);
+        } else if (item instanceof PlayerItem) {
+            try {
+                return PlayPauseType.valueOf(valueStr);
+            } catch (IllegalArgumentException ignored) {
+            }
+            try {
+                return RewindFastforwardType.valueOf(valueStr);
+            } catch (IllegalArgumentException ignored) {
+            }
+        } else if (item instanceof ImageItem) {
+            return RawType.valueOf(valueStr);
         } else {
             return new StringType(valueStr);
         }
+        return UnDefType.UNDEF;
     }
 
     private static boolean toBoolean(@Nullable Object object) {
index fabae14499deafb6ecfdf19b0c170be3a3a5320f..4b0a596023169c5d7374e9d40165a57d6afa8ee1 100644 (file)
@@ -29,8 +29,8 @@ import java.util.concurrent.TimeUnit;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBException;
 import org.influxdb.InfluxDBFactory;
-import org.influxdb.InfluxDBIOException;
 import org.influxdb.dto.BatchPoints;
 import org.influxdb.dto.Point;
 import org.influxdb.dto.Pong;
@@ -59,14 +59,12 @@ import com.influxdb.exceptions.InfluxException;
 public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
     private final Logger logger = LoggerFactory.getLogger(InfluxDB1RepositoryImpl.class);
     private final InfluxDBConfiguration configuration;
-    private final InfluxDBMetadataService influxDBMetadataService;
     private final FilterCriteriaQueryCreator queryCreator;
     private @Nullable InfluxDB client;
 
     public InfluxDB1RepositoryImpl(InfluxDBConfiguration configuration,
             InfluxDBMetadataService influxDBMetadataService) {
         this.configuration = configuration;
-        this.influxDBMetadataService = influxDBMetadataService;
         this.queryCreator = new InfluxDB1FilterCriteriaQueryCreatorImpl(configuration, influxDBMetadataService);
     }
 
@@ -131,7 +129,7 @@ public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
             BatchPoints batchPoints = BatchPoints.database(configuration.getDatabaseName())
                     .retentionPolicy(configuration.getRetentionPolicy()).points(points).build();
             currentClient.write(batchPoints);
-        } catch (InfluxException | InfluxDBIOException e) {
+        } catch (InfluxException | InfluxDBException e) {
             logger.debug("Writing to database failed", e);
             return false;
         }
@@ -177,7 +175,7 @@ public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
             } else {
                 throw new InfluxException("API not present");
             }
-        } catch (InfluxException | InfluxDBIOException e) {
+        } catch (InfluxException | InfluxDBException e) {
             logger.warn("Failed to execute query '{}': {}", filter, e.getMessage());
             return List.of();
         }
index 249697475f8f24ea62902d552d72860721b1a935..32239144738fe94671d6d48c73bf5a4c8845edc1 100644 (file)
@@ -33,13 +33,18 @@ import org.junit.jupiter.params.provider.ValueSource;
 import org.openhab.core.i18n.UnitProvider;
 import org.openhab.core.library.items.ContactItem;
 import org.openhab.core.library.items.DateTimeItem;
+import org.openhab.core.library.items.ImageItem;
 import org.openhab.core.library.items.NumberItem;
+import org.openhab.core.library.items.PlayerItem;
 import org.openhab.core.library.items.SwitchItem;
 import org.openhab.core.library.types.DateTimeType;
 import org.openhab.core.library.types.DecimalType;
 import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.library.types.OpenClosedType;
+import org.openhab.core.library.types.PlayPauseType;
 import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.types.RawType;
+import org.openhab.core.library.types.RewindFastforwardType;
 import org.openhab.core.library.unit.SIUnits;
 
 /**
@@ -74,6 +79,24 @@ public class InfluxDBStateConvertUtilsTest {
         assertThat(InfluxDBStateConvertUtils.stateToObject(type), equalTo(nowInMillis));
     }
 
+    @Test
+    public void convertImageState() {
+        RawType type = new RawType(new byte[] { 0x64, 0x66, 0x55, 0x00, 0x34 }, RawType.DEFAULT_MIME_TYPE);
+        assertThat(InfluxDBStateConvertUtils.stateToObject(type), is("data:application/octet-stream;base64,ZGZVADQ="));
+    }
+
+    @Test
+    public void convertPlayPauseState() {
+        assertThat(InfluxDBStateConvertUtils.stateToObject(PlayPauseType.PAUSE), is("PAUSE"));
+        assertThat(InfluxDBStateConvertUtils.stateToObject(PlayPauseType.PLAY), is("PLAY"));
+    }
+
+    @Test
+    public void convertRewindFastForwardState() {
+        assertThat(InfluxDBStateConvertUtils.stateToObject(RewindFastforwardType.REWIND), is("REWIND"));
+        assertThat(InfluxDBStateConvertUtils.stateToObject(RewindFastforwardType.FASTFORWARD), is("FASTFORWARD"));
+    }
+
     @ParameterizedTest
     @ValueSource(strings = { "1.12", "25" })
     public void convertDecimalToState(String number) {
@@ -111,4 +134,21 @@ public class InfluxDBStateConvertUtilsTest {
                 ZonedDateTime.ofInstant(Instant.ofEpochMilli(val), ZoneId.systemDefault()));
         assertThat(InfluxDBStateConvertUtils.objectToState(val, item), equalTo(expected));
     }
+
+    @Test
+    public void convertImageToState() {
+        ImageItem item = new ImageItem("name");
+        RawType type = new RawType(new byte[] { 0x64, 0x66, 0x55, 0x00, 0x34 }, RawType.DEFAULT_MIME_TYPE);
+        assertThat(InfluxDBStateConvertUtils.objectToState("data:application/octet-stream;base64,ZGZVADQ=", item),
+                is(type));
+    }
+
+    @Test
+    public void convertPlayerToState() {
+        PlayerItem item = new PlayerItem("name");
+        assertThat(InfluxDBStateConvertUtils.objectToState("PLAY", item), is(PlayPauseType.PLAY));
+        assertThat(InfluxDBStateConvertUtils.objectToState("PAUSE", item), is(PlayPauseType.PAUSE));
+        assertThat(InfluxDBStateConvertUtils.objectToState("REWIND", item), is(RewindFastforwardType.REWIND));
+        assertThat(InfluxDBStateConvertUtils.objectToState("FASTFORWARD", item), is(RewindFastforwardType.FASTFORWARD));
+    }
 }