]> git.basschouten.com Git - openhab-addons.git/commitdiff
[persistence] Use Java 17 features (#15486)
authorHolger Friedrich <holgerfriedrich@users.noreply.github.com>
Sat, 26 Aug 2023 06:56:27 +0000 (08:56 +0200)
committerGitHub <noreply@github.com>
Sat, 26 Aug 2023 06:56:27 +0000 (08:56 +0200)
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
18 files changed:
bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/AbstractDynamoDBItem.java
bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfig.java
bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBPersistenceService.java
bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/AbstractDynamoDBItemSerializationTest.java
bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfigTest.java
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/main/java/org/openhab/persistence/influxdb/internal/influx2/InfluxDB2RepositoryImpl.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/console/JdbcCommandExtension.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcDerbyDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcHsqldbDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcPostgresqlDAO.java
bundles/org.openhab.persistence.jpa/src/main/java/org/openhab/persistence/jpa/internal/StateHelper.java
bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java
bundles/org.openhab.persistence.mongodb/src/main/java/org/openhab/persistence/mongodb/internal/MongoDBPersistenceService.java
bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java
bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/charts/RRD4jChartServlet.java
bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/console/RRD4jCommandExtension.java

index b47b5f56a6ae1bcf3c9dca35c1bf3f0be7a63ccc..83ed2ab04f3fb985fa884098ba7a0489236749b2 100644 (file)
@@ -302,8 +302,8 @@ public abstract class AbstractDynamoDBItem<T> implements DynamoDBItem<T> {
         } else if (item instanceof NumberItem) {
             return new DynamoDBBigDecimalItem(name, convert(state, DecimalType.class).toBigDecimal(), time, expireDays);
         } else if (item instanceof PlayerItem) {
-            if (state instanceof PlayPauseType) {
-                switch ((PlayPauseType) state) {
+            if (state instanceof PlayPauseType pauseType) {
+                switch (pauseType) {
                     case PLAY:
                         return new DynamoDBBigDecimalItem(name, PLAY_BIGDECIMAL, time, expireDays);
                     case PAUSE:
@@ -311,8 +311,8 @@ public abstract class AbstractDynamoDBItem<T> implements DynamoDBItem<T> {
                     default:
                         throw new IllegalArgumentException("Unexpected enum with PlayPauseType: " + state.toString());
                 }
-            } else if (state instanceof RewindFastforwardType) {
-                switch ((RewindFastforwardType) state) {
+            } else if (state instanceof RewindFastforwardType rewindType) {
+                switch (rewindType) {
                     case FASTFORWARD:
                         return new DynamoDBBigDecimalItem(name, FAST_FORWARD_BIGDECIMAL, time, expireDays);
                     case REWIND:
@@ -329,12 +329,11 @@ public abstract class AbstractDynamoDBItem<T> implements DynamoDBItem<T> {
             // Normalize UP/DOWN to %
             return new DynamoDBBigDecimalItem(name, convert(state, PercentType.class).toBigDecimal(), time, expireDays);
         } else if (item instanceof StringItem) {
-            if (state instanceof StringType) {
-                return new DynamoDBStringItem(name, ((StringType) state).toString(), time, expireDays);
-            } else if (state instanceof DateTimeType) {
+            if (state instanceof StringType stringType) {
+                return new DynamoDBStringItem(name, stringType.toString(), time, expireDays);
+            } else if (state instanceof DateTimeType dateType) {
                 return new DynamoDBStringItem(name,
-                        ZONED_DATE_TIME_CONVERTER_STRING.toString(((DateTimeType) state).getZonedDateTime()), time,
-                        expireDays);
+                        ZONED_DATE_TIME_CONVERTER_STRING.toString(dateType.getZonedDateTime()), time, expireDays);
             } else {
                 throw new IllegalStateException(
                         String.format("Unexpected state type %s with StringItem", state.getClass().getSimpleName()));
@@ -411,8 +410,7 @@ public abstract class AbstractDynamoDBItem<T> implements DynamoDBItem<T> {
                     if (numberState == null) {
                         return null;
                     }
-                    if (item instanceof NumberItem) {
-                        NumberItem numberItem = ((NumberItem) item);
+                    if (item instanceof NumberItem numberItem) {
                         Unit<? extends Quantity<?>> unit = targetUnit == null ? numberItem.getUnit() : targetUnit;
                         if (unit != null) {
                             return new QuantityType<>(numberState, unit);
index 75f22e42588b52fe1c2db64650798844384de879..dd186e2b9f5feded1f05f52e0fb105952caca0bc 100644 (file)
@@ -93,8 +93,10 @@ public class DynamoDBConfig {
                 String profile = (String) config.get("profile");
                 if (profilesConfigFile == null || profilesConfigFile.isBlank() || profile == null
                         || profile.isBlank()) {
-                    LOGGER.error("Specify either 1) accessKey and secretKey; or 2) profilesConfigFile and "
-                            + "profile for providing AWS credentials");
+                    LOGGER.error("""
+                            Specify either 1) accessKey and secretKey; or 2) profilesConfigFile and \
+                            profile for providing AWS credentials\
+                            """);
                     return null;
                 }
                 ProfileFile profileFile = ProfileFile.builder().content(Path.of(profilesConfigFile))
index 80bdaef00226cb2976870294bc80c2db6aa5f3d2..dd8355acf0708411f934ce1b347208c75f567ebf 100644 (file)
@@ -398,8 +398,8 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
                 logger.warn("Could not get item {} from registry! Returning empty query results.", itemName);
                 return Collections.emptyList();
             }
-            if (item instanceof GroupItem) {
-                item = ((GroupItem) item).getBaseItem();
+            if (item instanceof GroupItem groupItem) {
+                item = groupItem.getBaseItem();
                 logger.debug("Item is instanceof GroupItem '{}'", itemName);
                 if (item == null) {
                     logger.debug("BaseItem of GroupItem is null. Ignore and give up!");
@@ -429,7 +429,7 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
             // NumberItem.getUnit() is expensive, we avoid calling it in the loop
             // by fetching the unit here.
             final Item localItem = item;
-            final Unit<?> itemUnit = localItem instanceof NumberItem ? ((NumberItem) localItem).getUnit() : null;
+            final Unit<?> itemUnit = localItem instanceof NumberItem ni ? ni.getUnit() : null;
             try {
                 @SuppressWarnings("null")
                 List<HistoricItem> results = itemsFuture.get().stream().map(dynamoItem -> {
@@ -584,15 +584,15 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
 
     private Item getEffectiveItem(Item item) {
         final Item effectiveItem;
-        if (item instanceof GroupItem) {
-            Item baseItem = ((GroupItem) item).getBaseItem();
+        if (item instanceof GroupItem groupItem) {
+            Item baseItem = groupItem.getBaseItem();
             if (baseItem == null) {
                 // if GroupItem:<ItemType> is not defined in
                 // *.items using StringType
                 logger.debug(
                         "Cannot detect ItemType for {} because the GroupItems' base type isn't set in *.items File.",
                         item.getName());
-                Iterator<Item> firstGroupMemberItem = ((GroupItem) item).getMembers().iterator();
+                Iterator<Item> firstGroupMemberItem = groupItem.getMembers().iterator();
                 if (firstGroupMemberItem.hasNext()) {
                     effectiveItem = firstGroupMemberItem.next();
                 } else {
@@ -640,10 +640,10 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
             throw new IllegalArgumentException(item.toString(), e);
         }
         State state = stateOverride == null ? item.getState() : stateOverride;
-        if (state instanceof QuantityType<?> && itemTemplate instanceof NumberItem) {
-            Unit<?> itemUnit = ((NumberItem) itemTemplate).getUnit();
+        if (state instanceof QuantityType<?> type && itemTemplate instanceof NumberItem numberItem) {
+            Unit<?> itemUnit = numberItem.getUnit();
             if (itemUnit != null) {
-                State convertedState = ((QuantityType<?>) state).toUnit(itemUnit);
+                State convertedState = type.toUnit(itemUnit);
                 if (convertedState == null) {
                     logger.error("Unexpected unit conversion failure: {} to item unit {}", state, itemUnit);
                     throw new IllegalArgumentException(
@@ -657,8 +657,7 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
     }
 
     private void logIfManyQueuedTasks() {
-        if (executor instanceof ThreadPoolExecutor) {
-            ThreadPoolExecutor localExecutor = (ThreadPoolExecutor) executor;
+        if (executor instanceof ThreadPoolExecutor localExecutor) {
             if (localExecutor.getQueue().size() >= 5) {
                 logger.trace("executor queue size: {}, remaining space {}. Active threads {}",
                         localExecutor.getQueue().size(), localExecutor.getQueue().remainingCapacity(),
index f301554eefe962c2067c1a59a90d2d472bf68609..56b252811c14a250fb38f19b816a7777727b063d 100644 (file)
@@ -82,8 +82,8 @@ public class AbstractDynamoDBItemSerializationTest {
         Object actualState = dbItem.getState();
         assertNotNull(actualState);
         Objects.requireNonNull(actualState);
-        if (expectedState instanceof BigDecimal) {
-            BigDecimal expectedRounded = DynamoDBBigDecimalItem.loseDigits(((BigDecimal) expectedState));
+        if (expectedState instanceof BigDecimal decimal) {
+            BigDecimal expectedRounded = DynamoDBBigDecimalItem.loseDigits(decimal);
             assertEquals(0, expectedRounded.compareTo((BigDecimal) actualState),
                     String.format("Expected state %s (%s but with some digits lost) did not match actual state %s",
                             expectedRounded, expectedState, actualState));
index b7862180a2833145c69559a237a85ec613a2b14c..7923ff4881cb5ef5ec11dcfc484830d9b16f1a4b 100644 (file)
@@ -60,12 +60,12 @@ public class DynamoDBConfigTest {
 
     @Test
     public void testInvalidRegion() throws Exception {
-        assertNull(DynamoDBConfig.fromConfig(Collections.singletonMap("region", "foobie")));
+        assertNull(DynamoDBConfig.fromConfig(Map.of("region", "foobie")));
     }
 
     @Test
     public void testRegionOnly() throws Exception {
-        assertNull(DynamoDBConfig.fromConfig(Collections.singletonMap("region", "eu-west-1")));
+        assertNull(DynamoDBConfig.fromConfig(Map.of("region", "eu-west-1")));
     }
 
     @Test
@@ -87,10 +87,12 @@ public class DynamoDBConfigTest {
     @Test
     public void testRegionWithProfilesConfigFile() throws Exception {
         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
-        Files.write(
-                credsFile, ("[fooprofile]\n" + "aws_access_key_id=testAccessKey\n"
-                        + "aws_secret_access_key=testSecretKey\n" + "aws_session_token=testSessionToken\n").getBytes(),
-                StandardOpenOption.TRUNCATE_EXISTING);
+        Files.write(credsFile, ("""
+                [fooprofile]
+                aws_access_key_id=testAccessKey
+                aws_secret_access_key=testSecretKey
+                aws_session_token=testSessionToken
+                """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
 
         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
                 credsFile.toAbsolutePath().toString(), "profile", "fooprofile"));
@@ -107,10 +109,13 @@ public class DynamoDBConfigTest {
     @Test
     public void testProfilesConfigFileRetryMode() throws Exception {
         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
-        Files.write(credsFile,
-                ("[fooprofile]\n" + "aws_access_key_id=testAccessKey\n" + "aws_secret_access_key=testSecretKey\n"
-                        + "aws_session_token=testSessionToken\n" + "retry_mode=legacy").getBytes(),
-                StandardOpenOption.TRUNCATE_EXISTING);
+        Files.write(credsFile, ("""
+                [fooprofile]
+                aws_access_key_id=testAccessKey
+                aws_secret_access_key=testSecretKey
+                aws_session_token=testSessionToken
+                retry_mode=legacy\
+                """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
 
         DynamoDBConfig fromConfig = DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
                 credsFile.toAbsolutePath().toString(), "profile", "fooprofile"));
@@ -131,10 +136,12 @@ public class DynamoDBConfigTest {
     @Test
     public void testRegionWithInvalidProfilesConfigFile() throws Exception {
         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
-        Files.write(credsFile,
-                ("[fooprofile]\n" + "aws_access_key_idINVALIDKEY=testAccessKey\n"
-                        + "aws_secret_access_key=testSecretKey\n" + "aws_session_token=testSessionToken\n").getBytes(),
-                StandardOpenOption.TRUNCATE_EXISTING);
+        Files.write(credsFile, ("""
+                [fooprofile]
+                aws_access_key_idINVALIDKEY=testAccessKey
+                aws_secret_access_key=testSecretKey
+                aws_session_token=testSessionToken
+                """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
 
         assertNull(DynamoDBConfig.fromConfig(mapFrom("region", "eu-west-1", "profilesConfigFile",
                 credsFile.toFile().getAbsolutePath(), "profile", "fooprofile")));
@@ -143,10 +150,12 @@ public class DynamoDBConfigTest {
     @Test
     public void testRegionWithProfilesConfigFileMissingProfile() throws Exception {
         Path credsFile = Files.createFile(Paths.get(folder.getPath(), "creds"));
-        Files.write(
-                credsFile, ("[fooprofile]\n" + "aws_access_key_id=testAccessKey\n"
-                        + "aws_secret_access_key=testSecretKey\n" + "aws_session_token=testSessionToken\n").getBytes(),
-                StandardOpenOption.TRUNCATE_EXISTING);
+        Files.write(credsFile, ("""
+                [fooprofile]
+                aws_access_key_id=testAccessKey
+                aws_secret_access_key=testSecretKey
+                aws_session_token=testSessionToken
+                """).getBytes(), StandardOpenOption.TRUNCATE_EXISTING);
 
         assertNull(DynamoDBConfig.fromConfig(
                 mapFrom("region", "eu-west-1", "profilesConfigFile", credsFile.toAbsolutePath().toString())));
index d9ce0749a1f2470dde4891b5807993ffecd6b300..82d45b12ea92ebcc39cf7c1874153d89edc6bad4 100644 (file)
@@ -70,16 +70,16 @@ public class InfluxDBStateConvertUtils {
             value = state.toString();
         } else if (state instanceof PointType) {
             value = state.toString();
-        } else if (state instanceof DecimalType) {
-            value = ((DecimalType) state).toBigDecimal();
-        } else if (state instanceof QuantityType<?>) {
-            value = ((QuantityType<?>) state).toBigDecimal();
+        } else if (state instanceof DecimalType type) {
+            value = type.toBigDecimal();
+        } else if (state instanceof QuantityType<?> type) {
+            value = type.toBigDecimal();
         } else if (state instanceof OnOffType) {
             value = state == OnOffType.ON ? DIGITAL_VALUE_ON : DIGITAL_VALUE_OFF;
         } else if (state instanceof OpenClosedType) {
             value = state == OpenClosedType.OPEN ? DIGITAL_VALUE_ON : DIGITAL_VALUE_OFF;
-        } else if (state instanceof DateTimeType) {
-            value = ((DateTimeType) state).getZonedDateTime().toInstant().toEpochMilli();
+        } else if (state instanceof DateTimeType type) {
+            value = type.getZonedDateTime().toInstant().toEpochMilli();
         } else {
             value = state.toString();
         }
@@ -111,8 +111,8 @@ public class InfluxDBStateConvertUtils {
 
         @Nullable
         Item item = itemToSetState;
-        if (item instanceof GroupItem) {
-            item = ((GroupItem) item).getBaseItem();
+        if (item instanceof GroupItem groupItem) {
+            item = groupItem.getBaseItem();
         }
         if (item instanceof ColorItem) {
             return new HSBType(valueStr);
@@ -143,8 +143,8 @@ public class InfluxDBStateConvertUtils {
     }
 
     private static boolean toBoolean(@Nullable Object object) {
-        if (object instanceof Boolean) {
-            return (Boolean) object;
+        if (object instanceof Boolean boolean1) {
+            return boolean1;
         } else if (object != null) {
             if ("1".equals(object) || "1.0".equals(object)) {
                 return true;
index 9449bbdac6b3f7dbf3f64534f298933f4f89b4a6..fabae14499deafb6ecfdf19b0c170be3a3a5320f 100644 (file)
@@ -148,12 +148,12 @@ public class InfluxDB1RepositoryImpl implements InfluxDBRepository {
         Point.Builder clientPoint = Point.measurement(point.getMeasurementName()).time(point.getTime().toEpochMilli(),
                 TimeUnit.MILLISECONDS);
         Object value = point.getValue();
-        if (value instanceof String) {
-            clientPoint.addField(FIELD_VALUE_NAME, (String) value);
-        } else if (value instanceof Number) {
-            clientPoint.addField(FIELD_VALUE_NAME, (Number) value);
-        } else if (value instanceof Boolean) {
-            clientPoint.addField(FIELD_VALUE_NAME, (Boolean) value);
+        if (value instanceof String string) {
+            clientPoint.addField(FIELD_VALUE_NAME, string);
+        } else if (value instanceof Number number) {
+            clientPoint.addField(FIELD_VALUE_NAME, number);
+        } else if (value instanceof Boolean boolean1) {
+            clientPoint.addField(FIELD_VALUE_NAME, boolean1);
         } else if (value == null) {
             clientPoint.addField(FIELD_VALUE_NAME, "null");
         } else {
index 0b21da6b1276d161ce849341564b96d1dcb74f3e..862ecf4c2ba31d3e353e7f903b0622f15387ab82 100644 (file)
@@ -186,12 +186,12 @@ public class InfluxDB2RepositoryImpl implements InfluxDBRepository {
         Point clientPoint = Point.measurement(point.getMeasurementName()).time(point.getTime(), WritePrecision.MS);
         @Nullable
         Object value = point.getValue();
-        if (value instanceof String) {
-            clientPoint.addField(FIELD_VALUE_NAME, (String) value);
-        } else if (value instanceof Number) {
-            clientPoint.addField(FIELD_VALUE_NAME, (Number) value);
-        } else if (value instanceof Boolean) {
-            clientPoint.addField(FIELD_VALUE_NAME, (Boolean) value);
+        if (value instanceof String string) {
+            clientPoint.addField(FIELD_VALUE_NAME, string);
+        } else if (value instanceof Number number) {
+            clientPoint.addField(FIELD_VALUE_NAME, number);
+        } else if (value instanceof Boolean boolean1) {
+            clientPoint.addField(FIELD_VALUE_NAME, boolean1);
         } else if (value == null) {
             clientPoint.addField(FIELD_VALUE_NAME, (String) null);
         } else {
index c92dbd49547f0d80a5831c8c1299f7a2162b533e..4d4c6213af33c1aefc35c9b89d3fa268646fe25d 100644 (file)
@@ -94,8 +94,8 @@ public class JdbcCommandExtension extends AbstractConsoleCommandExtension implem
 
     private @Nullable JdbcPersistenceService getPersistenceService() {
         for (PersistenceService persistenceService : persistenceServiceRegistry.getAll()) {
-            if (persistenceService instanceof JdbcPersistenceService) {
-                return (JdbcPersistenceService) persistenceService;
+            if (persistenceService instanceof JdbcPersistenceService service) {
+                return service;
             }
         }
         return null;
index 10045d1edbb415072bb40541534e0ca1467510fc..3fba01c5193c7fd565b6b24f35ff46b05c64456f 100644 (file)
@@ -223,7 +223,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
         logger.debug("JDBC::doGetHistItemFilterQuery got Array length={}", m.size());
         // we already retrieve the unit here once as it is a very costly operation
         String itemName = item.getName();
-        Unit<? extends Quantity<?>> unit = item instanceof NumberItem ? ((NumberItem) item).getUnit() : null;
+        Unit<? extends Quantity<?>> unit = item instanceof NumberItem ni ? ni.getUnit() : null;
         return m.stream().map(o -> {
             logger.debug("JDBC::doGetHistItemFilterQuery 0='{}' 1='{}'", o[0], o[1]);
             return new JdbcHistoricItem(itemName, objectAsState(item, unit, o[1]), objectAsZonedDateTime(o[0]));
index 01a71ec528e1ea98cacc5e9f077cfe5e9d0d4319..7be7e5c448c297ca91fb18448d4152a1a72342eb 100644 (file)
@@ -62,9 +62,11 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
         // Prevent error against duplicate time value
         // http://hsqldb.org/doc/guide/dataaccess-chapt.html#dac_merge_statement
         // SQL_INSERT_ITEM_VALUE = "INSERT INTO #tableName# (TIME, VALUE) VALUES( NOW(), CAST( ? as #dbType#) )";
-        sqlInsertItemValue = "MERGE INTO #tableName# "
-                + "USING (VALUES #tablePrimaryValue#, CAST( ? as #dbType#)) temp (TIME, VALUE) ON (#tableName#.TIME=temp.TIME) "
-                + "WHEN NOT MATCHED THEN INSERT (TIME, VALUE) VALUES (temp.TIME, temp.VALUE)";
+        sqlInsertItemValue = """
+                MERGE INTO #tableName# \
+                USING (VALUES #tablePrimaryValue#, CAST( ? as #dbType#)) temp (TIME, VALUE) ON (#tableName#.TIME=temp.TIME) \
+                WHEN NOT MATCHED THEN INSERT (TIME, VALUE) VALUES (temp.TIME, temp.VALUE)\
+                """;
     }
 
     /**
index 8add63026afd443f0fe26c5684d8fde42119db91..155f7c2099312480f397abac2efa4c32d5ab53d5 100644 (file)
@@ -63,14 +63,18 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
         sqlIfTableExists = "SELECT * FROM PG_TABLES WHERE TABLENAME='#searchTable#'";
         sqlCreateItemsTableIfNot = "CREATE TABLE IF NOT EXISTS #itemsManageTable# (itemid SERIAL NOT NULL, #colname# #coltype# NOT NULL, CONSTRAINT #itemsManageTable#_pkey PRIMARY KEY (itemid))";
         sqlCreateNewEntryInItemsTable = "INSERT INTO items (itemname) SELECT itemname FROM #itemsManageTable# UNION VALUES ('#itemname#') EXCEPT SELECT itemname FROM items";
-        sqlGetItemTables = "SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_schema=(SELECT table_schema "
-                + "FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_name='#itemsManageTable#') AND NOT table_name='#itemsManageTable#'";
+        sqlGetItemTables = """
+                SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_schema=(SELECT table_schema \
+                FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_name='#itemsManageTable#') AND NOT table_name='#itemsManageTable#'\
+                """;
         // The PostgreSQL equivalent to MySQL columns.column_type is data_type (e.g. "timestamp with time zone") and
         // udt_name which contains a shorter alias (e.g. "timestamptz"). We alias data_type as "column_type" and
         // udt_name as "column_type_alias" to be compatible with the 'Column' class used in Yank.queryBeanList
-        sqlGetTableColumnTypes = "SELECT column_name, data_type as column_type, udt_name as column_type_alias, is_nullable FROM information_schema.columns "
-                + "WHERE table_name='#tableName#' AND table_catalog='#jdbcUriDatabaseName#' AND table_schema=(SELECT table_schema FROM information_schema.tables WHERE table_type='BASE TABLE' "
-                + "AND table_name='#itemsManageTable#')";
+        sqlGetTableColumnTypes = """
+                SELECT column_name, data_type as column_type, udt_name as column_type_alias, is_nullable FROM information_schema.columns \
+                WHERE table_name='#tableName#' AND table_catalog='#jdbcUriDatabaseName#' AND table_schema=(SELECT table_schema FROM information_schema.tables WHERE table_type='BASE TABLE' \
+                AND table_name='#itemsManageTable#')\
+                """;
         // NOTICE: on PostgreSql >= 9.5, sqlInsertItemValue query template is modified to do an "upsert" (overwrite
         // existing value). The version check and query change is performed at initAfterFirstDbConnection()
         sqlInsertItemValue = "INSERT INTO #tableName# (TIME, VALUE) VALUES( #tablePrimaryValue#, CAST( ? as #dbType#) )";
@@ -87,8 +91,10 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
         // see: https://www.postgresql.org/docs/9.5/sql-insert.html
         if (dbMeta.isDbVersionGreater(9, 4)) {
             logger.debug("JDBC::initAfterFirstDbConnection: Values with the same time will be upserted (Pg >= 9.5)");
-            sqlInsertItemValue = "INSERT INTO #tableName# (TIME, VALUE) VALUES( #tablePrimaryValue#, CAST( ? as #dbType#) )"
-                    + " ON CONFLICT (TIME) DO UPDATE SET VALUE=EXCLUDED.VALUE";
+            sqlInsertItemValue = """
+                    INSERT INTO #tableName# (TIME, VALUE) VALUES( #tablePrimaryValue#, CAST( ? as #dbType#) )\
+                     ON CONFLICT (TIME) DO UPDATE SET VALUE=EXCLUDED.VALUE\
+                    """;
         }
     }
 
index dd91385d61fd0af931559026a7553cb8a8e46c97..e10139f0e67053b30096282216e308f90a18c05d 100644 (file)
@@ -36,14 +36,13 @@ public class StateHelper {
      * @return state converted as string
      */
     public static String toString(State state) {
-        if (state instanceof DateTimeType) {
-            return String.valueOf(((DateTimeType) state).getZonedDateTime().toInstant().toEpochMilli());
+        if (state instanceof DateTimeType type) {
+            return String.valueOf(type.getZonedDateTime().toInstant().toEpochMilli());
         }
-        if (state instanceof DecimalType) {
-            return String.valueOf(((DecimalType) state).doubleValue());
+        if (state instanceof DecimalType type) {
+            return String.valueOf(type.doubleValue());
         }
-        if (state instanceof PointType) {
-            PointType pType = (PointType) state;
+        if (state instanceof PointType pType) {
             return String.format(Locale.ENGLISH, "%f;%f;%f", pType.getLatitude().doubleValue(),
                     pType.getLongitude().doubleValue(), pType.getAltitude().doubleValue());
         }
index 336e4039cef5435c917f1fe2374ee74d4d241f7b..70d3cb10529f6f683cbd9d28e4bd2ed8abfb4c63 100644 (file)
@@ -101,8 +101,7 @@ public class MapDbPersistenceService implements QueryablePersistenceService {
             map = db.createTreeMap("itemStore").makeOrGet();
         } catch (RuntimeException re) {
             Throwable cause = re.getCause();
-            if (cause instanceof ClassNotFoundException) {
-                ClassNotFoundException cnf = (ClassNotFoundException) cause;
+            if (cause instanceof ClassNotFoundException cnf) {
                 logger.warn(
                         "The MapDB in {} is incompatible with openHAB {}: {}. A new and empty MapDB will be used instead.",
                         dbFile, OpenHAB.getVersion(), cnf.getMessage());
index 638e651157e986b127105200c5c39bc83734357b..f683b5e1ecb1dbb61ef87625bba585d8568e348f 100644 (file)
@@ -199,12 +199,12 @@ public class MongoDBPersistenceService implements QueryablePersistenceService {
 
     private Object convertValue(State state) {
         Object value;
-        if (state instanceof PercentType) {
-            value = ((PercentType) state).toBigDecimal().doubleValue();
-        } else if (state instanceof DateTimeType) {
-            value = Date.from(((DateTimeType) state).getZonedDateTime().toInstant());
-        } else if (state instanceof DecimalType) {
-            value = ((DecimalType) state).toBigDecimal().doubleValue();
+        if (state instanceof PercentType type) {
+            value = type.toBigDecimal().doubleValue();
+        } else if (state instanceof DateTimeType type) {
+            value = Date.from(type.getZonedDateTime().toInstant());
+        } else if (state instanceof DecimalType type) {
+            value = type.toBigDecimal().doubleValue();
         } else {
             value = state.toString();
         }
index 7c1b3008f93d24154b4f4aafd625f0b18da39df1..8cc9b5688729ec87469e21bb772c235293773222 100644 (file)
@@ -209,8 +209,7 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
             }
 
             Object v = config.get(key);
-            if (v instanceof String) {
-                String value = (String) v;
+            if (v instanceof String value) {
                 String name = subkeys[0].toLowerCase();
                 String property = subkeys[1].toLowerCase();
 
@@ -430,10 +429,10 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
         Unit<?> unit = null;
         try {
             item = itemRegistry.getItem(itemName);
-            if (item instanceof NumberItem) {
+            if (item instanceof NumberItem numberItem) {
                 // we already retrieve the unit here once as it is a very costly operation,
                 // see https://github.com/openhab/openhab-addons/issues/8928
-                unit = ((NumberItem) item).getUnit();
+                unit = numberItem.getUnit();
             }
         } catch (ItemNotFoundException e) {
             logger.debug("Could not find item '{}' in registry", itemName);
@@ -566,8 +565,7 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
                 if (!isSupportedItemType(item)) {
                     return null;
                 }
-                if (item instanceof NumberItem) {
-                    NumberItem numberItem = (NumberItem) item;
+                if (item instanceof NumberItem numberItem) {
                     useRdc = numberItem.getDimension() != null ? rrdDefs.get(DEFAULT_QUANTIFIABLE)
                             : rrdDefs.get(DEFAULT_NUMERIC);
                 } else {
@@ -608,8 +606,8 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
     private State mapToState(double value, @Nullable Item item, @Nullable Unit unit) {
-        if (item instanceof GroupItem) {
-            item = ((GroupItem) item).getBaseItem();
+        if (item instanceof GroupItem groupItem) {
+            item = groupItem.getBaseItem();
         }
 
         if (item instanceof SwitchItem && !(item instanceof DimmerItem)) {
@@ -628,8 +626,8 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
     }
 
     private boolean isSupportedItemType(Item item) {
-        if (item instanceof GroupItem) {
-            final Item baseItem = ((GroupItem) item).getBaseItem();
+        if (item instanceof GroupItem groupItem) {
+            final Item baseItem = groupItem.getBaseItem();
             if (baseItem != null) {
                 item = baseItem;
             }
index 442bd0cce3879ac3c941a87d900b18b0a9c42e71..2118cff5ef6cd457cc06352a40262329b1b8e4a3 100644 (file)
@@ -267,8 +267,7 @@ public class RRD4jChartServlet implements Servlet, ChartProvider {
             String[] groupNames = groups.split(",");
             for (String groupName : groupNames) {
                 Item item = itemUIRegistry.getItem(groupName);
-                if (item instanceof GroupItem) {
-                    GroupItem groupItem = (GroupItem) item;
+                if (item instanceof GroupItem groupItem) {
                     for (Item member : groupItem.getMembers()) {
                         addLine(graphDef, member, seriesCounter++);
                     }
index 16d0c6bc3f840e120f87b7cf34ed2b0c1e9baa5e..bad9c4e078244c44b715a41c75515eecc8d19e77 100644 (file)
@@ -87,8 +87,8 @@ public class RRD4jCommandExtension extends AbstractConsoleCommandExtension imple
 
     private @Nullable RRD4jPersistenceService getPersistenceService() {
         for (PersistenceService persistenceService : persistenceServiceRegistry.getAll()) {
-            if (persistenceService instanceof RRD4jPersistenceService) {
-                return (RRD4jPersistenceService) persistenceService;
+            if (persistenceService instanceof RRD4jPersistenceService service) {
+                return service;
             }
         }
         return null;