]> git.basschouten.com Git - openhab-addons.git/commitdiff
Update lastnpe EEA to 2.4.0 (#16875)
authorlsiepel <leosiepel@gmail.com>
Thu, 11 Jul 2024 11:51:10 +0000 (13:51 +0200)
committerGitHub <noreply@github.com>
Thu, 11 Jul 2024 11:51:10 +0000 (13:51 +0200)
Signed-off-by: Leo Siepel <leosiepel@gmail.com>
127 files changed:
bundles/org.openhab.automation.jrubyscripting/src/main/java/org/openhab/automation/jrubyscripting/internal/JRubyScriptEngineConfiguration.java
bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/fs/watch/JSScriptFileWatcher.java
bundles/org.openhab.automation.jythonscripting/src/main/java/org/openhab/automation/jythonscripting/internal/watch/JythonScriptFileWatcher.java
bundles/org.openhab.binding.airquality/src/main/java/org/openhab/binding/airquality/internal/api/dto/AirQualityData.java
bundles/org.openhab.binding.airquality/src/main/java/org/openhab/binding/airquality/internal/handler/AirQualityStationHandler.java
bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/philipstv/PhilipsTVConnectionManager.java
bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/philipstv/service/TvChannelService.java
bundles/org.openhab.binding.argoclima/src/main/java/org/openhab/binding/argoclima/internal/configuration/ArgoClimaConfigurationBase.java
bundles/org.openhab.binding.argoclima/src/main/java/org/openhab/binding/argoclima/internal/device/api/ArgoClimaRemoteDevice.java
bundles/org.openhab.binding.argoclima/src/main/java/org/openhab/binding/argoclima/internal/device/api/DeviceStatus.java
bundles/org.openhab.binding.argoclima/src/main/java/org/openhab/binding/argoclima/internal/device/api/protocol/elements/ArgoApiElementBase.java
bundles/org.openhab.binding.argoclima/src/main/java/org/openhab/binding/argoclima/internal/device/api/protocol/elements/OnOffParam.java
bundles/org.openhab.binding.asuswrt/src/main/java/org/openhab/binding/asuswrt/internal/api/AsuswrtHttpClient.java
bundles/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/FritzAhaContentExchange.java
bundles/org.openhab.binding.boschshc/src/main/java/org/openhab/binding/boschshc/internal/devices/bridge/BridgeHandler.java
bundles/org.openhab.binding.boschshc/src/main/java/org/openhab/binding/boschshc/internal/devices/bridge/LongPolling.java
bundles/org.openhab.binding.boschshc/src/main/java/org/openhab/binding/boschshc/internal/discovery/ThingDiscoveryService.java
bundles/org.openhab.binding.coronastats/src/main/java/org/openhab/binding/coronastats/internal/handler/CoronaStatsWorldHandler.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/BasicInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/ControlInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/airbase/AirbaseBasicInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/airbase/AirbaseControlInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/airbase/AirbaseModelInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/api/airbase/AirbaseZoneInfo.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/discovery/DaikinACUnitDiscoveryService.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/handler/DaikinAcUnitHandler.java
bundles/org.openhab.binding.daikin/src/main/java/org/openhab/binding/daikin/internal/handler/DaikinBaseHandler.java
bundles/org.openhab.binding.digiplex/src/main/java/org/openhab/binding/digiplex/internal/communication/AreaStatus.java
bundles/org.openhab.binding.digiplex/src/main/java/org/openhab/binding/digiplex/internal/communication/ArmDisarmType.java
bundles/org.openhab.binding.digiplex/src/main/java/org/openhab/binding/digiplex/internal/communication/ArmType.java
bundles/org.openhab.binding.digiplex/src/main/java/org/openhab/binding/digiplex/internal/communication/ZoneStatus.java
bundles/org.openhab.binding.digiplex/src/main/java/org/openhab/binding/digiplex/internal/communication/events/SpecialAlarmType.java
bundles/org.openhab.binding.dsmr/src/main/java/org/openhab/binding/dsmr/internal/device/DSMRDeviceRunnable.java
bundles/org.openhab.binding.dsmr/src/main/java/org/openhab/binding/dsmr/internal/device/SmartyDecrypter.java
bundles/org.openhab.binding.dsmr/src/main/java/org/openhab/binding/dsmr/internal/device/connector/DSMRBaseConnector.java
bundles/org.openhab.binding.dsmr/src/main/java/org/openhab/binding/dsmr/internal/device/connector/DSMRSerialConnector.java
bundles/org.openhab.binding.dwdpollenflug/src/main/java/org/openhab/binding/dwdpollenflug/internal/handler/DWDPollenflugBridgeHandler.java
bundles/org.openhab.binding.easee/src/main/java/org/openhab/binding/easee/internal/command/AbstractCommand.java
bundles/org.openhab.binding.ecovacs/src/main/java/org/openhab/binding/ecovacs/internal/api/commands/GetActiveMapIdCommand.java
bundles/org.openhab.binding.ecovacs/src/main/java/org/openhab/binding/ecovacs/internal/handler/EcovacsVacuumHandler.java
bundles/org.openhab.binding.ekey/src/main/java/org/openhab/binding/ekey/internal/handler/EkeyHandler.java
bundles/org.openhab.binding.enigma2/src/main/java/org/openhab/binding/enigma2/internal/Enigma2Client.java
bundles/org.openhab.binding.enocean/src/main/java/org/openhab/binding/enocean/internal/messages/EventMessage.java
bundles/org.openhab.binding.fineoffsetweatherstation/src/main/java/org/openhab/binding/fineoffsetweatherstation/internal/domain/Measurand.java
bundles/org.openhab.binding.fmiweather/src/test/java/org/openhab/binding/fmiweather/AbstractWeatherHandlerTest.java
bundles/org.openhab.binding.freeboxos/src/main/java/org/openhab/binding/freeboxos/internal/api/rest/PlayerManager.java
bundles/org.openhab.binding.gce/src/main/java/org/openhab/binding/gce/internal/model/StatusFileInterpreter.java
bundles/org.openhab.binding.haassohnpelletstove/src/main/java/org/openhab/binding/haassohnpelletstove/internal/HaasSohnpelletstoveJSONCommunication.java
bundles/org.openhab.binding.heliosventilation/src/main/java/org/openhab/binding/heliosventilation/internal/HeliosVentilationBindingConstants.java
bundles/org.openhab.binding.heos/src/main/java/org/openhab/binding/heos/internal/handler/HeosDynamicStateDescriptionProvider.java
bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/handler/Clip2ThingHandler.java
bundles/org.openhab.binding.knx/src/main/java/org/openhab/binding/knx/internal/client/AbstractKNXClient.java
bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/LcnModuleActions.java
bundles/org.openhab.binding.lcn/src/main/java/org/openhab/binding/lcn/internal/subhandler/LcnModuleThresholdSubHandler.java
bundles/org.openhab.binding.luxom/src/main/java/org/openhab/binding/luxom/internal/protocol/LuxomAction.java
bundles/org.openhab.binding.magentatv/src/main/java/org/openhab/binding/magentatv/internal/network/MagentaTVOAuth.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/config/servlet/PairAccountServlet.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/config/servlet/SuccessServlet.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/discovery/ThingDiscoveryService.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/discovery/ThingInformationExtractor.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/handler/AbstractMieleThingHandler.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/handler/channel/ChannelTypeUtil.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/webservice/api/DeviceState.java
bundles/org.openhab.binding.mielecloud/src/main/java/org/openhab/binding/mielecloud/internal/webservice/api/json/Type.java
bundles/org.openhab.binding.mielecloud/src/test/java/org/openhab/binding/mielecloud/internal/webservice/sse/SseConnectionTest.java
bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsActions.java
bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java
bundles/org.openhab.binding.modbus.helioseasycontrols/src/test/java/org/openhab/binding/modbus/helioseasycontrols/internal/PreparePayloadTest.java
bundles/org.openhab.binding.modbus.stiebeleltron/src/main/java/org/openhab/binding/modbus/stiebeleltron/internal/parser/AbstractBaseParser.java
bundles/org.openhab.binding.modbus.sunspec/src/main/java/org/openhab/binding/modbus/sunspec/internal/handler/InverterHandler.java
bundles/org.openhab.binding.modbus.sunspec/src/main/java/org/openhab/binding/modbus/sunspec/internal/handler/MeterHandler.java
bundles/org.openhab.binding.modbus.sunspec/src/main/java/org/openhab/binding/modbus/sunspec/internal/parser/AbstractBaseParser.java
bundles/org.openhab.binding.mybmw/src/test/java/org/openhab/binding/mybmw/internal/dto/charge/ChargingStatisticsTest.java
bundles/org.openhab.binding.mycroft/src/main/java/org/openhab/binding/mycroft/internal/api/MessageType.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/data/ModuleType.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/api/dto/NAThing.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/deserialization/NAPushTypeDeserializer.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/CommonInterface.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/AlarmEventCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/CameraCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/PersonCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/RefreshAutoCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/capability/SecurityCapability.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/handler/channelhelper/TimestampChannelHelper.java
bundles/org.openhab.binding.netatmo/src/main/java/org/openhab/binding/netatmo/internal/utils/ChannelTypeUtils.java
bundles/org.openhab.binding.nibeuplink/src/main/java/org/openhab/binding/nibeuplink/internal/callback/AbstractUplinkCommandCallback.java
bundles/org.openhab.binding.nikohomecontrol/src/main/java/org/openhab/binding/nikohomecontrol/internal/protocol/nhc2/NhcSystemInfo2.java
bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/OmnilinkBridgeHandler.java
bundles/org.openhab.binding.pentair/src/main/java/org/openhab/binding/pentair/internal/handler/helpers/PentairControllerCircuit.java
bundles/org.openhab.binding.pentair/src/main/java/org/openhab/binding/pentair/internal/handler/helpers/PentairControllerLightMode.java
bundles/org.openhab.binding.pentair/src/main/java/org/openhab/binding/pentair/internal/handler/helpers/PentairHeatStatus.java
bundles/org.openhab.binding.pixometer/src/main/java/org/openhab/binding/pixometer/handler/MeterHandler.java
bundles/org.openhab.binding.pushsafer/src/main/java/org/openhab/binding/pushsafer/internal/connection/PushsaferMessageBuilder.java
bundles/org.openhab.binding.radiothermostat/src/main/java/org/openhab/binding/radiothermostat/internal/communication/RadioThermostatConnector.java
bundles/org.openhab.binding.revogi/src/main/java/org/openhab/binding/revogi/internal/api/StatusService.java
bundles/org.openhab.binding.revogi/src/main/java/org/openhab/binding/revogi/internal/api/SwitchService.java
bundles/org.openhab.binding.sagercaster/src/main/java/org/openhab/binding/sagercaster/internal/caster/SagerWeatherCaster.java
bundles/org.openhab.binding.saicismart/src/main/java/org/openhab/binding/saicismart/internal/SAICiSMARTBridgeHandler.java
bundles/org.openhab.binding.samsungtv/src/main/java/org/openhab/binding/samsungtv/internal/Utils.java
bundles/org.openhab.binding.samsungtv/src/main/java/org/openhab/binding/samsungtv/internal/protocol/RemoteControllerWebSocket.java
bundles/org.openhab.binding.samsungtv/src/main/java/org/openhab/binding/samsungtv/internal/service/MainTVServerService.java
bundles/org.openhab.binding.samsungtv/src/main/java/org/openhab/binding/samsungtv/internal/service/SmartThingsApiService.java
bundles/org.openhab.binding.satel/src/main/java/org/openhab/binding/satel/internal/handler/SatelSystemHandler.java
bundles/org.openhab.binding.sensorcommunity/src/main/java/org/openhab/binding/sensorcommunity/internal/handler/HTTPHandler.java
bundles/org.openhab.binding.serial/src/main/java/org/openhab/binding/serial/internal/util/Parity.java
bundles/org.openhab.binding.serial/src/main/java/org/openhab/binding/serial/internal/util/StopBits.java
bundles/org.openhab.binding.smhi/src/main/java/org/openhab/binding/smhi/internal/ForecastAggregator.java
bundles/org.openhab.binding.smsmodem/src/3rdparty/java/org/smslib/driver/AbstractModemDriver.java
bundles/org.openhab.binding.solaredge/src/main/java/org/openhab/binding/solaredge/internal/command/AbstractCommand.java
bundles/org.openhab.binding.solax/src/main/java/org/openhab/binding/solax/internal/model/InverterType.java
bundles/org.openhab.binding.sonnen/src/main/java/org/openhab/binding/sonnen/internal/SonnenConfiguration.java
bundles/org.openhab.binding.sonnen/src/main/java/org/openhab/binding/sonnen/internal/SonnenHandler.java
bundles/org.openhab.binding.surepetcare/src/main/java/org/openhab/binding/surepetcare/internal/dto/SurePetcareDevice.java
bundles/org.openhab.binding.tapocontrol/src/main/java/org/openhab/binding/tapocontrol/internal/api/protocol/aes/SecurePassthrough.java
bundles/org.openhab.binding.tapocontrol/src/main/java/org/openhab/binding/tapocontrol/internal/api/protocol/passthrough/PassthroughProtocol.java
bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/soap/SOAPConnector.java
bundles/org.openhab.binding.upnpcontrol/src/main/java/org/openhab/binding/upnpcontrol/internal/queue/UpnpEntry.java
bundles/org.openhab.binding.volvooncall/src/main/java/org/openhab/binding/volvooncall/internal/dto/Status.java
bundles/org.openhab.binding.volvooncall/src/main/java/org/openhab/binding/volvooncall/internal/handler/VehicleHandler.java
bundles/org.openhab.binding.volvooncall/src/main/java/org/openhab/binding/volvooncall/internal/wrapper/VehiclePositionWrapper.java
bundles/org.openhab.io.homekit/src/main/java/org/openhab/io/homekit/internal/accessories/HomekitAccessoryFactory.java
bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/InfluxDBConfiguration.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcConfiguration.java
bundles/org.openhab.transform.scale/src/main/java/org/openhab/transform/scale/internal/ScaleTransformationService.java
bundles/org.openhab.voice.mimictts/src/main/java/org/openhab/voice/mimic/internal/InputStreamAudioStream.java
bundles/org.openhab.voice.pollytts/src/main/java/org/openhab/voice/pollytts/internal/PollyTTSAudioStream.java
pom.xml

index 73c2991099349953ce01aa4477dd0fd106803f1e..b6989e8222a5e8623624a2fb566043764154520d 100644 (file)
@@ -379,7 +379,7 @@ public class JRubyScriptEngineConfiguration {
         private final String defaultValue;
         private final Optional<String> mappedTo;
         private final Type type;
-        private Optional<String> value;
+        private @Nullable String value;
 
         private OptionalConfigurationElement(String defaultValue) {
             this(Type.OTHER, defaultValue, null);
@@ -389,19 +389,19 @@ public class JRubyScriptEngineConfiguration {
             this.type = type;
             this.defaultValue = defaultValue;
             this.mappedTo = Optional.ofNullable(mappedTo);
-            value = Optional.empty();
         }
 
         private String getValue() {
-            return value.orElse(defaultValue);
+            String value = this.value;
+            return value != null ? value : this.defaultValue;
         }
 
-        private void setValue(String value) {
-            this.value = Optional.of(value);
+        private void setValue(@Nullable String value) {
+            this.value = value;
         }
 
         private void clearValue() {
-            this.value = Optional.empty();
+            this.value = null;
         }
 
         private Optional<String> mappedTo() {
index 098c93ac9756262dd8a6169e9b688c5a007c4f6e..cde752d3bcdde9e1eefab913181b56aab8323935 100644 (file)
@@ -48,9 +48,10 @@ public class JSScriptFileWatcher extends AbstractScriptFileWatcher {
 
     @Override
     protected Optional<String> getScriptType(Path scriptFilePath) {
-        String scriptType = super.getScriptType(scriptFilePath).orElse(null);
-        if (!scriptFilePath.startsWith(getWatchPath().resolve("node_modules")) && ("js".equals(scriptType))) {
-            return Optional.of(scriptType);
+        Optional<String> scriptType = super.getScriptType(scriptFilePath);
+        if (scriptType.isPresent() && !scriptFilePath.startsWith(getWatchPath().resolve("node_modules"))
+                && ("js".equals(scriptType.get()))) {
+            return scriptType;
         }
         return Optional.empty();
     }
index 3682dea1d59804302a149d05c91ce92e9102c2cf..bebbc80378756a6bb53685b3f7694426609554a8 100644 (file)
@@ -48,9 +48,10 @@ public class JythonScriptFileWatcher extends AbstractScriptFileWatcher {
 
     @Override
     protected Optional<String> getScriptType(Path scriptFilePath) {
-        String scriptType = super.getScriptType(scriptFilePath).orElse(null);
-        if (!scriptFilePath.startsWith(getWatchPath().resolve("lib")) && ("py".equals(scriptType))) {
-            return Optional.of(scriptType);
+        Optional<String> scriptType = super.getScriptType(scriptFilePath);
+        if (scriptType.isPresent() && !scriptFilePath.startsWith(getWatchPath().resolve("lib"))
+                && ("py".equals(scriptType.get()))) {
+            return scriptType;
         }
         return Optional.empty();
     }
index 4e7671e0f7132a969196958fc60135934489b70e..2b37e3db4837e250189480616c6d70f08c8b6815 100644 (file)
@@ -62,8 +62,8 @@ public class AirQualityData extends ResponseRoot {
      *
      * @return {AirQualityJsonTime}
      */
-    public Optional<AirQualityTime> getTime() {
-        return Optional.ofNullable(time);
+    public @Nullable AirQualityTime getTime() {
+        return time;
     }
 
     /**
index 8e2b55075097a6fdd0d48f5781d22022c9534d86..f5fede8b12e17c5009c58733c518a411bb9e97b8 100644 (file)
@@ -35,6 +35,7 @@ import org.openhab.binding.airquality.internal.api.Index;
 import org.openhab.binding.airquality.internal.api.Pollutant;
 import org.openhab.binding.airquality.internal.api.Pollutant.SensitiveGroup;
 import org.openhab.binding.airquality.internal.api.dto.AirQualityData;
+import org.openhab.binding.airquality.internal.api.dto.AirQualityTime;
 import org.openhab.binding.airquality.internal.config.AirQualityConfiguration;
 import org.openhab.binding.airquality.internal.config.SensitiveGroupConfiguration;
 import org.openhab.core.config.core.Configuration;
@@ -261,10 +262,10 @@ public class AirQualityStationHandler extends BaseThingHandler {
                 double hum = data.getIaqiValue("h");
                 return hum != -1 ? new QuantityType<>(hum, Units.PERCENT) : UnDefType.NULL;
             case TIMESTAMP:
-                return data.getTime()
-                        .map(time -> (State) new DateTimeType(
-                                time.getObservationTime().withZoneSameLocal(timeZoneProvider.getTimeZone())))
-                        .orElse(UnDefType.NULL);
+                AirQualityTime time = data.getTime();
+                return time != null
+                        ? new DateTimeType(time.getObservationTime().withZoneSameLocal(timeZoneProvider.getTimeZone()))
+                        : UnDefType.NULL;
             case DOMINENT:
                 return new StringType(data.getDominentPol());
             case DEW_POINT:
index 30c49311eaccee6bfd5fea213eea1782cf44410d..c811573d9ab00fda862d241abfe4eca2b7209bfd 100644 (file)
@@ -230,9 +230,9 @@ public class PhilipsTVConnectionManager implements DiscoveryListener {
             Map<String, String> configMap = OBJECT_MAPPER.readValue(configJson,
                     new TypeReference<HashMap<String, String>>() {
                     });
-            this.username = Optional.ofNullable(configMap.get("username")).orElse("");
-            this.password = Optional.ofNullable(configMap.get("password")).orElse("");
-            this.macAddress = Optional.ofNullable(configMap.get("macAddress")).orElse("");
+            this.username = configMap.getOrDefault("username", "");
+            this.password = configMap.getOrDefault("password", "");
+            this.macAddress = configMap.getOrDefault("macAddress", "");
             logger.debug("Processed configJson as {} {} {}", this.username, this.password, this.macAddress);
         } catch (IOException ex) {
             logger.debug("IOException when reading configJson from file {}", ex.getMessage());
index 53ae7fb3c39aa532d21e0daaf95399f208c649fc..e0479e5630e43dc80dcad3edcf4eb3f69aaab7b0 100644 (file)
@@ -18,7 +18,6 @@ import static org.openhab.binding.androidtv.internal.protocol.philipstv.PhilipsT
 
 import java.io.IOException;
 import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.ConcurrentMap;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -122,7 +121,8 @@ public class TvChannelService implements PhilipsTVService {
     private String getCurrentTvChannel() throws IOException {
         TvChannelDTO tvChannelDTO = OBJECT_MAPPER.readValue(connectionManager.doHttpsGet(TV_CHANNEL_PATH),
                 TvChannelDTO.class);
-        return Optional.ofNullable(tvChannelDTO.getChannel()).map(ChannelDTO::getName).orElse("NA");
+        ChannelDTO channel = tvChannelDTO.getChannel();
+        return channel != null ? channel.getName() : "NA";
     }
 
     private void switchTvChannel(Command command) throws IOException {
index 73f0ffb3880817e3cb5f49a8b8cedf6b52ac61ed..c7a16a71d4c64cdfc98530af3a146b85342b73c9 100644 (file)
@@ -373,13 +373,10 @@ public abstract class ArgoClimaConfigurationBase extends Configuration implement
             validateInternal();
             return "";
         } catch (Exception e) {
-            var msg = Optional.ofNullable(e.getLocalizedMessage());
+            var msg = e.getLocalizedMessage();
             var cause = Optional.ofNullable(e.getCause());
-            return msg.orElse("Unknown exception, message is null") // The message theoretically can be null
-                                                                    // (Exception's i-face) but in practice never is, so
-                                                                    // keeping cryptic non-i18nized text instead of
-                                                                    // throwing
-                    .concat(cause.map(c -> "\n\t[" + c.getClass().getSimpleName() + "]").orElse(""));
+            return Objects.requireNonNullElse(msg, "Unknown exception, message is null").concat(
+                    Objects.requireNonNull(cause.map(c -> "\n\t[" + c.getClass().getSimpleName() + "]").orElse("")));
         }
     }
 }
index 7cf852c3c63ba60f3425eb87222bc528d9d65922..dd83f04b1c3fcecfe44d2cfbf0e9fb490c0d0477 100644 (file)
@@ -18,7 +18,6 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.SortedMap;
 import java.util.function.Consumer;
 import java.util.regex.Pattern;
@@ -142,8 +141,8 @@ public class ArgoClimaRemoteDevice extends ArgoClimaDeviceApiBase {
 
         // Group names must match regex above
         var properties = new DeviceProperties(Objects.requireNonNull(matcher.group("localIP")),
-                Objects.requireNonNull(matcher.group("lastSeen")), Optional.of(
-                        getWebUiUrl(Objects.requireNonNull(this.oemServerHostname.getHostName()), this.oemServerPort)));
+                Objects.requireNonNull(matcher.group("lastSeen")),
+                getWebUiUrl(Objects.requireNonNull(this.oemServerHostname.getHostName()), this.oemServerPort));
 
         return new DeviceStatus(Objects.requireNonNull(matcher.group("commands")), properties, i18nProvider);
     }
index 0d738ced246a2c71ab7f4869d58d45730c9f3ad1..b094f3ec3a637752eedcba25e288bb59931260fc 100644 (file)
@@ -20,11 +20,12 @@ import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.FormatStyle;
 import java.util.Collections;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.openhab.binding.argoclima.internal.ArgoClimaBindingConstants;
 import org.openhab.binding.argoclima.internal.ArgoClimaTranslationProvider;
 import org.openhab.binding.argoclima.internal.configuration.ArgoClimaConfigurationRemote;
@@ -53,17 +54,29 @@ class DeviceStatus {
      */
     static class DeviceProperties {
         private static final Logger LOGGER = LoggerFactory.getLogger(DeviceProperties.class);
-        private final Optional<String> localIP;
-        private final Optional<OffsetDateTime> lastSeen;
-        private final Optional<URL> vendorUiUrl;
-        private Optional<String> cpuId = Optional.empty();
-        private Optional<String> webUiUsername = Optional.empty();
-        private Optional<String> webUiPassword = Optional.empty();
-        private Optional<String> unitFWVersion = Optional.empty();
-        private Optional<String> wifiFWVersion = Optional.empty();
-        private Optional<String> wifiSSID = Optional.empty();
-        private Optional<String> wifiPassword = Optional.empty();
-        private Optional<String> localTime = Optional.empty();
+
+        private OffsetDateTime lastSeen = OffsetDateTime.MIN;
+
+        @Nullable
+        private final String localIP;
+        @Nullable
+        private final URL vendorUiUrl;
+        @Nullable
+        private String cpuId;
+        @Nullable
+        private String webUiUsername;
+        @Nullable
+        private String webUiPassword;
+        @Nullable
+        private String unitFWVersion;
+        @Nullable
+        private String wifiFWVersion;
+        @Nullable
+        private String wifiSSID;
+        @Nullable
+        private String wifiPassword;
+        @Nullable
+        private String localTime;
 
         /**
          * C-tor (from remote server query response)
@@ -72,8 +85,8 @@ class DeviceStatus {
          * @param lastSeenStr The ISO-8601-formatted date/time of last update (or empty string if N/A)
          * @param vendorUiAddress The optional full URL to vendor's web UI
          */
-        public DeviceProperties(String localIP, String lastSeenStr, Optional<URL> vendorUiAddress) {
-            this.localIP = localIP.isEmpty() ? Optional.empty() : Optional.of(localIP);
+        public DeviceProperties(String localIP, String lastSeenStr, URL vendorUiAddress) {
+            this.localIP = !localIP.isBlank() ? localIP : null;
             this.vendorUiUrl = vendorUiAddress;
             this.lastSeen = dateFromISOString(lastSeenStr, "LastSeen");
         }
@@ -84,9 +97,9 @@ class DeviceStatus {
          * @param lastSeen The date/time of last update (when the response got received)
          */
         public DeviceProperties(OffsetDateTime lastSeen) {
-            this.localIP = Optional.empty();
-            this.lastSeen = Optional.of(lastSeen);
-            this.vendorUiUrl = Optional.empty();
+            this.localIP = null;
+            this.lastSeen = lastSeen;
+            this.vendorUiUrl = null;
         }
 
         /**
@@ -96,31 +109,32 @@ class DeviceStatus {
          * @param properties The intercepted device-side request (most rich with properties)
          */
         public DeviceProperties(OffsetDateTime lastSeen, DeviceSideUpdateDTO properties) {
-            this.localIP = Optional.of(properties.setup.localIP.orElse(properties.deviceIp));
-            this.lastSeen = Optional.of(lastSeen);
-            this.vendorUiUrl = Optional.of(ArgoClimaRemoteDevice.getWebUiUrl(properties.remoteServerId, 80));
-            this.cpuId = Optional.of(properties.cpuId);
-            this.webUiUsername = Optional.of(properties.setup.username.orElse(properties.username));
-            this.webUiPassword = properties.setup.password;
-            this.unitFWVersion = Optional.of(properties.setup.unitVersionInstalled.orElse(properties.unitFirmware));
-            this.wifiFWVersion = Optional.of(properties.setup.wifiVersionInstalled.orElse(properties.wifiFirmware));
-            this.wifiSSID = properties.setup.wifiSSID;
-            this.wifiPassword = properties.setup.wifiPassword;
-            this.localTime = properties.setup.localTime;
+            this.localIP = Objects.requireNonNull(properties.setup.localIP.orElse(properties.deviceIp));
+            this.lastSeen = lastSeen;
+            this.vendorUiUrl = ArgoClimaRemoteDevice.getWebUiUrl(properties.remoteServerId, 80);
+            this.cpuId = properties.cpuId;
+            this.webUiUsername = properties.setup.username.orElse(properties.username);
+            this.webUiPassword = properties.setup.password.get();
+            this.unitFWVersion = Objects
+                    .requireNonNull(properties.setup.unitVersionInstalled.orElse(properties.unitFirmware));
+            this.wifiFWVersion = properties.setup.wifiVersionInstalled.orElse(properties.wifiFirmware);
+            this.wifiSSID = properties.setup.wifiSSID.get();
+            this.wifiPassword = properties.setup.wifiPassword.get();
+            this.localTime = properties.setup.localTime.get();
         }
 
-        private static Optional<OffsetDateTime> dateFromISOString(String isoDateTime, String contextualName) {
+        private static OffsetDateTime dateFromISOString(String isoDateTime, String contextualName) {
             if (isoDateTime.isEmpty()) {
-                return Optional.empty();
+                return OffsetDateTime.MIN;
             }
 
             try {
-                return Optional.of(OffsetDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(isoDateTime)));
+                return OffsetDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(isoDateTime));
             } catch (DateTimeException ex) {
                 // Swallowing exception (no need to handle - proceed as if the date was never provided)
                 LOGGER.debug("Failed to parse [{}] timestamp: {}. Exception: {}", contextualName, isoDateTime,
                         ex.getMessage());
-                return Optional.empty();
+                return OffsetDateTime.MIN;
             }
         }
 
@@ -135,7 +149,7 @@ class DeviceStatus {
          * @return Time elapsed since last device-side update
          */
         Duration getLastSeenDelta() {
-            return Duration.between(lastSeen.orElse(OffsetDateTime.MIN).toInstant(), Instant.now());
+            return Duration.between(lastSeen.toInstant(), Instant.now());
         }
 
         /**
@@ -147,18 +161,50 @@ class DeviceStatus {
         SortedMap<String, String> asPropertiesRaw(TimeZoneProvider timeZoneProvider) {
             var result = new TreeMap<String, String>();
 
-            this.lastSeen.map((value) -> result.put(ArgoClimaBindingConstants.PROPERTY_LAST_SEEN,
-                    dateTimeToStringLocal(value, timeZoneProvider)));
-            this.localIP.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_LOCAL_IP_ADDRESS, value));
-            this.vendorUiUrl.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI, value.toString()));
-            this.cpuId.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_CPU_ID, value));
-            this.webUiUsername.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI_USERNAME, value));
-            this.webUiPassword.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI_PASSWORD, value));
-            this.unitFWVersion.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_UNIT_FW, value));
-            this.wifiFWVersion.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_FW, value));
-            this.wifiSSID.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_SSID, value));
-            this.wifiPassword.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_PASSWORD, value));
-            this.localTime.map(value -> result.put(ArgoClimaBindingConstants.PROPERTY_LOCAL_TIME, value));
+            String localIP = this.localIP;
+            String cpuId = this.cpuId;
+            URL vendorUiUrl = this.vendorUiUrl;
+            String webUiUsername = this.webUiUsername;
+            String webUiPassword = this.webUiPassword;
+            String unitFWVersion = this.unitFWVersion;
+            String wifiFWVersion = this.wifiFWVersion;
+            String wifiSSID = this.wifiSSID;
+            String wifiPassword = this.wifiPassword;
+            String localTime = this.localTime;
+
+            result.put(ArgoClimaBindingConstants.PROPERTY_LAST_SEEN,
+                    dateTimeToStringLocal(this.lastSeen, timeZoneProvider));
+
+            if (localIP != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_LOCAL_IP_ADDRESS, localIP);
+            }
+            if (cpuId != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_CPU_ID, cpuId);
+            }
+            if (vendorUiUrl != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI, vendorUiUrl.toString());
+            }
+            if (webUiUsername != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI_USERNAME, webUiUsername);
+            }
+            if (webUiPassword != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WEB_UI_PASSWORD, webUiPassword);
+            }
+            if (unitFWVersion != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_UNIT_FW, unitFWVersion);
+            }
+            if (wifiFWVersion != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_FW, wifiFWVersion);
+            }
+            if (wifiSSID != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_SSID, wifiSSID);
+            }
+            if (wifiPassword != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_WIFI_PASSWORD, wifiPassword);
+            }
+            if (localTime != null) {
+                result.put(ArgoClimaBindingConstants.PROPERTY_LOCAL_TIME, localTime);
+            }
             return Collections.unmodifiableSortedMap(result);
         }
     }
index 155acd0019cf23275f3cbd2098700d5dccdf6f23..a7662ab1a083c7b2790b40df5e2e0e09c5d071a6 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.argoclima.internal.device.api.protocol.elements;
 
 import java.time.Duration;
 import java.time.Instant;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -413,8 +414,9 @@ public abstract class ArgoApiElementBase implements IArgoElement {
 
     private final String getInFlightCommandsRawValueOrDefault() {
         final String valueNotAvailablePlaceholder = "N/A";
-        return inFlightCommand.map(c -> c.deviceCommandToSend.orElse(valueNotAvailablePlaceholder))
-                .orElse(valueNotAvailablePlaceholder);
+        return Objects
+                .requireNonNull(inFlightCommand.map(c -> c.deviceCommandToSend.orElse(valueNotAvailablePlaceholder))
+                        .orElse(valueNotAvailablePlaceholder));
     }
 
     /////////////
index 49cca1ee52dbb9409b31d06f55303b13f0645da9..a88211c82c709b52be5bd5a11470547149627cb7 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.argoclima.internal.device.api.protocol.elements;
 
 import java.security.InvalidParameterException;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -44,7 +45,7 @@ public class OnOffParam extends ArgoApiElementBase {
     }
 
     private static State valueToState(Optional<Boolean> value) {
-        return value.<State> map(v -> OnOffType.from(v)).orElse(UnDefType.UNDEF);
+        return Objects.requireNonNull(value.<State> map(v -> OnOffType.from(v)).orElse(UnDefType.UNDEF));
     }
 
     @Override
index bb2e9d13d2bdc9b9812f3c90ef198a2633cbcfab..220b04cf82d92eb42f9cb333ce3faf29bf14d72c 100644 (file)
@@ -140,7 +140,9 @@ public class AsuswrtHttpClient {
                         String rBody = getContentAsString();
                         logger.trace("({}) requestCompleted '{}'", uid, rBody);
                         // Handle result
-                        handleHttpSuccessResponse(rBody, command);
+                        if (rBody != null) {
+                            handleHttpSuccessResponse(rBody, command);
+                        }
                     }
                 }
             });
index 3dc704a8abad9881c49ec9e6780cbcce55cde48d..6747a86d44ec3504f218412c2ddfd959536e035b 100644 (file)
@@ -64,6 +64,8 @@ public class FritzAhaContentExchange extends BufferingResponseListener
     public void onComplete(@NonNullByDefault({}) Result result) {
         String content = getContentAsString();
         logger.debug("{} response complete: {}", result.getRequest().getMethod(), content);
-        callback.execute(result.getResponse().getStatus(), content);
+        if (content != null) {
+            callback.execute(result.getResponse().getStatus(), content);
+        }
     }
 }
index a8514f0d24b1d746f38ad8df29b8bfeb04a1f532..8deb0578061c55e8d1ee05dc858788e26e990e7c 100644 (file)
@@ -22,7 +22,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ScheduledFuture;
@@ -358,7 +357,7 @@ public class BridgeHandler extends BaseBridgeHandler {
             Type collectionType = new TypeToken<ArrayList<Device>>() {
             }.getType();
             List<Device> nullableDevices = GsonUtils.DEFAULT_GSON_INSTANCE.fromJson(content, collectionType);
-            return Optional.ofNullable(nullableDevices).orElse(Collections.emptyList());
+            return nullableDevices != null ? nullableDevices : Collections.emptyList();
         } catch (TimeoutException | ExecutionException e) {
             logger.debug("Request devices failed because of {}!", e.getMessage(), e);
             return Collections.emptyList();
@@ -391,7 +390,7 @@ public class BridgeHandler extends BaseBridgeHandler {
             }.getType();
             List<UserDefinedState> nullableUserStates = GsonUtils.DEFAULT_GSON_INSTANCE.fromJson(content,
                     collectionType);
-            return Optional.ofNullable(nullableUserStates).orElse(Collections.emptyList());
+            return nullableUserStates != null ? nullableUserStates : Collections.emptyList();
         } catch (TimeoutException | ExecutionException e) {
             logger.debug("Request user-defined states failed because of {}!", e.getMessage(), e);
             return List.of();
index 7924702d6be13ca43815e2943bfebbe47110e471..0cc9a13f24c0dae2bc3abd37c2af1feced3ff76e 100644 (file)
@@ -181,7 +181,7 @@ public class LongPolling {
      * @param content Content of the response
      */
     private void onLongPollComplete(BoschHttpClient httpClient, String subscriptionId, @Nullable Result result,
-            String content) {
+            @Nullable String content) {
         // Check if thing is still online
         if (this.aborted) {
             logger.debug("Canceling long polling for subscription id {} because it was aborted", subscriptionId);
@@ -211,7 +211,7 @@ public class LongPolling {
      * @param subscriptionId Id of subscription the response is for
      * @param content Content of the response
      */
-    private void handleLongPollResponse(BoschHttpClient httpClient, String subscriptionId, String content) {
+    private void handleLongPollResponse(BoschHttpClient httpClient, String subscriptionId, @Nullable String content) {
         logger.debug("Long poll response: {}", content);
 
         try {
index ab0a30308718b5ad06ade7631ac1627dde1c5a92..50a9b89356849d6f95c535e194d6fa9eda9168e8 100644 (file)
@@ -16,6 +16,7 @@ import java.time.Instant;
 import java.util.AbstractMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -214,7 +215,8 @@ public class ThingDiscoveryService extends AbstractThingHandlerDiscoveryService<
     }
 
     protected String getRoomNameForDevice(Device device, List<Room> rooms) {
-        return rooms.stream().filter(room -> room.id.equals(device.roomId)).findAny().map(r -> r.name).orElse("");
+        return Objects.requireNonNull(
+                rooms.stream().filter(room -> room.id.equals(device.roomId)).findAny().map(r -> r.name).orElse(""));
     }
 
     protected void addDevice(Device device, String roomName) {
index 1b54e258068f49dcf6db9bdbb71deefb833bfffb..5b5e09e8e8b1ae2dc5f65b4ca13277446b393255 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.coronastats.internal.handler;
 
 import java.net.SocketTimeoutException;
 import java.net.URI;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
@@ -154,7 +155,8 @@ public class CoronaStatsWorldHandler extends BaseBridgeHandler {
                         f.completeExceptionally(new CoronaStatsPollingException("Request failed", e));
                     }
                 } else if (response.getStatus() != 200) {
-                    f.completeExceptionally(new CoronaStatsPollingException(getContentAsString()));
+                    f.completeExceptionally(
+                            new CoronaStatsPollingException(Objects.requireNonNull(getContentAsString())));
                 } else {
                     try {
                         CoronaStats coronaStatsJSON = gson.fromJson(getContentAsString(), CoronaStats.class);
index 1636eb0f7096b0e2254f0c4897f67c2b151aa590..f5952484f25e0c84998f530f1040f7c5e53859fe 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.daikin.internal.api;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.slf4j.Logger;
@@ -43,9 +42,9 @@ public class BasicInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         BasicInfo info = new BasicInfo();
-        info.mac = Optional.ofNullable(responseMap.get("mac")).orElse("");
-        info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
-        info.ssid = Optional.ofNullable(responseMap.get("ssid")).orElse("");
+        info.mac = responseMap.getOrDefault("mac", "");
+        info.ret = responseMap.getOrDefault("ret", "");
+        info.ssid = responseMap.getOrDefault("ssid", "");
         return info;
     }
 
index fe2da507117b8ad4fc090ba79a4bc49019f674b9..81734c5634afbae958c42f31c194b6b0110f4db4 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.daikin.internal.api;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -59,23 +60,23 @@ public class ControlInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         ControlInfo info = new ControlInfo();
-        info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
+        info.ret = responseMap.getOrDefault("ret", "");
         info.power = "1".equals(responseMap.get("pow"));
-        info.mode = Optional.ofNullable(responseMap.get("mode")).flatMap(value -> InfoParser.parseInt(value))
-                .map(value -> Mode.fromValue(value)).orElse(Mode.AUTO);
+        info.mode = Objects.requireNonNull(Optional.ofNullable(responseMap.get("mode"))
+                .flatMap(value -> InfoParser.parseInt(value)).map(value -> Mode.fromValue(value)).orElse(Mode.AUTO));
         // Normalize AUTO1 and AUTO7 to AUTO
         if (info.mode == Mode.AUTO1 || info.mode == Mode.AUTO7) {
             info.autoModeValue = info.mode.getValue();
             info.mode = Mode.AUTO;
         }
         info.temp = Optional.ofNullable(responseMap.get("stemp")).flatMap(value -> InfoParser.parseDouble(value));
-        info.fanSpeed = Optional.ofNullable(responseMap.get("f_rate")).map(value -> FanSpeed.fromValue(value))
-                .orElse(FanSpeed.AUTO);
+        info.fanSpeed = Objects.requireNonNull(Optional.ofNullable(responseMap.get("f_rate"))
+                .map(value -> FanSpeed.fromValue(value)).orElse(FanSpeed.AUTO));
         // determine if device has combined direction (f_dir) or separated directions (f_dir_ud/f_dir_lr)
         if (response.contains("f_dir=")) {
-            info.fanMovement = Optional.ofNullable(responseMap.get("f_dir"))
-                    .flatMap(value -> InfoParser.parseInt(value)).map(value -> FanMovement.fromValue(value))
-                    .orElse(FanMovement.STOPPED);
+            info.fanMovement = Objects.requireNonNull(
+                    Optional.ofNullable(responseMap.get("f_dir")).flatMap(value -> InfoParser.parseInt(value))
+                            .map(value -> FanMovement.fromValue(value)).orElse(FanMovement.STOPPED));
         } else {
             info.separatedDirectionParams = true;
             String ud = responseMap.get("f_dir_ud");
@@ -89,8 +90,8 @@ public class ControlInfo {
 
         info.targetHumidity = Optional.ofNullable(responseMap.get("shum")).flatMap(value -> InfoParser.parseInt(value));
 
-        info.advancedMode = Optional.ofNullable(responseMap.get("adv")).map(value -> AdvancedMode.fromValue(value))
-                .orElse(AdvancedMode.UNKNOWN);
+        info.advancedMode = Objects.requireNonNull(Optional.ofNullable(responseMap.get("adv"))
+                .map(value -> AdvancedMode.fromValue(value)).orElse(AdvancedMode.UNKNOWN));
         return info;
     }
 
@@ -110,7 +111,7 @@ public class ControlInfo {
             params.put("f_dir", Integer.toString(fanMovement.getValue()));
         }
         params.put("stemp", temp.orElse(20.0).toString());
-        params.put("shum", targetHumidity.map(value -> value.toString()).orElse(""));
+        params.put("shum", Objects.requireNonNull(targetHumidity.map(value -> value.toString()).orElse("")));
 
         return params;
     }
index 486e8683f15411b9c79411232e40a1984fd315e8..361e0b56538c9b26aea7f422552578f971a2c116 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.daikin.internal.api.airbase;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.daikin.internal.api.InfoParser;
@@ -44,9 +43,9 @@ public class AirbaseBasicInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         AirbaseBasicInfo info = new AirbaseBasicInfo();
-        info.mac = Optional.ofNullable(responseMap.get("mac")).orElse("");
-        info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
-        info.ssid = Optional.ofNullable(responseMap.get("ssid")).orElse("");
+        info.mac = responseMap.getOrDefault("mac", "");
+        info.ret = responseMap.getOrDefault("ret", "");
+        info.ssid = responseMap.getOrDefault("ssid", "");
         return info;
     }
 
index 01f2b6ec03b52cbe64684ad5635b648faf8ed990..aece069cb6aaa2b2113f58abb0b0cf83165ca61f 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.daikin.internal.api.airbase;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -54,18 +55,20 @@ public class AirbaseControlInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         AirbaseControlInfo info = new AirbaseControlInfo();
-        info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
+        info.ret = responseMap.getOrDefault("ret", "");
         info.power = "1".equals(responseMap.get("pow"));
-        info.mode = Optional.ofNullable(responseMap.get("mode")).flatMap(value -> InfoParser.parseInt(value))
-                .map(value -> AirbaseMode.fromValue(value)).orElse(AirbaseMode.AUTO);
+        info.mode = Objects.requireNonNull(
+                Optional.ofNullable(responseMap.get("mode")).flatMap(value -> InfoParser.parseInt(value))
+                        .map(value -> AirbaseMode.fromValue(value)).orElse(AirbaseMode.AUTO));
         info.temp = Optional.ofNullable(responseMap.get("stemp")).flatMap(value -> InfoParser.parseDouble(value));
         int fRate = Optional.ofNullable(responseMap.get("f_rate")).flatMap(value -> InfoParser.parseInt(value))
                 .orElse(1);
         boolean fAuto = "1".equals(responseMap.getOrDefault("f_auto", "0"));
         boolean fAirside = "1".equals(responseMap.getOrDefault("f_airside", "0"));
         info.fanSpeed = AirbaseFanSpeed.fromValue(fRate, fAuto, fAirside);
-        info.fanMovement = Optional.ofNullable(responseMap.get("f_dir")).flatMap(value -> InfoParser.parseInt(value))
-                .map(value -> AirbaseFanMovement.fromValue(value)).orElse(AirbaseFanMovement.STOPPED);
+        info.fanMovement = Objects.requireNonNull(
+                Optional.ofNullable(responseMap.get("f_dir")).flatMap(value -> InfoParser.parseInt(value))
+                        .map(value -> AirbaseFanMovement.fromValue(value)).orElse(AirbaseFanMovement.STOPPED));
         info.targetHumidity = Optional.ofNullable(responseMap.get("shum")).flatMap(value -> InfoParser.parseInt(value));
         return info;
     }
@@ -79,7 +82,7 @@ public class AirbaseControlInfo {
         params.put("f_airside", fanSpeed.getAirside() ? "1" : "0");
         params.put("f_dir", Integer.toString(fanMovement.getValue()));
         params.put("stemp", temp.orElse(20.0).toString());
-        params.put("shum", targetHumidity.map(value -> value.toString()).orElse(""));
+        params.put("shum", Objects.requireNonNull(targetHumidity.map(value -> value.toString()).orElse("")));
 
         return params;
     }
index 4fb618a6e590504e79c34d8bd4395148719c0ab3..615fa0913dd0f5cf454776c8cc95986bb39645c4 100644 (file)
@@ -48,7 +48,7 @@ public class AirbaseModelInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         AirbaseModelInfo info = new AirbaseModelInfo();
-        info.ret = Optional.ofNullable(responseMap.get("ret")).orElse("");
+        info.ret = responseMap.getOrDefault("ret", "");
         info.zonespresent = Optional.ofNullable(responseMap.get("en_zone")).flatMap(value -> InfoParser.parseInt(value))
                 .orElse(0);
         info.commonzone = Optional.ofNullable(responseMap.get("en_common_zone"))
index de3b1199861ddcfa53e8e6c894dec6e1a35d10d8..d713db6c1ff695a8f2413539e0c05e4b8bbe5d72 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.daikin.internal.api.airbase;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -46,8 +45,8 @@ public class AirbaseZoneInfo {
         Map<String, String> responseMap = InfoParser.parse(response);
 
         AirbaseZoneInfo info = new AirbaseZoneInfo();
-        info.zonenames = Optional.ofNullable(responseMap.get("zone_name")).orElse("");
-        String zoneinfo = Optional.ofNullable(responseMap.get("zone_onoff")).orElse("");
+        info.zonenames = responseMap.getOrDefault("zone_name", "");
+        String zoneinfo = responseMap.getOrDefault("zone_onoff", "");
 
         String[] zones = zoneinfo.split(";");
 
index 1a2417f4e3c5553135bf880681f2b51b4cfe9f95..cb37507296252ab358438cfdda8a1000298a3f8d 100644 (file)
@@ -20,7 +20,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ScheduledFuture;
@@ -133,8 +132,8 @@ public class DaikinACUnitDiscoveryService extends AbstractDiscoveryService {
 
             Map<String, String> parsedData = InfoParser.parse(data);
             Boolean secure = "1".equals(parsedData.get("en_secure"));
-            String thingId = Optional.ofNullable(parsedData.get("ssid")).orElse(host.replace(".", "_"));
-            String mac = Optional.ofNullable(parsedData.get("mac")).orElse("");
+            String thingId = parsedData.getOrDefault("ssid", host.replace(".", "_"));
+            String mac = parsedData.getOrDefault("mac", "");
             String uuid = mac.isEmpty() ? UUID.randomUUID().toString()
                     : UUID.nameUUIDFromBytes(mac.getBytes()).toString();
 
index 511de601968ce12698db4edbbdaae3c5b1dd618e..21bab3dda4a278401c1e19506d6ff445de56e042 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.daikin.internal.handler;
 
 import java.math.BigDecimal;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.IntStream;
 
@@ -273,9 +274,9 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
     protected void updateEnergyYearChannel(String channel, Optional<Integer[]> maybePower) {
         IntStream.range(1, 13).forEach(i -> updateState(
                 String.format(DaikinBindingConstants.CHANNEL_ENERGY_STRING_FORMAT, channel, i),
-                maybePower.<State> map(
+                Objects.requireNonNull(maybePower.<State> map(
                         t -> new QuantityType<>(BigDecimal.valueOf(t[i - 1].longValue(), 1), Units.KILOWATT_HOUR))
-                        .orElse(UnDefType.UNDEF))
+                        .orElse(UnDefType.UNDEF)))
 
         );
     }
@@ -288,8 +289,9 @@ public class DaikinAcUnitHandler extends DaikinBaseHandler {
     protected void updateEnergyDayAndWeekChannel(String channel, Optional<Double> maybePower) {
         if (maybePower.isPresent()) {
             updateState(channel,
-                    maybePower.<State> map(t -> new QuantityType<>(new DecimalType(t), Units.KILOWATT_HOUR))
-                            .orElse(UnDefType.UNDEF));
+                    Objects.requireNonNull(
+                            maybePower.<State> map(t -> new QuantityType<>(new DecimalType(t), Units.KILOWATT_HOUR))
+                                    .orElse(UnDefType.UNDEF)));
         }
     }
 
index 80339cc9106391704a0be5db9f96ffc644e693ef..a427459337e3575dc4450f2af49f74f3809a17f6 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.openhab.binding.daikin.internal.handler;
 
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
@@ -205,8 +206,8 @@ public abstract class DaikinBaseHandler extends BaseThingHandler {
     }
 
     protected void updateTemperatureChannel(String channel, Optional<Double> maybeTemperature) {
-        updateState(channel,
-                maybeTemperature.<State> map(t -> new QuantityType<>(t, SIUnits.CELSIUS)).orElse(UnDefType.UNDEF));
+        updateState(channel, Objects.requireNonNull(
+                maybeTemperature.<State> map(t -> new QuantityType<>(t, SIUnits.CELSIUS)).orElse(UnDefType.UNDEF)));
     }
 
     /**
index 1bf21cf3df435bbc77d5a6a3efe7d2abdad2c126..532e6336088567b43b2984b6268a92a557187f7c 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.digiplex.internal.communication;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.core.library.types.OpenClosedType;
@@ -44,8 +45,8 @@ public enum AreaStatus {
     }
 
     public static AreaStatus fromMessage(char indicator) {
-        return Arrays.stream(AreaStatus.values()).filter(type -> type.indicator == indicator).findFirst()
-                .orElse(UNKNOWN);
+        return Objects.requireNonNull(Arrays.stream(AreaStatus.values()).filter(type -> type.indicator == indicator)
+                .findFirst().orElse(UNKNOWN));
     }
 
     public StringType toStringType() {
index 511f93da01cdd0c323a50d7146cc46735af74449..0c987d0ed1b4243faef54721f10adc5121224b0f 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.digiplex.internal.communication;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -37,7 +38,7 @@ public enum ArmDisarmType {
     }
 
     public static ArmDisarmType fromMessage(String indicator) {
-        return Arrays.stream(ArmDisarmType.values()).filter(type -> type.indicator.equals(indicator)).findFirst()
-                .orElse(UNKNOWN);
+        return Objects.requireNonNull(Arrays.stream(ArmDisarmType.values())
+                .filter(type -> type.indicator.equals(indicator)).findFirst().orElse(UNKNOWN));
     }
 }
index b6cbcabbe7436c9773cc03f9b067d42e9ab73008..9ba23bbe2a7f3d38ed0de233640ee500e291184c 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.digiplex.internal.communication;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -41,6 +42,7 @@ public enum ArmType {
     }
 
     public static ArmType fromMessage(char indicator) {
-        return Arrays.stream(values()).filter(type -> type.indicator == indicator).findFirst().orElse(UNKNOWN);
+        return Objects.requireNonNull(
+                Arrays.stream(values()).filter(type -> type.indicator == indicator).findFirst().orElse(UNKNOWN));
     }
 }
index cd264745beb60c802a7ba8e5a5ba8d3cb022e6c4..be56b56f3618752ef7165cb4336eea4ad5f95d83 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.digiplex.internal.communication;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.core.library.types.OpenClosedType;
@@ -42,7 +43,7 @@ public enum ZoneStatus {
     }
 
     public static ZoneStatus fromMessage(char indicator) {
-        return Arrays.stream(ZoneStatus.values()).filter(type -> type.indicator == indicator).findFirst()
-                .orElse(UNKNOWN);
+        return Objects.requireNonNull(Arrays.stream(ZoneStatus.values()).filter(type -> type.indicator == indicator)
+                .findFirst().orElse(UNKNOWN));
     }
 }
index 3280b633562811d955a508c4cf23a71ea98ee11d..a7d0a1d082567e12d154de1577ff645813c19032 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.digiplex.internal.communication.events;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -39,6 +40,7 @@ public enum SpecialAlarmType {
     }
 
     public static SpecialAlarmType fromMessage(int indicator) {
-        return Arrays.stream(values()).filter(type -> type.indicator == indicator).findFirst().orElse(UNKNOWN);
+        return Objects.requireNonNull(
+                Arrays.stream(values()).filter(type -> type.indicator == indicator).findFirst().orElse(UNKNOWN));
     }
 }
index 9939ba53faf63780cbea2569ae2bedc0c2e1def1..ff96c7e385e9a86b1b604ab217c6f531cbcc4ef7 100644 (file)
@@ -12,7 +12,7 @@
  */
 package org.openhab.binding.dsmr.internal.device;
 
-import java.util.Optional;
+import java.util.Objects;
 import java.util.concurrent.Semaphore;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -88,7 +88,7 @@ public class DSMRDeviceRunnable implements Runnable {
         } catch (final RuntimeException e) {
             logger.warn("DSMRDeviceRunnable stopped with a RuntimeException", e);
             portEventListener.onError(DSMRErrorStatus.SERIAL_DATA_READ_ERROR,
-                    Optional.ofNullable(e.getMessage()).orElse(""));
+                    Objects.requireNonNullElse(e.getMessage(), ""));
         } catch (final InterruptedException e) {
             Thread.currentThread().interrupt();
         } finally {
index b232ce79fd63169430441be8c5c9016d7f08694e..4e29f4893a749a0c9ed0694d7f7ebb3b019617bc 100644 (file)
@@ -17,7 +17,7 @@ import java.security.InvalidAlgorithmParameterException;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Arrays;
-import java.util.Optional;
+import java.util.Objects;
 
 import javax.crypto.BadPaddingException;
 import javax.crypto.Cipher;
@@ -227,7 +227,7 @@ public class SmartyDecrypter implements TelegramParser {
                 logger.warn("Exception of failed decryption of telegram: ", e);
             }
             telegramListener.onError(DSMRErrorStatus.INVALID_DECRYPTION_KEY,
-                    Optional.ofNullable(e.getMessage()).orElse(""));
+                    Objects.requireNonNullElse(e.getMessage(), ""));
         }
         return null;
     }
index d2e0165d2fc287e11e21a316ef4264a1ea9218b4..aede43f06a418299c69c949bae1f09bcbfe56cf8 100644 (file)
@@ -15,7 +15,7 @@ package org.openhab.binding.dsmr.internal.device.connector;
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Optional;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -125,7 +125,7 @@ class DSMRBaseConnector {
             }
         } catch (final IOException e) {
             dsmrConnectorListener.handleError(DSMRErrorStatus.SERIAL_DATA_READ_ERROR,
-                    Optional.ofNullable(e.getMessage()).orElse(""));
+                    Objects.requireNonNullElse(e.getMessage(), ""));
             logger.debug("Exception on read data", e);
         }
     }
index 6de5568f9e4e57ce40e401b1bdeab2cfa6055381..550325e00ca2c58814b611a9d43de1165c6833a6 100644 (file)
@@ -14,7 +14,7 @@ package org.openhab.binding.dsmr.internal.device.connector;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.TooManyListenersException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -245,7 +245,7 @@ public class DSMRSerialConnector extends DSMRBaseConnector implements SerialPort
                             "Port does {} not support requested port settings (invalid dsmr:portsettings parameter?): {}",
                             serialPortName, portSettings);
                     dsmrConnectorListener.handleError(DSMRErrorStatus.PORT_NOT_COMPATIBLE,
-                            Optional.ofNullable(e.getMessage()).orElse(""));
+                            Objects.requireNonNullElse(e.getMessage(), ""));
                 }
             } else {
                 restart(portSettings);
index d80a3d08119aee2e5e2cddae58dd8126f5ec5da7..8bddaffd5422cafdc9a8ba7d5a8fe825210e7036 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.dwdpollenflug.internal.handler;
 
 import java.net.SocketTimeoutException;
 import java.net.URI;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
@@ -153,7 +154,7 @@ public class DWDPollenflugBridgeHandler extends BaseBridgeHandler {
                         f.completeExceptionally(new DWDPollingException("Request failed", e));
                     }
                 } else if (response.getStatus() != 200) {
-                    f.completeExceptionally(new DWDPollingException(getContentAsString()));
+                    f.completeExceptionally(new DWDPollingException(Objects.requireNonNull(getContentAsString())));
                 } else {
                     try {
                         DWDPollenflug pollenflugJSON = gson.fromJson(getContentAsString(), DWDPollenflug.class);
index 446a76003e9323730e6ccb7e2ced0af941c5a460..dcd321d5c8e1592121edd1795f5ff65c757677bf 100644 (file)
@@ -125,7 +125,7 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
      * Log request success
      */
     @Override
-    public final void onSuccess(@Nullable Response response) {
+    public final void onSuccess(Response response) {
         super.onSuccess(response);
         if (response != null) {
             communicationStatus.setHttpCode(HttpStatus.getCode(response.getStatus()));
@@ -138,7 +138,9 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
      */
     @Override
     public final void onFailure(@Nullable Response response, @Nullable Throwable failure) {
-        super.onFailure(response, failure);
+        if (response != null && failure != null) {
+            super.onFailure(response, failure);
+        }
         if (failure != null) {
             logger.info("Request failed: {}", failure.toString());
             communicationStatus.setError((Exception) failure);
@@ -161,7 +163,7 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
      * just for logging of content
      */
     @Override
-    public void onContent(@Nullable Response response, @Nullable ByteBuffer content) {
+    public void onContent(Response response, ByteBuffer content) {
         super.onContent(response, content);
         logger.debug("received content, length: {}", getContentAsString().length());
     }
index 16adbcf9547f0584a0546c1987c11dcc9c1be469..e88db5bd918fe3c3937a0004adf7c10cb5aabdbd 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.binding.ecovacs.internal.api.commands;
 
+import java.util.Objects;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.ecovacs.internal.api.impl.ProtocolVersion;
 import org.openhab.binding.ecovacs.internal.api.impl.dto.response.deviceapi.json.CachedMapInfoReport;
@@ -42,7 +44,8 @@ public class GetActiveMapIdCommand extends IotDeviceCommand<String> {
             throws DataParsingException {
         if (response instanceof PortalIotCommandJsonResponse jsonResponse) {
             CachedMapInfoReport resp = jsonResponse.getResponsePayloadAs(gson, CachedMapInfoReport.class);
-            return resp.mapInfos.stream().filter(i -> i.used != 0).map(i -> i.mapId).findFirst().orElse("");
+            return Objects.requireNonNull(
+                    resp.mapInfos.stream().filter(i -> i.used != 0).map(i -> i.mapId).findFirst().orElse(""));
         } else {
             String payload = ((PortalIotCommandXmlResponse) response).getResponsePayloadXml();
             return XPathUtils.getFirstXPathMatch(payload, "//@i").getNodeValue();
index 0a24b2eaa58a56d79cca24a96c85532f70a27e4f..ea4b782091c96c8db28ecbca3cd7f91596a077df 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -320,7 +321,7 @@ public class EcovacsVacuumHandler extends BaseThingHandler implements EcovacsDev
             }
             return new StringType(def);
         });
-        updateState(CHANNEL_ID_CLEANING_SPOT_DEFINITION, areaDefState.orElse(UnDefType.UNDEF));
+        updateState(CHANNEL_ID_CLEANING_SPOT_DEFINITION, Objects.requireNonNull(areaDefState.orElse(UnDefType.UNDEF)));
         if (newMode == CleanMode.RETURNING) {
             scheduleNextPoll(30);
         } else if (newMode.isIdle()) {
@@ -597,7 +598,7 @@ public class EcovacsVacuumHandler extends BaseThingHandler implements EcovacsDev
                             lastDownloadedCleanMapUrl = record.mapImageUrl;
                             return new RawType(bytes, "image/png");
                         });
-                        updateState(CHANNEL_ID_LAST_CLEAN_MAP, content.orElse(UnDefType.NULL));
+                        updateState(CHANNEL_ID_LAST_CLEAN_MAP, Objects.requireNonNull(content.orElse(UnDefType.NULL)));
                     }
                 }
             }
@@ -713,7 +714,7 @@ public class EcovacsVacuumHandler extends BaseThingHandler implements EcovacsDev
 
     private State stringToState(@Nullable String value) {
         Optional<State> stateOpt = Optional.ofNullable(value).map(v -> StringType.valueOf(v));
-        return stateOpt.orElse(UnDefType.UNDEF);
+        return Objects.requireNonNull(stateOpt.orElse(UnDefType.UNDEF));
     }
 
     private @Nullable AbstractNoResponseCommand determineDeviceCommand(EcovacsDevice device, String command) {
index 599038e120ee6070cf5bc49bac10d7797430b050..cc9b3cbe369b1204a545d744d8a3602fb1d1158f 100644 (file)
@@ -18,7 +18,7 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -85,7 +85,7 @@ public class EkeyHandler extends BaseThingHandler implements EkeyPacketListener
                 String readerThreadName = "OH-binding-" + getThing().getUID().getAsString();
 
                 EkeyUdpPacketReceiver localReceiver = receiver = new EkeyUdpPacketReceiver(
-                        Optional.ofNullable(config.natIp).orElse(config.ipAddress), config.port, readerThreadName);
+                        Objects.requireNonNullElse(config.natIp, config.ipAddress), config.port, readerThreadName);
                 localReceiver.addEkeyPacketListener(this);
                 try {
                     localReceiver.openConnection();
index 087075db9c57aa9afbd2a808bfd796ae60e5134a..709779ce188a57d166a54632848e77c317f8000c 100644 (file)
@@ -17,6 +17,7 @@ import java.io.StringReader;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -297,8 +298,8 @@ public class Enigma2Client {
     }
 
     private String getString(Document document, String elementId) {
-        return Optional.ofNullable(document.getElementsByTagName(elementId)).map(nodeList -> nodeList.item(0))
-                .map(Node::getTextContent).map(String::trim).orElse("");
+        return Objects.requireNonNull(Optional.ofNullable(document.getElementsByTagName(elementId))
+                .map(nodeList -> nodeList.item(0)).map(Node::getTextContent).map(String::trim).orElse(""));
     }
 
     private boolean getBoolean(Document document, String elementId) {
index c13a6de02530e32a6636c7b04e9236ceba467225..aed7ec3d2b1e5adbd0aabce23b2ff59d610ebf9b 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.openhab.binding.enocean.internal.messages;
 
+import java.util.Objects;
 import java.util.stream.Stream;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -50,7 +51,8 @@ public class EventMessage extends BasePacket {
         }
 
         public static EventMessageType getEventMessageType(byte value) {
-            return Stream.of(EventMessageType.values()).filter(t -> t.value == value).findFirst().orElse(UNKNOWN);
+            return Objects.requireNonNull(
+                    Stream.of(EventMessageType.values()).filter(t -> t.value == value).findFirst().orElse(UNKNOWN));
         }
     }
 
index 12d97a3baf063a948080ac66880a7cc7dbfb20e7..6de3d6911fcfbd70b7e29ee0273ed9e8cdfd741d 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -372,8 +373,8 @@ public enum Measurand {
             if (customizationType == null) {
                 return measureType;
             }
-            return Optional.ofNullable(customizations).map(m -> m.get(customizationType))
-                    .map(ParserCustomization::getMeasureType).orElse(measureType);
+            return Objects.requireNonNull(Optional.ofNullable(customizations).map(m -> m.get(customizationType))
+                    .map(ParserCustomization::getMeasureType).orElse(measureType));
         }
     }
 }
index 1150097826af2c94566302ea0ea33c72ca364df0..b80df6c02f64ec5187f3870ec7cb8b529b90770e 100644 (file)
@@ -45,7 +45,7 @@ public class AbstractWeatherHandlerTest {
         try {
             method = AbstractWeatherHandler.class.getDeclaredMethod("floorToEvenMinutes", long.class, int.class);
             method.setAccessible(true);
-            Object res = method.invoke(null, epochSeconds, roundMinutes);
+            Object res = method.invoke("", epochSeconds, roundMinutes);
             assertNotNull(res);
             return (long) res;
         } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
@@ -60,7 +60,7 @@ public class AbstractWeatherHandlerTest {
         try {
             method = AbstractWeatherHandler.class.getDeclaredMethod("ceilToEvenMinutes", long.class, int.class);
             method.setAccessible(true);
-            Object res = method.invoke(null, epochSeconds, roundMinutes);
+            Object res = method.invoke("", epochSeconds, roundMinutes);
             assertNotNull(res);
             return (long) res;
         } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
@@ -85,7 +85,7 @@ public class AbstractWeatherHandlerTest {
         try {
             method = AbstractWeatherHandler.class.getDeclaredMethod("lastValidIndex", Data.class);
             method.setAccessible(true);
-            Object res = method.invoke(null, data);
+            Object res = method.invoke("", data);
             assertNotNull(res);
             return (int) res;
         } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
index f3b9bff3a010a93ed24376419c9a7e1ec9cb620a..d8ba8698a71733d780009253fbffe3dfa7f9d670 100644 (file)
@@ -18,6 +18,7 @@ import java.time.ZonedDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.ws.rs.core.UriBuilder;
 
@@ -226,7 +227,7 @@ public class PlayerManager extends ListableRest<PlayerManager.Player, PlayerMana
     // The player API does not allow to directly request a given player like others api parts
     @Override
     public Player getDevice(int id) throws FreeboxException {
-        return getDevices().stream().filter(player -> player.id == id).findFirst().orElse(null);
+        return Objects.requireNonNull(getDevices().stream().filter(player -> player.id == id).findFirst().orElse(null));
     }
 
     public @Nullable Configuration getConfig(int id) throws FreeboxException {
index 6536a7944356e6720a3a8372143615dfc486f77d..6449ffb3e45599411105353a9a3b37310b7204ac 100644 (file)
@@ -17,6 +17,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -104,8 +105,9 @@ public class StatusFileInterpreter {
     }
 
     public String getElement(StatusEntry entry) {
-        return getRoot().map(root -> root.getElementsByTagName(entry.name().toLowerCase()).item(0).getTextContent())
-                .orElse("");
+        return Objects.requireNonNull(
+                getRoot().map(root -> root.getElementsByTagName(entry.name().toLowerCase()).item(0).getTextContent())
+                        .orElse(""));
     }
 
     private List<Node> getMatchingNodes(NodeList nodeList, String criteria) {
index f5fd2b16710df37f4111b0f97d63b9f9805de974..3eb56e9893afe6b337a860d8f261b3ca935b0112 100644 (file)
@@ -16,6 +16,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.Objects;
 import java.util.Properties;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -39,13 +40,12 @@ public class HaasSohnpelletstoveJSONCommunication {
     private HaasSohnpelletstoveConfiguration config;
 
     private Gson gson;
-    private @Nullable String xhspin;
+    private String xhspin = "";
     private @Nullable HaasSohnpelletstoveJsonDataDTO ovenData;
 
     public HaasSohnpelletstoveJSONCommunication() {
         gson = new Gson();
         ovenData = new HaasSohnpelletstoveJsonDataDTO();
-        xhspin = "";
         config = new HaasSohnpelletstoveConfiguration();
     }
 
@@ -160,7 +160,7 @@ public class HaasSohnpelletstoveJSONCommunication {
      */
     private Properties createHeader(@Nullable String postData) {
         Properties httpHeader = new Properties();
-        httpHeader.setProperty("Host", config.hostIP);
+        httpHeader.setProperty("Host", Objects.requireNonNull(config.hostIP));
         httpHeader.setProperty("Accept", "*/*");
         httpHeader.setProperty("Proxy-Connection", "keep-alive");
         httpHeader.setProperty("X-BACKEND-IP", "https://app.haassohn.com");
@@ -182,16 +182,16 @@ public class HaasSohnpelletstoveJSONCommunication {
      * Generate the valid encrypted string to communicate with the oven.
      *
      * @param ovenData
-     * @return
+     * @return XHSPIN or empty when it cannot be determined
      */
-    private @Nullable String getValidXHSPIN(@Nullable HaasSohnpelletstoveJsonDataDTO ovenData) {
+    private String getValidXHSPIN(@Nullable HaasSohnpelletstoveJsonDataDTO ovenData) {
         if (ovenData != null && config.hostPIN != null) {
             String nonce = ovenData.getNonce();
             String hostPIN = config.hostPIN;
             String ePin = MD5Utils.getMD5String(hostPIN);
             return MD5Utils.getMD5String(nonce + ePin);
         } else {
-            return null;
+            return "";
         }
     }
 
index ecda2ef4cc36c4c0d81200ca31ca192cb89341cb..a8c2dfd5daeb65d484648dc3e5467596fd08a5b4 100644 (file)
@@ -17,6 +17,7 @@ import java.net.URL;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -68,7 +69,8 @@ public class HeliosVentilationBindingConstants {
                 String channel = (String) keys.nextElement();
                 HeliosVentilationDataPoint dp;
                 try {
-                    dp = new HeliosVentilationDataPoint(channel, properties.getProperty(channel));
+                    dp = new HeliosVentilationDataPoint(channel,
+                            Objects.requireNonNull(properties.getProperty(channel)));
                     if (result.containsKey(dp.address())) {
                         result.get(dp.address()).append(dp);
                     } else {
index 982dfb537f382c5271f1cac45b22dfcf28b8238f..86b3b3c60d8b847f57c87bd9a1af61e595de965b 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.heos.internal.handler;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -42,7 +43,7 @@ public class HeosDynamicStateDescriptionProvider extends BaseDynamicStateDescrip
                 .filter(o -> input.equals(o.getLabel())).map(StateOption::getValue).findFirst();
 
         // if no match was found we assume that it already was a value and not a label
-        return optionalValueByLabel.orElse(input);
+        return Objects.requireNonNull(optionalValueByLabel.orElse(input));
     }
 
     public void setFavorites(ChannelUID channelUID, List<BrowseResult> favorites) {
index f66b05a85cdd096e4b73086a2f5613146ee9dca4..1a69b30c4d931f2a8793e358447936b2e8962783 100644 (file)
@@ -1233,8 +1233,8 @@ public class Clip2ThingHandler extends BaseThingHandler {
                 sceneContributorsCache.putAll(scenes.stream().collect(Collectors.toMap(s -> s.getId(), s -> s)));
                 sceneResourceEntries.putAll(scenes.stream().collect(Collectors.toMap(s -> s.getName(), s -> s)));
 
-                State state = scenes.stream().filter(s -> s.getSceneActive().orElse(false)).map(s -> s.getSceneState())
-                        .findAny().orElse(UnDefType.UNDEF);
+                State state = Objects.requireNonNull(scenes.stream().filter(s -> s.getSceneActive().orElse(false))
+                        .map(s -> s.getSceneState()).findAny().orElse(UnDefType.UNDEF));
 
                 // create scene channel if it is missing
                 if (getThing().getChannel(CHANNEL_2_SCENE) == null) {
index 79f4fb2f1d071da5960bebdfb27f06f508c2ddf7..87ef9245163e50d944233d1669091caee928f778 100644 (file)
@@ -15,7 +15,6 @@ package org.openhab.binding.knx.internal.client;
 import static org.openhab.binding.knx.internal.dpt.DPTUtil.NORMALIZED_DPT;
 
 import java.time.Duration;
-import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -273,19 +272,20 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
             return false;
         } catch (KNXIllegalArgumentException e) {
             logger.debug("Bridge {} cannot connect: {}", thingUID, e.getMessage());
-            disconnect(e, Optional.of(ThingStatusDetail.CONFIGURATION_ERROR));
+            disconnect(e, ThingStatusDetail.CONFIGURATION_ERROR);
             return false;
         }
     }
 
     private void disconnect(@Nullable Exception e) {
-        disconnect(e, Optional.empty());
+        disconnect(e, null);
     }
 
-    private synchronized void disconnect(@Nullable Exception e, Optional<ThingStatusDetail> detail) {
+    private synchronized void disconnect(@Nullable Exception e, @Nullable ThingStatusDetail detail) {
         releaseConnection();
         if (e != null) {
-            statusUpdateCallback.updateStatus(ThingStatus.OFFLINE, detail.orElse(ThingStatusDetail.COMMUNICATION_ERROR),
+            statusUpdateCallback.updateStatus(ThingStatus.OFFLINE,
+                    detail != null ? detail : ThingStatusDetail.COMMUNICATION_ERROR,
                     KNXTranslationProvider.I18N.getLocalizedException(e));
         } else {
             statusUpdateCallback.updateStatus(ThingStatus.OFFLINE);
index c99e9669ab3ae45b6e8fe6a71903115366158de0..2ff0f9ce14b64f65e12a55b91b4b556bb70645a9 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.lcn.internal;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -203,10 +204,10 @@ public class LcnModuleActions implements ThingActions {
                 localCount = 1;
             }
 
-            String filteredTonality = LcnBindingConstants.ALLOWED_BEEP_TONALITIES.stream() //
+            String filteredTonality = Objects.requireNonNull(LcnBindingConstants.ALLOWED_BEEP_TONALITIES.stream() //
                     .filter(t -> t.equals(tonality)) //
                     .findAny() //
-                    .orElse("N");
+                    .orElse("N"));
 
             getHandler().sendPck(PckGenerator.beep(filteredTonality, Math.min(localCount, MAX_BEEP_COUNT)));
         } catch (LcnException e) {
index e9161e498a6e97320e0e65b49b4d24844e11ff41..01d5f51d994855f3d09ff9c226233cbe1923c7c8 100644 (file)
@@ -14,7 +14,6 @@ package org.openhab.binding.lcn.internal.subhandler;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.IntStream;
@@ -72,16 +71,16 @@ public class LcnModuleThresholdSubHandler extends AbstractLcnModuleVariableSubHa
     @Override
     public void handleStatusMessage(Matcher matcher) {
         IntStream stream;
-        Optional<String> groupSuffix;
+        String groupSuffix;
         int registerNumber;
         if (matcher.pattern() == PATTERN) {
             int thresholdId = Integer.parseInt(matcher.group("thresholdId")) - 1;
             registerNumber = Integer.parseInt(matcher.group("registerId")) - 1;
             stream = IntStream.rangeClosed(thresholdId, thresholdId);
-            groupSuffix = Optional.of("");
+            groupSuffix = "";
         } else if (matcher.pattern() == PATTERN_BEFORE_2013) {
             stream = IntStream.range(0, LcnDefs.THRESHOLD_COUNT_BEFORE_2013);
-            groupSuffix = Optional.empty();
+            groupSuffix = null;
             registerNumber = 0;
         } else {
             logger.warn("Unexpected pattern: {}", matcher.pattern());
@@ -90,7 +89,7 @@ public class LcnModuleThresholdSubHandler extends AbstractLcnModuleVariableSubHa
 
         stream.forEach(i -> {
             try {
-                fireUpdateAndReset(matcher, groupSuffix.orElse(String.valueOf(i)),
+                fireUpdateAndReset(matcher, groupSuffix != null ? groupSuffix : String.valueOf(i),
                         Variable.thrsIdToVar(registerNumber, i));
             } catch (LcnException e) {
                 logger.warn("Parse error: {}", e.getMessage());
index 720875d3c3337995b69ec5c7262fc47894b1fe63..af3e3bab6d45babd0419d8c4bc6b9f8a53ec8b34 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.luxom.internal.protocol;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -55,8 +56,8 @@ public enum LuxomAction {
     }
 
     public static LuxomAction of(String command) {
-        return Arrays.stream(LuxomAction.values()).filter(a -> a.getCommand().equals(command)).findFirst()
-                .orElse(INVALID_ACTION);
+        return Objects.requireNonNull(Arrays.stream(LuxomAction.values()).filter(a -> a.getCommand().equals(command))
+                .findFirst().orElse(INVALID_ACTION));
     }
 
     public String getCommand() {
index cdab8fe213e00a6820fa68425387c100d49d2056..a60e70d1a935b25b356a5dcae7aa272992f6e6b8 100644 (file)
@@ -22,6 +22,7 @@ import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
@@ -215,7 +216,7 @@ public class MagentaTVOAuth {
                     TimeUnit.MILLISECONDS);
             for (Enumeration<?> e = headers.keys(); e.hasMoreElements();) {
                 String key = (String) e.nextElement();
-                String val = (String) headers.get(key);
+                String val = (String) headers.get(Objects.requireNonNull(key));
                 request.header(key, val);
             }
             if (method.equals(HttpMethod.POST)) {
index c6625b9644c06b3593a1de6ed5ed8036cfae6ad7..6fe77041d7c1ada5c332b6f38a466028bdbdb01d 100644 (file)
@@ -13,7 +13,7 @@
 package org.openhab.binding.mielecloud.internal.config.servlet;
 
 import java.io.IOException;
-import java.util.Optional;
+import java.util.Objects;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -68,9 +68,9 @@ public final class PairAccountServlet extends AbstractShowPageServlet {
     }
 
     private String renderClientIdAndClientSecret(HttpServletRequest request, String skeleton) {
-        String prefilledClientId = Optional.ofNullable(request.getParameter(CLIENT_ID_PARAMETER_NAME)).orElse("");
-        String prefilledClientSecret = Optional.ofNullable(request.getParameter(CLIENT_SECRET_PARAMETER_NAME))
-                .orElse("");
+        String prefilledClientId = Objects.requireNonNullElse(request.getParameter(CLIENT_ID_PARAMETER_NAME), "");
+        String prefilledClientSecret = Objects.requireNonNullElse(request.getParameter(CLIENT_SECRET_PARAMETER_NAME),
+                "");
         return skeleton.replace(CLIENT_ID_PLACEHOLDER, prefilledClientId).replace(CLIENT_SECRET_PLACEHOLDER,
                 prefilledClientSecret);
     }
index 2ebb634b71764a3a79e4f57d4bc23dc75f9badb6..918fc097156b11ff99fa23d9fa63da563cd9de33 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.mielecloud.internal.config.servlet;
 
 import java.io.IOException;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -148,7 +149,7 @@ public class SuccessServlet extends AbstractShowPageServlet {
 
     private String renderBridgeConfigurationTemplate(String skeleton, ThingUID bridgeUid, String email) {
         String bridgeTemplate = templateGenerator.createBridgeConfigurationTemplate(bridgeUid.getId(), email,
-                languageProvider.getLanguage().orElse("en"));
+                Objects.requireNonNull(languageProvider.getLanguage().orElse("en")));
         return skeleton.replace(THINGS_TEMPLATE_CODE_PLACEHOLDER, bridgeTemplate);
     }
 
index d95927023c1aaa64b7367ef196f3dcc3be272e5e..8ea01c9d5f0da236d55c33a652f0a7ee9d1d307c 100644 (file)
@@ -16,6 +16,7 @@ import static org.openhab.binding.mielecloud.internal.MieleCloudBindingConstants
 import static org.openhab.binding.mielecloud.internal.handler.MieleHandlerFactory.SUPPORTED_THING_TYPES;
 
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -189,7 +190,8 @@ public class ThingDiscoveryService extends AbstractThingHandlerDiscoveryService<
             return deviceName.get();
         }
 
-        return ThingInformationExtractor.getDeviceAndTechType(deviceState).orElse("Miele Device");
+        return Objects
+                .requireNonNull(ThingInformationExtractor.getDeviceAndTechType(deviceState).orElse("Miele Device"));
     }
 
     @Override
index 7ea32c6f88ec6eeef1d671188adb60d38063f231..dcc80783a1a2166f9fb26880f21aa9ec87b46d96 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.mielecloud.internal.discovery;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -58,11 +59,11 @@ public final class ThingInformationExtractor {
     }
 
     private static String getSerialNumber(DeviceState deviceState) {
-        return deviceState.getFabNumber().orElse(deviceState.getDeviceIdentifier());
+        return Objects.requireNonNull(deviceState.getFabNumber().orElse(deviceState.getDeviceIdentifier()));
     }
 
     private static String getModelId(DeviceState deviceState) {
-        return getDeviceAndTechType(deviceState).orElse("Unknown");
+        return Objects.requireNonNull(getDeviceAndTechType(deviceState).orElse("Unknown"));
     }
 
     /**
index 262f6dae969e5254233a2bcb60a6d481dc46c8e5..bea911d2ed1af212949919d8e8686091e0196c56 100644 (file)
@@ -17,6 +17,7 @@ import static org.openhab.binding.mielecloud.internal.webservice.api.PowerStatus
 import static org.openhab.binding.mielecloud.internal.webservice.api.ProgramStatus.*;
 import static org.openhab.binding.mielecloud.internal.webservice.api.json.ProcessAction.*;
 
+import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Consumer;
 
@@ -88,8 +89,8 @@ public abstract class AbstractMieleThingHandler extends BaseThingHandler {
     }
 
     protected MieleWebservice getWebservice() {
-        return getMieleBridgeHandler().map(MieleBridgeHandler::getWebservice)
-                .orElse(UnavailableMieleWebservice.INSTANCE);
+        return Objects.requireNonNull(getMieleBridgeHandler().map(MieleBridgeHandler::getWebservice)
+                .orElse(UnavailableMieleWebservice.INSTANCE));
     }
 
     @Override
index c704be8c9c583481485906fd43176033403600b6..d9bfe1f4959107c7bc3745a6723c04c834b9d498 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.mielecloud.internal.handler.channel;
 import java.math.BigDecimal;
 import java.text.NumberFormat;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -46,29 +47,31 @@ public final class ChannelTypeUtil {
      * Converts an {@link Optional} of {@link String} to {@link State}.
      */
     public static State stringToState(Optional<String> value) {
-        return value.filter(v -> !v.isEmpty()).filter(v -> !"null".equals(v)).map(v -> (State) new StringType(v))
-                .orElse(UnDefType.UNDEF);
+        return Objects.requireNonNull(value.filter(v -> !v.isEmpty()).filter(v -> !"null".equals(v))
+                .map(v -> (State) new StringType(v)).orElse(UnDefType.UNDEF));
     }
 
     /**
      * Converts an {@link Optional} of {@link Boolean} to {@link State}.
      */
     public static State booleanToState(Optional<Boolean> value) {
-        return value.map(v -> (State) OnOffType.from(v)).orElse(UnDefType.UNDEF);
+        return Objects.requireNonNull(value.map(v -> (State) OnOffType.from(v)).orElse(UnDefType.UNDEF));
     }
 
     /**
      * Converts an {@link Optional} of {@link Integer} to {@link State}.
      */
     public static State intToState(Optional<Integer> value) {
-        return value.map(v -> (State) new DecimalType(new BigDecimal(v))).orElse(UnDefType.UNDEF);
+        return Objects
+                .requireNonNull(value.map(v -> (State) new DecimalType(new BigDecimal(v))).orElse(UnDefType.UNDEF));
     }
 
     /**
      * Converts an {@link Optional} of {@link Long} to {@link State}.
      */
     public static State longToState(Optional<Long> value) {
-        return value.map(v -> (State) new DecimalType(new BigDecimal(v))).orElse(UnDefType.UNDEF);
+        return Objects
+                .requireNonNull(value.map(v -> (State) new DecimalType(new BigDecimal(v))).orElse(UnDefType.UNDEF));
     }
 
     /**
@@ -76,15 +79,16 @@ public final class ChannelTypeUtil {
      */
     public static State intToTemperatureState(Optional<Integer> value) {
         // The Miele 3rd Party API always provides temperatures in Â°C (even if the device uses another unit).
-        return value.map(v -> (State) new QuantityType<>(v, SIUnits.CELSIUS)).orElse(UnDefType.UNDEF);
+        return Objects
+                .requireNonNull(value.map(v -> (State) new QuantityType<>(v, SIUnits.CELSIUS)).orElse(UnDefType.UNDEF));
     }
 
     /**
      * Converts an {@link Optional} of {@link Quantity} to {@link State}.
      */
     public static State quantityToState(Optional<Quantity> value) {
-        return value.flatMap(ChannelTypeUtil::formatQuantity).flatMap(ChannelTypeUtil::parseQuantityType)
-                .orElse(UnDefType.UNDEF);
+        return Objects.requireNonNull(value.flatMap(ChannelTypeUtil::formatQuantity)
+                .flatMap(ChannelTypeUtil::parseQuantityType).orElse(UnDefType.UNDEF));
     }
 
     /**
index deff78be92a7ee7a0170cc7795bdbf248519fa38..9f89ebfdd6df2579fb250713e6f45d5b5ead6c73 100644 (file)
@@ -518,8 +518,8 @@ public class DeviceState {
      * @return The raw device type.
      */
     public DeviceType getRawType() {
-        return device.flatMap(Device::getIdent).flatMap(Ident::getType).map(Type::getValueRaw)
-                .orElse(DeviceType.UNKNOWN);
+        return Objects.requireNonNull(device.flatMap(Device::getIdent).flatMap(Ident::getType).map(Type::getValueRaw)
+                .orElse(DeviceType.UNKNOWN));
     }
 
     /**
index b32af3c885bafe08915d8f40d1c380facdecad5a..527b85446d9573bece096d8043bd0f86c7195ddf 100644 (file)
@@ -42,7 +42,7 @@ public class Type {
     }
 
     public DeviceType getValueRaw() {
-        return Optional.ofNullable(valueRaw).orElse(DeviceType.UNKNOWN);
+        return Objects.requireNonNullElse(valueRaw, DeviceType.UNKNOWN);
     }
 
     public Optional<String> getValueLocalized() {
index ff7e03e6969868fc31b08b013c09bab88bc4a30a..250cce13ad05adc5889d9d423722939282e4fa56 100644 (file)
@@ -112,7 +112,8 @@ public class SseConnectionTest {
         getSseConnection().addSseListener(getMockedSseListener());
         getSseConnection().connect();
 
-        getRegisteredHeadersListener().onHeaders(null);
+        Response response = mock(Response.class);
+        getRegisteredHeadersListener().onHeaders(response);
     }
 
     private Request getMockedRequest() {
@@ -206,7 +207,8 @@ public class SseConnectionTest {
         assertNotNull(headersListener);
 
         // when:
-        headersListener.onHeaders(null);
+        Response response = mock(Response.class);
+        headersListener.onHeaders(response);
 
         // then:
         verify(scheduler).schedule(ArgumentMatchers.<Runnable> any(), anyLong(), any());
@@ -266,7 +268,8 @@ public class SseConnectionTest {
         setUpRunningConnection();
 
         // when:
-        getRegisteredCompleteListener().onComplete(null);
+        Result result = mock(Result.class);
+        getRegisteredCompleteListener().onComplete(result);
 
         // then:
         verify(getMockedScheduler(), times(2)).schedule(ArgumentMatchers.<Runnable> any(), anyLong(), any());
@@ -505,7 +508,8 @@ public class SseConnectionTest {
 
         HeadersListener headersListener = registeredHeadersListener;
         assertNotNull(headersListener);
-        headersListener.onHeaders(null);
+        Response response = mock(Response.class);
+        headersListener.onHeaders(response);
 
         ServerSentEvent serverSentEvent = new ServerSentEvent("ping", "ping");
 
index e4f77652636f576d9e7c26b29256724c0447331c..f65167f134faf8911aeff84ab025971b62115529 100644 (file)
@@ -56,6 +56,7 @@ public class HeliosEasyControlsActions implements ThingActions {
 
     private void triggerSwitch(String variableName) {
         try {
+            HeliosEasyControlsHandler handler = this.handler;
             if (handler != null) {
                 handler.writeValue(variableName, "1");
             }
@@ -159,6 +160,7 @@ public class HeliosEasyControlsActions implements ThingActions {
 
     @RuleAction(label = "@text/action.getErrorMessages.label", description = "@text/action.getErrorMessages.description")
     public @ActionOutput(name = "errorMessages", type = "java.util.List<String>") List<String> getErrorMessages() {
+        HeliosEasyControlsHandler handler = this.handler;
         return (handler != null) ? handler.getErrorMessages() : new ArrayList<>();
     }
 
@@ -168,6 +170,7 @@ public class HeliosEasyControlsActions implements ThingActions {
 
     @RuleAction(label = "@text/action.getWarningMessages.label", description = "@text/action.getWarningMessages.description")
     public @ActionOutput(name = "warningMessages", type = "java.util.List<String>") List<String> getWarningMessages() {
+        HeliosEasyControlsHandler handler = this.handler;
         return (handler != null) ? handler.getWarningMessages() : new ArrayList<>();
     }
 
@@ -177,6 +180,7 @@ public class HeliosEasyControlsActions implements ThingActions {
 
     @RuleAction(label = "@text/action.getInfoMessages.label", description = "@text/action.getInfoMessages.description")
     public @ActionOutput(name = "infoMessages", type = "java.util.List<String>") List<String> getInfoMessages() {
+        HeliosEasyControlsHandler handler = this.handler;
         return (handler != null) ? handler.getInfoMessages() : new ArrayList<>();
     }
 
@@ -186,6 +190,7 @@ public class HeliosEasyControlsActions implements ThingActions {
 
     @RuleAction(label = "@text/action.getStatusMessages.label", description = "@text/action.getStatusMessages.description")
     public @ActionOutput(name = "statusMessages", type = "java.util.List<String>") List<String> getStatusMessages() {
+        HeliosEasyControlsHandler handler = this.handler;
         return (handler != null) ? handler.getStatusMessages() : new ArrayList<>();
     }
 
index 8a9061b4eed06800bee020e44f7b4d07056f6169..3b8dad53beca334fe2157db840cf17f23288fc86 100644 (file)
@@ -168,9 +168,10 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
         } catch (IOException e) {
             this.handleError("Error reading variable definition file", ThingStatusDetail.CONFIGURATION_ERROR);
         }
+        Map<String, HeliosVariable> variableMap = this.variableMap;
         if (variableMap != null) {
             // add the name to the variable itself
-            for (Map.Entry<String, HeliosVariable> entry : this.variableMap.entrySet()) {
+            for (Map.Entry<String, HeliosVariable> entry : variableMap.entrySet()) {
                 entry.getValue().setName(entry.getKey()); // workaround to set the variable name inside the
                                                           // HeliosVariable object
                 if (!entry.getValue().isOk()) {
@@ -225,7 +226,6 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
 
         ModbusEndpointThingHandler slaveEndpointThingHandler = getEndpointThingHandler();
         if (slaveEndpointThingHandler == null) {
-            @SuppressWarnings("null")
             String label = Optional.ofNullable(getBridge()).map(b -> b.getLabel()).orElse("<null>");
             updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE,
                     String.format("Bridge '%s' is offline", label));
@@ -236,7 +236,6 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
         comms = slaveEndpointThingHandler.getCommunicationInterface();
 
         if (comms == null) {
-            @SuppressWarnings("null")
             String label = Optional.ofNullable(getBridge()).map(b -> b.getLabel()).orElse("<null>");
             updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE,
                     String.format("Bridge '%s' not completely initialized", label));
@@ -250,8 +249,9 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
         this.config = getConfigAs(HeliosEasyControlsConfiguration.class);
         this.readVariableDefinition();
         this.connectEndpoint();
-        if ((this.comms != null) && (this.variableMap != null) && (this.config != null)) {
-            this.transactionLocks.putIfAbsent(this.comms.getEndpoint(), new Semaphore(1, true));
+        ModbusCommunicationInterface comms = this.comms;
+        if (comms != null && this.variableMap != null && this.config != null) {
+            this.transactionLocks.putIfAbsent(comms.getEndpoint(), new Semaphore(1, true));
             updateStatus(ThingStatus.UNKNOWN);
 
             // background initialization
@@ -264,6 +264,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
             HeliosEasyControlsConfiguration config = this.config;
             if (config != null) {
                 this.pollingJob = scheduler.scheduleWithFixedDelay(() -> {
+                    Map<String, HeliosVariable> variableMap = this.variableMap;
                     if (variableMap != null) {
                         for (Map.Entry<String, HeliosVariable> entry : variableMap.entrySet()) {
                             if (this.isProperty(entry.getKey()) || isLinked(entry.getValue().getGroupAndName())
@@ -293,8 +294,10 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
 
     @Override
     public void dispose() {
-        if (this.pollingJob != null) {
-            this.pollingJob.cancel(true);
+        ScheduledFuture<?> pollingJob = this.pollingJob;
+        if (pollingJob != null) {
+            pollingJob.cancel(true);
+            this.pollingJob = null;
         }
         this.comms = null;
     }
@@ -382,6 +385,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler {
                 scheduler.submit(() -> {
                     try {
                         writeValue(channelId, v);
+                        Map<String, HeliosVariable> variableMap = this.variableMap;
                         if (variableMap != null) {
                             HeliosVariable variable = variableMap.get(channelId);
                             if (variable != null) {
index 84beb827505fbcfd61dd55aa8af1d57d2bf3bea5..8dfe70377d5d2ecb71f8316e7d5432d9b08adc90 100644 (file)
@@ -39,7 +39,7 @@ public class PreparePayloadTest {
 
     private ModbusRegisterArray preparePayload(String payload) {
         try {
-            return (ModbusRegisterArray) preparePayloadMethod.invoke(null, payload);
+            return (ModbusRegisterArray) preparePayloadMethod.invoke("", payload);
         } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
             fail("Reflection failure:" + e.getMessage());
             throw new RuntimeException(); // to make compiler happy
index 10444493841baa6153b32f6dffb8cc92a3780762..6f39d970e77e98bedb3aa0235537aa20d8faf875 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.openhab.binding.modbus.stiebeleltron.internal.parser;
 
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -50,7 +51,7 @@ public class AbstractBaseParser {
      * @return the parsed value or the default if the field is not implemented
      */
     protected Double extractDouble(ModbusRegisterArray raw, int index, double def) {
-        return extractOptionalDouble(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalDouble(raw, index).orElse(def));
     }
 
     /**
@@ -74,7 +75,7 @@ public class AbstractBaseParser {
      * @return the parsed value or the default if the field is not implemented
      */
     protected Short extractInt16(ModbusRegisterArray raw, int index, short def) {
-        return extractOptionalInt16(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalInt16(raw, index).orElse(def));
     }
 
     /**
@@ -98,7 +99,7 @@ public class AbstractBaseParser {
      * @return the parsed value or the default if the field is not implemented
      */
     protected Integer extractUInt16(ModbusRegisterArray raw, int index, int def) {
-        return extractOptionalUInt16(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalUInt16(raw, index).orElse(def));
     }
 
     /**
@@ -122,6 +123,6 @@ public class AbstractBaseParser {
      * @return the parsed value or default if the field is not implemented
      */
     protected Long extractUnit32(ModbusRegisterArray raw, int index, long def) {
-        return extractOptionalUInt32(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalUInt32(raw, index).orElse(def));
     }
 }
index 0c61596a9ba31044b389dde18da76eaee3d62fbc..95ff876e16b858c36b4e225da3e1238cd959eabb 100644 (file)
@@ -16,6 +16,7 @@ import static org.openhab.binding.modbus.sunspec.internal.SunSpecConstants.*;
 import static org.openhab.core.library.unit.SIUnits.CELSIUS;
 import static org.openhab.core.library.unit.Units.*;
 
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -85,7 +86,7 @@ public class InverterHandler extends AbstractSunSpecHandler {
                 status == null ? UnDefType.UNDEF : new StringType(status.name()));
 
         updateState(channelUID(GROUP_DEVICE_INFO, CHANNEL_STATUS_VENDOR),
-                block.statusVendor.<State> map(DecimalType::new).orElse(UnDefType.UNDEF));
+                Objects.requireNonNull(block.statusVendor.<State> map(DecimalType::new).orElse(UnDefType.UNDEF)));
 
         // AC General group
         updateState(channelUID(GROUP_AC_GENERAL, CHANNEL_AC_TOTAL_CURRENT),
index effefdce2443ae24396fb7afe300fd85d918075c..c72138bd7cb7ce45d5eb1613b7a181d6c48157a1 100644 (file)
@@ -15,6 +15,8 @@ package org.openhab.binding.modbus.sunspec.internal.handler;
 import static org.openhab.binding.modbus.sunspec.internal.SunSpecConstants.*;
 import static org.openhab.core.library.unit.Units.*;
 
+import java.util.Objects;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.modbus.sunspec.internal.dto.MeterModelBlock;
 import org.openhab.binding.modbus.sunspec.internal.parser.MeterModelParser;
@@ -92,7 +94,7 @@ public class MeterHandler extends AbstractSunSpecHandler {
                 getScaled(block.acVoltageLineToLineAverage, block.acVoltageSF, VOLT));
 
         updateState(channelUID(GROUP_AC_GENERAL, CHANNEL_AC_FREQUENCY),
-                getScaled(block.acFrequency, block.acFrequencySF.orElse((short) 1), HERTZ));
+                getScaled(block.acFrequency, Objects.requireNonNull(block.acFrequencySF.orElse((short) 1)), HERTZ));
 
         updateState(channelUID(GROUP_AC_GENERAL, CHANNEL_AC_TOTAL_REAL_POWER),
                 getScaled(block.acRealPowerTotal, block.acRealPowerSF, WATT));
index e653d1f3cce9a450479e0cfc06c1763360b938a7..d7fd0e766367085efac8d8eb437bd3f3bc58d699 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.openhab.binding.modbus.sunspec.internal.parser;
 
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -50,7 +51,7 @@ public class AbstractBaseParser {
      * @return the parsed value or the default if the field is not implemented
      */
     protected Short extractInt16(ModbusRegisterArray raw, int index, short def) {
-        return extractOptionalInt16(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalInt16(raw, index).orElse(def));
     }
 
     /**
@@ -74,7 +75,7 @@ public class AbstractBaseParser {
      * @return the parsed value or the default if the field is not implemented
      */
     protected Integer extractUInt16(ModbusRegisterArray raw, int index, int def) {
-        return extractOptionalUInt16(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalUInt16(raw, index).orElse(def));
     }
 
     /**
@@ -98,7 +99,7 @@ public class AbstractBaseParser {
      * @return the parsed value or default if the field is not implemented
      */
     protected Long extractAcc32(ModbusRegisterArray raw, int index, long def) {
-        return extractOptionalAcc32(raw, index).orElse(def);
+        return Objects.requireNonNull(extractOptionalAcc32(raw, index).orElse(def));
     }
 
     /**
@@ -121,6 +122,6 @@ public class AbstractBaseParser {
      * @return the parsed value or 1 if the field is not implemented
      */
     protected Short extractSunSSF(ModbusRegisterArray raw, int index) {
-        return extractOptionalSunSSF(raw, index).orElse((short) 0);
+        return Objects.requireNonNull(extractOptionalSunSSF(raw, index).orElse((short) 0));
     }
 }
index 5ebe6e1ff9c8d0804a2fc7a02b69c4b71398baac..d413cfe43660beae5b2cf16690994d055bd85c60 100644 (file)
@@ -25,6 +25,7 @@ import java.lang.reflect.Method;
 import java.time.ZoneId;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -118,7 +119,8 @@ public class ChargingStatisticsTest {
             Method updateChargeStatisticsMethod = VehicleHandler.class.getDeclaredMethod("updateChargingStatistics",
                     ChargingStatisticsContainer.class, String.class);
             updateChargeStatisticsMethod.setAccessible(true);
-            updateChargeStatisticsMethod.invoke(vehicleHandler,
+            assertNotNull(vehicleHandler);
+            updateChargeStatisticsMethod.invoke(Objects.requireNonNull(vehicleHandler),
                     JsonStringDeserializer.getChargingStatistics(statusContent), null);
         } catch (Exception e) {
             logger.error("chargeStatistics could not be set", e);
index b92d8cde20766fc63e3c55c2d9dca641e2dffc51..5b1bc9c78be2e46a319a49b25ae9db9ee94d1646 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.openhab.binding.mycroft.internal.api;
 
+import java.util.Objects;
 import java.util.stream.Stream;
 
 import javax.validation.constraints.NotNull;
@@ -100,8 +101,8 @@ public enum MessageType {
 
     @NotNull
     public static MessageType fromString(String asString) {
-        return Stream.of(values()).filter(messageType -> messageType.messageTypeName.equals(asString)).findFirst()
-                .orElse(any);
+        return Objects.requireNonNull(Stream.of(values())
+                .filter(messageType -> messageType.messageTypeName.equals(asString)).findFirst().orElse(any));
     }
 
     public String getMessageTypeName() {
index b1f4cbadf037b369710c982f82aa65d4cda30513..d2f4c3a8b358c4e350571a482876381588d04d2f 100644 (file)
@@ -18,7 +18,7 @@ import static org.openhab.binding.netatmo.internal.api.data.NetatmoConstants.*;
 import java.net.URI;
 import java.util.EnumSet;
 import java.util.List;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -170,7 +170,7 @@ public enum ModuleType {
 
     public static final EnumSet<ModuleType> AS_SET = EnumSet.allOf(ModuleType.class);
 
-    private final Optional<ModuleType> bridgeType;
+    private final @Nullable ModuleType bridgeType;
     public final Set<ChannelGroup> channelGroups;
     public final Set<Class<? extends Capability>> capabilities;
     public final ThingTypeUID thingTypeUID;
@@ -181,7 +181,7 @@ public enum ModuleType {
 
     ModuleType(FeatureArea feature, String apiName, int thingTypeVersion, String config, @Nullable ModuleType bridge,
             Set<Class<? extends Capability>> capabilities, ChannelGroup... channelGroups) {
-        this.bridgeType = Optional.ofNullable(bridge);
+        this.bridgeType = bridge;
         this.feature = feature;
         this.capabilities = capabilities;
         this.apiName = apiName;
@@ -219,7 +219,7 @@ public enum ModuleType {
     }
 
     public ModuleType getBridge() {
-        return bridgeType.orElse(UNKNOWN);
+        return Objects.requireNonNullElse(this.bridgeType, UNKNOWN);
     }
 
     public int getDepth() {
index c327e759c56a1754e168496dda1ff7cde3b1caf9..04c0b462b31cf49b27f646c313033004032b8329 100644 (file)
@@ -67,8 +67,8 @@ public class NAThing extends NAObject implements NAModule {
         return radioStatus;
     }
 
-    public Optional<ZonedDateTime> getLastSeen() {
-        return Optional.ofNullable(lastSeen);
+    public @Nullable ZonedDateTime getLastSeen() {
+        return lastSeen;
     }
 
     /**
index c4c5a8fd4a44ef349162778861bb90498efca5b2..14157500983f1f31bf806ee259611aad9cc41a8a 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.netatmo.internal.deserialization;
 
 import java.lang.reflect.Type;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -62,8 +63,8 @@ class NAPushTypeDeserializer implements JsonDeserializer<NAPushType> {
      * @return moduletype value if found, or else Unknown
      */
     public static ModuleType fromNetatmoObject(String apiName) {
-        return ModuleType.AS_SET.stream().filter(mt -> apiName.equals(mt.apiName)).findFirst()
-                .orElse(ModuleType.UNKNOWN);
+        return Objects.requireNonNull(ModuleType.AS_SET.stream().filter(mt -> apiName.equals(mt.apiName)).findFirst()
+                .orElse(ModuleType.UNKNOWN));
     }
 
     /**
@@ -71,7 +72,7 @@ class NAPushTypeDeserializer implements JsonDeserializer<NAPushType> {
      * @return eventType value if found, or else Unknown
      */
     public static EventType fromEvent(String apiName) {
-        return EventType.AS_SET.stream().filter(et -> apiName.equalsIgnoreCase(et.name())).findFirst()
-                .orElse(EventType.UNKNOWN);
+        return Objects.requireNonNull(EventType.AS_SET.stream().filter(et -> apiName.equalsIgnoreCase(et.name()))
+                .findFirst().orElse(EventType.UNKNOWN));
     }
 }
index 51beb8de5ccd8fb8e4464f83ec61848186e68baa..aac0f4b00413312785cb3fa92b323f06fb29041f 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.netatmo.internal.handler;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
@@ -169,8 +170,8 @@ public interface CommonInterface {
     }
 
     default <T extends RestCapability<?>> Optional<T> getHomeCapability(Class<T> clazz) {
-        return recurseUpToHomeHandler(this).map(handler -> handler.getCapabilities().get(clazz))
-                .orElse(Optional.empty());
+        return Objects.requireNonNull(recurseUpToHomeHandler(this).map(handler -> handler.getCapabilities().get(clazz))
+                .orElse(Optional.empty()));
     }
 
     default void setNewData(NAObject newData) {
index 8e7c3a922bb86c6b099ee11999c5de63dd6f970b..44a27ccb1b375fe1528d810d7dfd500ebbb858e0 100644 (file)
@@ -16,6 +16,7 @@ import static org.openhab.binding.netatmo.internal.NetatmoBindingConstants.*;
 import static org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.*;
 
 import java.util.List;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.netatmo.internal.api.dto.NAObject;
@@ -46,8 +47,8 @@ public class AlarmEventCapability extends HomeSecurityThingCapability {
 
         handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_TYPE, toStringType(event.getEventType()));
         handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_TIME, toDateTimeType(event.getTime()));
-        handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_SUBTYPE,
-                event.getSubTypeDescription().map(ChannelTypeUtils::toStringType).orElse(UnDefType.NULL));
+        handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_SUBTYPE, Objects.requireNonNull(
+                event.getSubTypeDescription().map(ChannelTypeUtils::toStringType).orElse(UnDefType.NULL)));
         final String message = event.getName();
         handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_MESSAGE,
                 message == null || message.isBlank() ? UnDefType.NULL : toStringType(message));
@@ -55,7 +56,8 @@ public class AlarmEventCapability extends HomeSecurityThingCapability {
 
     @Override
     public List<NAObject> updateReadings() {
-        return getSecurityCapability().map(cap -> cap.getDeviceLastEvent(handler.getId(), moduleType.apiName))
-                .map(event -> List.of((NAObject) event)).orElse(List.of());
+        return Objects.requireNonNull(
+                getSecurityCapability().map(cap -> cap.getDeviceLastEvent(handler.getId(), moduleType.apiName))
+                        .map(event -> List.of((NAObject) event)).orElse(List.of()));
     }
 }
index d110659c868231ae91d1055c7f9f0cebe373923c..ed16125019798ef2376ba8babaa3efcc24d3d51a 100644 (file)
@@ -18,6 +18,7 @@ import static org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.*;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriBuilderException;
@@ -129,7 +130,7 @@ public class CameraCapability extends HomeSecurityThingCapability {
         handler.updateState(group, CHANNEL_EVENT_VIGNETTE, toRawType(event.getVignetteUrl()));
         handler.updateState(group, CHANNEL_EVENT_VIGNETTE_URL, toStringType(event.getVignetteUrl()));
         handler.updateState(group, CHANNEL_EVENT_SUBTYPE,
-                event.getSubTypeDescription().map(d -> toStringType(d)).orElse(UnDefType.NULL));
+                Objects.requireNonNull(event.getSubTypeDescription().map(d -> toStringType(d)).orElse(UnDefType.NULL)));
         final String message = event.getName();
         handler.updateState(group, CHANNEL_EVENT_MESSAGE,
                 message == null || message.isBlank() ? UnDefType.NULL : toStringType(message));
index 5d12b72997a54125001082334e50e4ae14b6b8e0..60b9f3fe51175ffae6f97f0fe0dfc09f264216e2 100644 (file)
@@ -18,6 +18,7 @@ import static org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.*;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Stream;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -79,7 +80,7 @@ public class PersonCapability extends HomeSecurityThingCapability {
         super.updateWebhookEvent(event);
 
         handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_SUBTYPE,
-                event.getSubTypeDescription().map(d -> toStringType(d)).orElse(UnDefType.NULL));
+                Objects.requireNonNull(event.getSubTypeDescription().map(d -> toStringType(d)).orElse(UnDefType.NULL)));
 
         final String message = event.getName();
         handler.updateState(GROUP_LAST_EVENT, CHANNEL_EVENT_MESSAGE,
@@ -100,8 +101,8 @@ public class PersonCapability extends HomeSecurityThingCapability {
             return; // ignore incoming events if they are deprecated
         }
         lastEventTime = eventTime;
-        handler.triggerChannel(CHANNEL_HOME_EVENT,
-                event.getSubTypeDescription().map(EventSubType::name).orElse(event.getEventType().name()));
+        handler.triggerChannel(CHANNEL_HOME_EVENT, Objects.requireNonNull(
+                event.getSubTypeDescription().map(EventSubType::name).orElse(event.getEventType().name())));
     }
 
     @Override
index d230df57f202ae6e3ea5a9e6e72a36bc0c5574e5..549f463304cf225bab2c6788ec98d91450dcfae1 100644 (file)
@@ -69,7 +69,8 @@ public class RefreshAutoCapability extends RefreshCapability {
     @Override
     protected void updateNAThing(NAThing newData) {
         super.updateNAThing(newData);
-        dataTimeStamp = newData.getLastSeen().map(ZonedDateTime::toInstant).orElse(Instant.MIN);
+        ZonedDateTime lastSeen = newData.getLastSeen();
+        dataTimeStamp = lastSeen != null ? lastSeen.toInstant() : Instant.MIN;
     }
 
     @Override
index 624606606ab041879bc437420c3729c3c8016e6c..50473750efb00ebef3d142e1d026b471c9cc2e85 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -175,25 +176,25 @@ class SecurityCapability extends RestCapability<SecurityApi> {
     }
 
     private Collection<HomeEvent> requestDeviceEvents(String moduleId, String deviceType) {
-        return getApi().map(api -> {
+        return Objects.requireNonNull(getApi().map(api -> {
             try {
                 return api.getDeviceEvents(securityId, moduleId, deviceType);
             } catch (NetatmoException e) {
                 logger.warn("Error retrieving last events of camera '{}' : {}", moduleId, e.getMessage());
                 return null;
             }
-        }).orElse(List.of());
+        }).orElse(List.of()));
     }
 
     private Collection<HomeEvent> requestPersonEvents(String personId) {
-        return getApi().map(api -> {
+        return Objects.requireNonNull(getApi().map(api -> {
             try {
                 return api.getPersonEvents(securityId, personId);
             } catch (NetatmoException e) {
                 logger.warn("Error retrieving last events of person '{}' : {}", personId, e.getMessage());
                 return null;
             }
-        }).orElse(List.of());
+        }).orElse(List.of()));
     }
 
     public void setPersonAway(String personId, boolean away) {
index 26ca297b68c55e952ec5483920b4a6528dc762af..63b2dcdb9ba22c6abfe4221d21b4918994874fd6 100644 (file)
@@ -16,7 +16,6 @@ import static org.openhab.binding.netatmo.internal.NetatmoBindingConstants.*;
 import static org.openhab.binding.netatmo.internal.utils.ChannelTypeUtils.toDateTimeType;
 
 import java.time.ZonedDateTime;
-import java.util.Optional;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -42,8 +41,8 @@ public class TimestampChannelHelper extends ChannelHelper {
 
     @Override
     protected @Nullable State internalGetProperty(String channelId, NAThing naThing, Configuration config) {
-        Optional<ZonedDateTime> lastSeen = naThing.getLastSeen();
-        return CHANNEL_LAST_SEEN.equals(channelId) && lastSeen.isPresent() ? toDateTimeType(lastSeen) : null;
+        ZonedDateTime lastSeen = naThing.getLastSeen();
+        return CHANNEL_LAST_SEEN.equals(channelId) && lastSeen != null ? toDateTimeType(lastSeen) : null;
     }
 
     @Override
index 8fe4c3bf09efe91f0149ab83fe02d01448d607e6..34ebca9cd2c62a0b6b706cd9f5befbca34620335 100644 (file)
@@ -15,7 +15,6 @@ package org.openhab.binding.netatmo.internal.utils;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.ZonedDateTime;
-import java.util.Optional;
 
 import javax.measure.Unit;
 
@@ -71,10 +70,6 @@ public class ChannelTypeUtils {
         return (zonedDateTime == null) ? UnDefType.NULL : new DateTimeType(zonedDateTime);
     }
 
-    public static State toDateTimeType(Optional<ZonedDateTime> zonedDateTime) {
-        return zonedDateTime.map(zdt -> (State) new DateTimeType(zdt)).orElse(UnDefType.NULL);
-    }
-
     public static State toQuantityType(@Nullable Double value, MeasureClass measureClass) {
         if (value != null && !value.isNaN()) {
             Measure measureDef = measureClass.measureDefinition;
index e3b00beac48a87a99c60b5a6d38ca066ebfdf4f4..c770a617789beb5dab93a2589049d25873aca146 100644 (file)
@@ -94,7 +94,7 @@ public abstract class AbstractUplinkCommandCallback extends BufferingResponseLis
      * Log request success
      */
     @Override
-    public final void onSuccess(@Nullable Response response) {
+    public final void onSuccess(Response response) {
         super.onSuccess(response);
         if (response != null) {
             communicationStatus.setHttpCode(HttpStatus.getCode(response.getStatus()));
@@ -107,7 +107,9 @@ public abstract class AbstractUplinkCommandCallback extends BufferingResponseLis
      */
     @Override
     public final void onFailure(@Nullable Response response, @Nullable Throwable failure) {
-        super.onFailure(response, failure);
+        if (response != null && failure != null) {
+            super.onFailure(response, failure);
+        }
         if (failure != null) {
             logger.debug("Request failed: {}", failure.toString());
             communicationStatus.setError((Exception) failure);
@@ -123,9 +125,10 @@ public abstract class AbstractUplinkCommandCallback extends BufferingResponseLis
     }
 
     @Override
-    public void onContent(@Nullable Response response, @Nullable ByteBuffer content) {
+    public void onContent(Response response, ByteBuffer content) {
         super.onContent(response, content);
-        logger.debug("received content, length: {}", getContentAsString().length());
+        String contentAsString = getContentAsString();
+        logger.debug("received content, length: {}", contentAsString != null ? getContentAsString().length() : 0);
     }
 
     @Override
index 7ee52b68fac793b39d56899c706c9bcd08a353d9..b9a075e474b6e5dd49de9bc8dcf827793975bba5 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.nikohomecontrol.internal.protocol.nhc2;
 
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -45,14 +46,16 @@ public class NhcSystemInfo2 {
      * @return the NhcVersion
      */
     public String getNhcVersion() {
-        return swVersions.stream().map(p -> p.nhcVersion).filter(v -> !v.isEmpty()).findFirst().orElse("");
+        return Objects.requireNonNull(
+                swVersions.stream().map(p -> p.nhcVersion).filter(v -> !v.isEmpty()).findFirst().orElse(""));
     }
 
     /**
      * @return the CocoImage version
      */
     public String getCocoImage() {
-        return swVersions.stream().map(p -> p.cocoImage).filter(v -> !v.isEmpty()).findFirst().orElse("");
+        return Objects.requireNonNull(
+                swVersions.stream().map(p -> p.cocoImage).filter(v -> !v.isEmpty()).findFirst().orElse(""));
     }
 
     /**
index 890b583e42004ef16bff6dc1eb00f5fdc84573dc..c7bcadfe69119f381a0f14dadcaa1664d76f50a9 100644 (file)
@@ -19,6 +19,7 @@ import java.net.UnknownHostException;
 import java.time.ZonedDateTime;
 import java.util.Collection;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ScheduledFuture;
@@ -239,9 +240,9 @@ public class OmnilinkBridgeHandler extends BaseBridgeHandler implements Notifica
              * HAI only supports one audio player - cycle through features until we find a feature that is an audio
              * player.
              */
-            audioPlayer = reqSystemFeatures().getFeatures().stream()
+            audioPlayer = Objects.requireNonNull(reqSystemFeatures().getFeatures().stream()
                     .map(featureCode -> AudioPlayer.getAudioPlayerForFeatureCode(featureCode))
-                    .filter(Optional::isPresent).findFirst().orElse(Optional.empty());
+                    .filter(Optional::isPresent).findFirst().orElse(Optional.empty()));
 
             systemType = SystemType.getType(reqSystemInformation().getModel());
 
index f7088bf846a506f0c2a8627c47772e8252240ffd..8c36177445bf8eaf66dd96099afbc340bb5c9c48 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.pentair.internal.handler.helpers;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -156,8 +157,8 @@ public class PentairControllerCircuit {
         }
 
         public static CircuitName valueOfModeNumber(int number) {
-            return Arrays.stream(values()).filter(value -> (value.getCode() == number)).findFirst()
-                    .orElse(CircuitName.EMPTY);
+            return Objects.requireNonNull(Arrays.stream(values()).filter(value -> (value.getCode() == number))
+                    .findFirst().orElse(CircuitName.EMPTY));
         }
     }
 
@@ -197,8 +198,8 @@ public class PentairControllerCircuit {
         }
 
         public static CircuitFunction valueOfModeNumber(int number) {
-            return Arrays.stream(values()).filter(value -> (value.getCode() == number)).findFirst()
-                    .orElse(CircuitFunction.EMPTY);
+            return Objects.requireNonNull(Arrays.stream(values()).filter(value -> (value.getCode() == number))
+                    .findFirst().orElse(CircuitFunction.EMPTY));
         }
     }
 
index f10923dc5877a0c6ba97264cf96e8f3e0b0021d8..aaa5f6a26796c7348ebeceabb304a342c8e7144b 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.pentair.internal.handler.helpers;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 
@@ -58,6 +59,7 @@ public enum PentairControllerLightMode {
     }
 
     public static PentairControllerLightMode valueOfModeNumber(int modeNumber) {
-        return Arrays.stream(values()).filter(value -> (value.getModeNumber() == modeNumber)).findFirst().orElse(EMPTY);
+        return Objects.requireNonNull(Arrays.stream(values()).filter(value -> (value.getModeNumber() == modeNumber))
+                .findFirst().orElse(EMPTY));
     }
 }
index 44b48b35ef0272c4b1b54a69d5106b113c44a50f..aa6ff1f871bf4f8f097e1a84d41791a37dce9f3c 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.pentair.internal.handler.helpers;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.binding.pentair.internal.parser.PentairStandardPacket;
@@ -49,7 +50,8 @@ public class PentairHeatStatus {
         }
 
         public static HeatMode valueOfCode(int code) {
-            return Arrays.stream(values()).filter(value -> (value.getCode() == code)).findFirst().orElse(EMPTY);
+            return Objects.requireNonNull(
+                    Arrays.stream(values()).filter(value -> (value.getCode() == code)).findFirst().orElse(EMPTY));
         }
     }
 
index 10919e6724c2fc75686cc64930bf4186708a7db5..184e4b87b2b51407b597f1ccf55a6c280a2cec40 100644 (file)
@@ -246,7 +246,12 @@ public class MeterHandler extends BaseThingHandler {
 
             Properties urlHeader = new Properties();
             urlHeader.put("CONTENT-TYPE", "application/json");
-            urlHeader.put("Authorization", getTokenFromBridge());
+            String token = getTokenFromBridge();
+            if (token == null) {
+                logger.debug("Unable to get the token from the bridge");
+                return null;
+            }
+            urlHeader.put("Authorization", token);
 
             String urlResponse = HttpUtil.executeUrl("GET", url, urlHeader, null, null, 2000);
 
index 34b8cf920bcf65dc903e5a4dc39a62ce8b9ae6ea..89143ed0933caf4ce9293f2a028f096ce150ea1e 100644 (file)
@@ -308,7 +308,7 @@ public class PushsaferMessageBuilder {
         body.addFieldPart(MESSAGE_KEY_ANSWER, new StringContentProvider(String.valueOf(answer)), null);
 
         body.addFieldPart(MESSAGE_KEY_TIME2LIVE, new StringContentProvider(String.valueOf(time2live)), null);
-
+        String attachment = this.attachment;
         if (attachment != null) {
             String localAttachment = attachment;
             final String encodedString;
index ed90d59be0cfd2bf25ed3382f1e0477462195cf7..81da5ad1d0cae2d4a8d83ad4728da97911681dd3 100644 (file)
@@ -158,11 +158,15 @@ public class RadioThermostatConnector {
 
     /**
      * Dispatch an event (key, value) to the event listeners
+     * Events with a null value are discarded
      *
      * @param key the key
      * @param value the value
      */
-    private void dispatchKeyValue(String key, String value) {
+    private void dispatchKeyValue(String key, @Nullable String value) {
+        if (value == null) {
+            return;
+        }
         RadioThermostatEvent event = new RadioThermostatEvent(this, key, value);
         for (RadioThermostatEventListener listener : listeners) {
             listener.onNewMessageEvent(event);
index 2b9aff1f91632c756c0489df2ab1f29a954f0c10..7e2613566f0ce56c55e105b1c4cad8615a458722 100644 (file)
@@ -56,13 +56,13 @@ public class StatusService {
     }
 
     private StatusDTO getStatus(final List<UdpResponseDTO> singleResponse) {
-        return singleResponse.stream()
+        return Objects.requireNonNull(singleResponse.stream()
                 .filter(response -> !response.getAnswer().isEmpty() && response.getAnswer().contains(VERSION_STRING))
                 .map(response -> deserializeString(response.getAnswer()))
                 .filter(statusRaw -> statusRaw.getCode() == 200 && statusRaw.getResponse() == 90)
                 .map(statusRaw -> new StatusDTO(true, statusRaw.getCode(), statusRaw.getData().getSwitchValue(),
                         statusRaw.getData().getWatt(), statusRaw.getData().getAmp()))
-                .findFirst().orElse(new StatusDTO(false, 503, null, null, null));
+                .findFirst().orElse(new StatusDTO(false, 503, null, null, null)));
     }
 
     private StatusRawDTO deserializeString(String response) {
index ec523b2c2302957b85bd96c81236028e2b462afc..ab03b7cf79eb34b647c30afbc026c5e8c326dc63 100644 (file)
@@ -66,10 +66,10 @@ public class SwitchService {
     }
 
     private SwitchResponseDTO getSwitchResponse(final List<UdpResponseDTO> singleResponse) {
-        return singleResponse.stream().filter(response -> !response.getAnswer().isEmpty())
+        return Objects.requireNonNull(singleResponse.stream().filter(response -> !response.getAnswer().isEmpty())
                 .map(response -> deserializeString(response.getAnswer()))
                 .filter(switchResponse -> switchResponse.getCode() == 200 && switchResponse.getResponse() == 20)
-                .findFirst().orElse(new SwitchResponseDTO(0, 503));
+                .findFirst().orElse(new SwitchResponseDTO(0, 503)));
     }
 
     private SwitchResponseDTO deserializeString(String response) {
index cbe752830c7d5b16c7c78b8dada9a285abf33ca0..5f55faf38b71929d14dcf1e28f01c73e81c7fe6e 100644 (file)
@@ -58,10 +58,11 @@ package org.openhab.binding.sagercaster.internal.caster;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.Properties;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ServiceScope;
@@ -89,7 +90,7 @@ public class SagerWeatherCaster {
     private final Logger logger = LoggerFactory.getLogger(SagerWeatherCaster.class);
     private final Properties forecaster = new Properties();
 
-    private Optional<SagerPrediction> prevision = Optional.empty();
+    private @Nullable SagerPrediction prevision;
     private String[] usedDirections = NTZDIRECTIONS; // Defaulted to Northern Zone
 
     private int currentBearing = -1;
@@ -107,7 +108,7 @@ public class SagerWeatherCaster {
     public SagerWeatherCaster() {
         try (InputStream input = Thread.currentThread().getContextClassLoader()
                 .getResourceAsStream("/sagerForecaster.properties")) {
-            forecaster.load(input);
+            forecaster.load(Objects.requireNonNull(input));
         } catch (IOException e) {
             logger.warn("Error during Sager Forecaster startup", e);
         }
@@ -319,27 +320,31 @@ public class SagerWeatherCaster {
                 }
         }
         String forecast = forecaster.getProperty(d1 + sagerPressure + pressureEvolution + nubes);
-        prevision = Optional.ofNullable(forecast != null ? new SagerPrediction(forecast) : null);
+        prevision = forecast != null ? new SagerPrediction(forecast) : null;
     }
 
     public String getForecast() {
-        return prevision.map(p -> p.getForecast()).orElse(UNDEF);
+        return Objects.requireNonNullElse(this.prevision.getForecast(), UNDEF);
     }
 
     public String getWindVelocity() {
-        return prevision.map(p -> p.getWindVelocity()).orElse(UNDEF);
+        SagerPrediction prevision = this.prevision;
+        return prevision != null ? prevision.getWindVelocity() : UNDEF;
     }
 
     public String getWindDirection() {
-        return prevision.map(p -> p.getWindDirection()).orElse(UNDEF);
+        SagerPrediction prevision = this.prevision;
+        return prevision != null ? prevision.getWindDirection() : UNDEF;
     }
 
     public String getWindDirection2() {
-        return prevision.map(p -> p.getWindDirection2()).orElse(UNDEF);
+        SagerPrediction prevision = this.prevision;
+        return prevision != null ? prevision.getWindDirection2() : UNDEF;
     }
 
     public String getSagerCode() {
-        return prevision.map(p -> p.getSagerCode()).orElse(UNDEF);
+        SagerPrediction prevision = this.prevision;
+        return prevision != null ? prevision.getSagerCode() : UNDEF;
     }
 
     public void setLatitude(double latitude) {
index 2b9d564ca0d3552a44156deb16b98dbe6cc683bb..c43e78c1bbb9b08a1002f310991b57ba92b847fd 100644 (file)
@@ -23,7 +23,6 @@ import java.security.NoSuchAlgorithmException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -272,7 +271,8 @@ public class SAICiSMARTBridgeHandler extends BaseBridgeHandler {
     }
 
     public Collection<VinInfo> getVinList() {
-        return Optional.ofNullable(vinList).orElse(Collections.emptyList());
+        Collection<VinInfo> vinList = this.vinList;
+        return vinList != null ? vinList : Collections.emptyList();
     }
 
     public String sendRequest(String request, String endpoint)
index fd7924c26893ddcb2b3174b692ebffa495c5ff09..5b5029725565b5189a675f4a7e4981232fc1b3f7 100755 (executable)
@@ -15,6 +15,7 @@ package org.openhab.binding.samsungtv.internal;
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.Base64;
+import java.util.Objects;
 import java.util.Optional;
 
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -52,7 +53,7 @@ public class Utils {
         } catch (ParserConfigurationException e) {
             LOGGER.debug("XMLParser Configuration Error: {}", e.getMessage());
         }
-        return Optional.ofNullable(factory).orElse(DocumentBuilderFactory.newInstance());
+        return factory;
     }
 
     /**
@@ -85,30 +86,32 @@ public class Utils {
     }
 
     public static String getModelName(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getDetails()).map(a -> a.getModelDetails())
-                .map(a -> a.getModelName()).orElse("");
+        return Objects.requireNonNull(Optional.ofNullable(device).map(a -> a.getDetails()).map(a -> a.getModelDetails())
+                .map(a -> a.getModelName()).orElse(""));
     }
 
     public static String getManufacturer(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getDetails()).map(a -> a.getManufacturerDetails())
-                .map(a -> a.getManufacturer()).orElse("");
+        return Objects.requireNonNull(Optional.ofNullable(device).map(a -> a.getDetails())
+                .map(a -> a.getManufacturerDetails()).map(a -> a.getManufacturer()).orElse(""));
     }
 
     public static String getFriendlyName(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getDetails()).map(a -> a.getFriendlyName()).orElse("");
+        return Objects.requireNonNull(
+                Optional.ofNullable(device).map(a -> a.getDetails()).map(a -> a.getFriendlyName()).orElse(""));
     }
 
     public static String getUdn(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getIdentity()).map(a -> a.getUdn())
-                .map(a -> a.getIdentifierString()).orElse("");
+        return Objects.requireNonNull(Optional.ofNullable(device).map(a -> a.getIdentity()).map(a -> a.getUdn())
+                .map(a -> a.getIdentifierString()).orElse(""));
     }
 
     public static String getHost(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getIdentity()).map(a -> a.getDescriptorURL())
-                .map(a -> a.getHost()).orElse("");
+        return Objects.requireNonNull(Optional.ofNullable(device).map(a -> a.getIdentity())
+                .map(a -> a.getDescriptorURL()).map(a -> a.getHost()).orElse(""));
     }
 
     public static String getType(@Nullable RemoteDevice device) {
-        return Optional.ofNullable(device).map(a -> a.getType()).map(a -> a.getType()).orElse("");
+        return Objects
+                .requireNonNull(Optional.ofNullable(device).map(a -> a.getType()).map(a -> a.getType()).orElse(""));
     }
 }
index 2c03e111defbb04108415a3dbea3de685254d2a3..3fbe15e3e6bdc290c5ac26008af9d97b736631b4 100755 (executable)
@@ -105,11 +105,11 @@ public class RemoteControllerWebSocket extends RemoteController implements Liste
         }
 
         public String getAppId() {
-            return Optional.ofNullable(appId).orElse("");
+            return appId != null ? appId : "";
         }
 
         public String getName() {
-            return Optional.ofNullable(name).orElse("");
+            return name != null ? name : "";
         }
 
         public void setName(String name) {
index 30fab9d126de38f400d1425b052cb8abe1fc6708..8f98acbc21a751cffa3c2b1456f3e3abf61f05be 100755 (executable)
@@ -18,6 +18,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -277,9 +278,9 @@ public class MainTVServerService implements UpnpIOParticipant, SamsungTvService
     }
 
     protected synchronized Map<String, String> updateResourceState(String actionId, Map<String, String> inputs) {
-        Map<String, String> result = Optional.of(service)
-                .map(a -> a.invokeAction(this, SERVICE_MAIN_AGENT, actionId, inputs)).filter(a -> !a.isEmpty())
-                .orElse(Map.of("Result", "Command Failed"));
+        Map<String, String> result = Objects.requireNonNull(
+                Optional.of(service).map(a -> a.invokeAction(this, SERVICE_MAIN_AGENT, actionId, inputs))
+                        .filter(a -> !a.isEmpty()).orElse(Map.of("Result", "Command Failed")));
         if (isOk(result)) {
             result.keySet().stream().filter(a -> !"Result".equals(a)).forEach(a -> {
                 String val = result.getOrDefault(a, "");
@@ -305,8 +306,8 @@ public class MainTVServerService implements UpnpIOParticipant, SamsungTvService
         if (sources.isEmpty()) {
             getSourceMap();
         }
-        String source = sources.entrySet().stream().filter(a -> a.getValue().equals(tmpSource)).map(a -> a.getKey())
-                .findFirst().orElse(tmpSource);
+        String source = Objects.requireNonNull(sources.entrySet().stream().filter(a -> a.getValue().equals(tmpSource))
+                .map(a -> a.getKey()).findFirst().orElse(tmpSource));
         Map<String, String> result = updateResourceState("SetMainTVSource",
                 Map.of("Source", source, "ID", sources.getOrDefault(source, "0"), "UiID", "0"));
         logResult(result.getOrDefault("Result", "Unable to Set Source Name: " + source));
@@ -334,25 +335,25 @@ public class MainTVServerService implements UpnpIOParticipant, SamsungTvService
     }
 
     private String parseCurrentChannel(String xml) {
-        return Utils.loadXMLFromString(xml, host).map(a -> a.getDocumentElement())
-                .map(a -> getFirstNodeValue(a, "MajorCh", "-1")).orElse("-1");
+        return Objects.requireNonNull(Utils.loadXMLFromString(xml, host).map(a -> a.getDocumentElement())
+                .map(a -> getFirstNodeValue(a, "MajorCh", "-1")).orElse("-1"));
     }
 
     private void getSourceMap() {
         // NodeList doesn't have a stream, so do this
-        sources = Optional.of(updateResourceState("GetSourceList")).filter(a -> "OK".equals(a.get("Result")))
-                .map(a -> a.get("SourceList")).flatMap(xml -> Utils.loadXMLFromString(xml, host))
-                .map(a -> a.getDocumentElement()).map(
-                        a -> a.getElementsByTagName("Source"))
-                .map(nList -> IntStream.range(0, nList.getLength()).boxed().map(i -> (Element) nList.item(i))
-                        .collect(Collectors.toMap(a -> getFirstNodeValue(a, "SourceType", ""),
-                                a -> getFirstNodeValue(a, "ID", ""), (key1, key2) -> key2)))
-                .orElse(Map.of());
+        sources = Objects.requireNonNull(
+                Optional.of(updateResourceState("GetSourceList")).filter(a -> "OK".equals(a.get("Result")))
+                        .map(a -> a.get("SourceList")).flatMap(xml -> Utils.loadXMLFromString(xml, host))
+                        .map(a -> a.getDocumentElement()).map(a -> a.getElementsByTagName("Source")).map(
+                                nList -> IntStream.range(0, nList.getLength()).boxed().map(i -> (Element) nList.item(i))
+                                        .collect(Collectors.toMap(a -> getFirstNodeValue(a, "SourceType", ""),
+                                                a -> getFirstNodeValue(a, "ID", ""), (key1, key2) -> key2)))
+                        .orElse(Map.of()));
     }
 
     private String getFirstNodeValue(Element nodeList, String node, String ifNone) {
-        return Optional.ofNullable(nodeList).map(a -> a.getElementsByTagName(node)).filter(a -> a.getLength() > 0)
-                .map(a -> a.item(0)).map(a -> a.getTextContent()).orElse(ifNone);
+        return Objects.requireNonNull(Optional.ofNullable(nodeList).map(a -> a.getElementsByTagName(node))
+                .filter(a -> a.getLength() > 0).map(a -> a.item(0)).map(a -> a.getTextContent()).orElse(ifNone));
     }
 
     /**
index 68c125a92283c6e59831e40f7eb56991375608fb..4c61b74d68745b6afe0f08f293d4d2849f1f235e 100755 (executable)
@@ -470,11 +470,12 @@ public class SmartThingsApiService implements SamsungTvService {
         }
     }
 
-    public Number parseTVChannel(String channel) {
+    public Number parseTVChannel(@Nullable String channel) {
         try {
-            return Optional.ofNullable(channel)
-                    .map(a -> a.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"))
-                    .map(Float::parseFloat).orElse(-1f);
+            return channel != null
+                    ? Float.parseFloat(
+                            channel.replaceAll("\\D+", ".").replaceFirst("^\\D*((\\d+\\.\\d+)|(\\d+)).*", "$1"))
+                    : -1f;
         } catch (NumberFormatException ignore) {
         }
         return -1;
index 23422070a166761abdb6b1f1126987f47e375909..a27f01eb6d86cf77ad596b23de2a7ae5244804ab 100644 (file)
@@ -16,6 +16,7 @@ import static org.openhab.binding.satel.internal.SatelBindingConstants.*;
 
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -81,8 +82,9 @@ public class SatelSystemHandler extends SatelStateThingHandler {
             return;
         }
         updateState(CHANNEL_DATE_TIME,
-                event.getIntegraTime().map(dt -> (State) new DateTimeType(dt.atZone(getBridgeHandler().getZoneId())))
-                        .orElse(UnDefType.UNDEF));
+                Objects.requireNonNull(event.getIntegraTime()
+                        .map(dt -> (State) new DateTimeType(dt.atZone(getBridgeHandler().getZoneId())))
+                        .orElse(UnDefType.UNDEF)));
         updateSwitch(CHANNEL_SERVICE_MODE, event.inServiceMode());
         updateSwitch(CHANNEL_TROUBLES, event.troublesPresent());
         updateSwitch(CHANNEL_TROUBLES_MEMORY, event.troublesMemory());
index d33c5ac7dacaa4c6f654a8ec1537b0174798d8a3..cc8499e4e6b11b2230628faddaeefacdb06a2e85 100644 (file)
@@ -73,7 +73,8 @@ public class HTTPHandler {
                         }
                         callback.onError(Objects.requireNonNullElse(failure, "Unknown error"));
                     } else {
-                        callback.onResponse(getContentAsString());
+
+                        callback.onResponse(Objects.requireNonNull(getContentAsString()));
                     }
                 }
             });
index 0967723c87b8a78633c26c65c5398e1a100acc8b..20f735a66f9daef6411ed34e3263c4d1ca13742b 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.serial.internal.util;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.core.io.transport.serial.SerialPort;
@@ -54,6 +55,7 @@ public enum Parity {
      * @return the enum value
      */
     public static Parity fromConfig(final String configValue) {
-        return Arrays.asList(values()).stream().filter(p -> p.configValue.equals(configValue)).findFirst().orElse(NONE);
+        return Objects.requireNonNull(Arrays.asList(values()).stream().filter(p -> p.configValue.equals(configValue))
+                .findFirst().orElse(NONE));
     }
 }
index 1daf52e82089c610cd24e4831a65c6403bc09403..5e2f8fa2aa65d46970d7f9fa8cc151ebdc7ad32b 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.serial.internal.util;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.openhab.core.io.transport.serial.SerialPort;
@@ -52,7 +53,7 @@ public enum StopBits {
      * @return the enum value
      */
     public static StopBits fromConfig(final String configValue) {
-        return Arrays.asList(values()).stream().filter(p -> p.configValue.equals(configValue)).findFirst()
-                .orElse(STOPBITS_1);
+        return Objects.requireNonNull(Arrays.asList(values()).stream().filter(p -> p.configValue.equals(configValue))
+                .findFirst().orElse(STOPBITS_1));
     }
 }
index 16d4556c22e8769068fba38d09c90b97a95f991c..6f4eac2cb506e106837a80524c859f80eb709bcf 100644 (file)
@@ -16,6 +16,7 @@ import java.math.BigDecimal;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -76,8 +77,8 @@ public class ForecastAggregator {
             } else {
                 hours = dayForecasts.get(i - 1).getValidTime().until(current.getValidTime(), ChronoUnit.HOURS);
             }
-            values.add(current.getParameter(parameter).map(value -> value.multiply(BigDecimal.valueOf(hours)))
-                    .orElse(BigDecimal.ZERO));
+            values.add(Objects.requireNonNull(current.getParameter(parameter)
+                    .map(value -> value.multiply(BigDecimal.valueOf(hours))).orElse(BigDecimal.ZERO)));
         }
         return values.stream().reduce(BigDecimal::add);
     }
index 05ed3d9c259a2ebc0d99a08854be5733e9d7b4a9..5c5e2fb967a71b130fbb9d51b79a837e7a575301 100644 (file)
@@ -5,6 +5,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.StringReader;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.StringTokenizer;
 import java.util.concurrent.TimeoutException;
@@ -63,7 +64,7 @@ public abstract class AbstractModemDriver {
             ClassLoader classLoader = this.getClass().getClassLoader();
             if (classLoader != null) {
                 try (InputStream inputStream = classLoader.getResourceAsStream("modem.properties")) {
-                    modemProperties.load(inputStream);
+                    modemProperties.load(Objects.requireNonNull(inputStream));
                 }
             }
         } catch (IOException e) {
index b762fe841f4c85bcca094b29960c848f16aaa3b3..0f89fc5399d4c29dcf58c9027a3ea6fc514613fb 100644 (file)
@@ -91,7 +91,7 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
      * Log request success
      */
     @Override
-    public final void onSuccess(@Nullable Response response) {
+    public final void onSuccess(Response response) {
         super.onSuccess(response);
         if (response != null) {
             communicationStatus.setHttpCode(HttpStatus.getCode(response.getStatus()));
@@ -104,7 +104,9 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
      */
     @Override
     public final void onFailure(@Nullable Response response, @Nullable Throwable failure) {
-        super.onFailure(response, failure);
+        if (response != null && failure != null) {
+            super.onFailure(response, failure);
+        }
         if (failure != null) {
             logger.debug("Request failed: {}", failure.toString());
             communicationStatus.setError((Exception) failure);
@@ -122,7 +124,7 @@ public abstract class AbstractCommand extends BufferingResponseListener implemen
     }
 
     @Override
-    public void onContent(@Nullable Response response, @Nullable ByteBuffer content) {
+    public void onContent(Response response, ByteBuffer content) {
         super.onContent(response, content);
         logger.debug("received content, length: {}", getContentAsString().length());
     }
index d2d3fb96653e7e07cd1bacefe0edff0e887a6f77..17a88adecbbab6f911c2ae67c95e47c8358a899b 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.solax.internal.model;
 
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Stream;
 
@@ -78,7 +79,8 @@ public enum InverterType {
 
     public static InverterType fromIndex(int index) {
         InverterType[] values = InverterType.values();
-        return Stream.of(values).filter(value -> value.typeIndex == index).findFirst().orElse(UNKNOWN);
+        return Objects.requireNonNull(
+                Stream.of(values).filter(value -> value.typeIndex == index).findFirst().orElse(UNKNOWN));
     }
 
     public @Nullable RawDataParser getParser() {
index 38051fb1986350db37f858d959647b00b15fb03d..103effc829f260a4c9ebde7028dc71afc5876a27 100644 (file)
@@ -13,7 +13,6 @@
 package org.openhab.binding.sonnen.internal;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
 
 /**
  * The {@link SonnenConfiguration} class contains fields mapping thing configuration parameters.
@@ -23,7 +22,7 @@ import org.eclipse.jdt.annotation.Nullable;
 @NonNullByDefault
 public class SonnenConfiguration {
 
-    public @Nullable String hostIP = null;
+    public String hostIP = "";
     public int refreshInterval = 30;
     public String authToken = "";
 }
index ae27263f04ceb6a79e74483d3d7c065684ee5787..a7a927d84f08bcff629995744b41adb5c36fee08 100644 (file)
@@ -79,7 +79,7 @@ public class SonnenHandler extends BaseThingHandler {
                     "Parameter 'refresh Rate' msut be in the range 0-1000!");
             return;
         }
-        if (config.hostIP == null) {
+        if (config.hostIP.isBlank()) {
             updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, "IP Address must be configured!");
             return;
         }
index ccafd3d78e65ad23851ea49ccc3017e34ef8acc6..a14ff86d4059356d700e5277ff482babca883d82 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.surepetcare.internal.dto;
 import java.time.ZonedDateTime;
 import java.util.Arrays;
 import java.util.Map;
+import java.util.Objects;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.openhab.core.thing.Thing;
@@ -44,7 +45,8 @@ public class SurePetcareDevice extends SurePetcareBaseObject {
         }
 
         public static @NonNull ProductType findByTypeId(final int id) {
-            return Arrays.stream(values()).filter(value -> value.id.equals(id)).findFirst().orElse(UNKNOWN);
+            return Objects.requireNonNull(
+                    Arrays.stream(values()).filter(value -> value.id.equals(id)).findFirst().orElse(UNKNOWN));
         }
     }
 
index 4bb3f6689e25bd8dba6003def6147dfb7c1aee53..a08fdb7b453da08c1919c0aa798e50ed9299f5a0 100644 (file)
@@ -171,7 +171,7 @@ public class SecurePassthrough implements TapoProtocolInterface {
                     httpDelegator.handleError(new TapoErrorHandler(ERR_BINDING_HTTP_RESPONSE, getContentAsString()));
                 } else {
                     /* request successful */
-                    String rBody = getContentAsString();
+                    String rBody = Objects.requireNonNull(getContentAsString());
                     try {
                         asyncResponseReceived(rBody, command);
                     } catch (TapoErrorHandler tapoError) {
@@ -242,7 +242,7 @@ public class SecurePassthrough implements TapoProtocolInterface {
             return tapoResponse;
         } else {
             logger.debug("({}) invalid response received", uid);
-            throw new TapoErrorHandler(ERR_BINDING_HTTP_RESPONSE, "invalid response receicved");
+            throw new TapoErrorHandler(ERR_BINDING_HTTP_RESPONSE, "invalid response received");
         }
     }
 
index 205e348640a8b6c7b05d1f516a4906f3a0e25be6..9af9329f641ed22d8be8868a61cf018922e98ff8 100644 (file)
@@ -160,7 +160,7 @@ public class PassthroughProtocol implements TapoProtocolInterface {
                     httpDelegator.handleError(new TapoErrorHandler(ERR_BINDING_HTTP_RESPONSE, getContentAsString()));
                 } else {
                     /* request successful */
-                    String rBody = getContentAsString();
+                    String rBody = Objects.requireNonNull(getContentAsString());
                     try {
                         asyncResponseReceived(rBody, command);
                     } catch (TapoErrorHandler tapoError) {
index 078dae4f6205f9a9edfdf4297a67cee7fa5b6a1d..5571d10c048d518a20af9fc9f7acd13a14f9fa08 100644 (file)
@@ -192,7 +192,8 @@ public class SOAPConnector {
 
                 SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(null, is);
                 if (soapMessage.getSOAPBody().hasFault()) {
-                    String soapError = getSOAPElement(soapMessage, "errorCode").orElse("unknown");
+                    String soapError = Objects
+                            .requireNonNull(getSOAPElement(soapMessage, "errorCode").orElse("unknown"));
                     String soapReason = getSOAPElement(soapMessage, "errorDescription").orElse("unknown");
                     String error = String.format("HTTP-Response-Code %d (%s), SOAP-Fault: %s (%s)",
                             response.getStatus(), response.getReason(), soapError, soapReason);
index 3caf6363f406fd3c58ed5f4f83e7a2f422245bad..959b20c776e284d543f77fc25b9b621e4be5e23a 100644 (file)
@@ -150,7 +150,8 @@ public class UpnpEntry {
      * @return a URI for this entry. Thumbnail resources are not considered.
      */
     public String getRes() {
-        return resList.stream().filter(res -> !res.isThumbnailRes()).map(UpnpEntryRes::getRes).findAny().orElse("");
+        return Objects.requireNonNull(
+                resList.stream().filter(res -> !res.isThumbnailRes()).map(UpnpEntryRes::getRes).findAny().orElse(""));
     }
 
     public List<String> getProtocolList() {
index 73b375d2b90dd15f8d55f322d022afdd14837d7a..b4f4d6040970fe3f81bdac9b5d381c62e1014cb8 100644 (file)
@@ -15,7 +15,6 @@ package org.openhab.binding.volvooncall.internal.dto;
 import static org.openhab.binding.volvooncall.internal.VolvoOnCallBindingConstants.UNDEFINED;
 
 import java.util.List;
-import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
@@ -63,32 +62,32 @@ public class Status extends VocAnswer {
     public String serviceWarningStatus = "";
     private @NonNullByDefault({}) List<Object> bulbFailures;
 
-    public Optional<WindowsStatus> getWindows() {
-        return Optional.ofNullable(windows);
+    public @Nullable WindowsStatus getWindows() {
+        return windows;
     }
 
-    public Optional<DoorsStatus> getDoors() {
-        return Optional.ofNullable(doors);
+    public @Nullable DoorsStatus getDoors() {
+        return doors;
     }
 
-    public Optional<TyrePressure> getTyrePressure() {
-        return Optional.ofNullable(tyrePressure);
+    public @Nullable TyrePressure getTyrePressure() {
+        return tyrePressure;
     }
 
-    public Optional<HvBattery> getHvBattery() {
-        return Optional.ofNullable(hvBattery);
+    public @Nullable HvBattery getHvBattery() {
+        return hvBattery;
     }
 
-    public Optional<Heater> getHeater() {
-        return Optional.ofNullable(heater);
+    public @Nullable Heater getHeater() {
+        return heater;
     }
 
-    public Optional<OnOffType> getCarLocked() {
-        return Optional.ofNullable(carLocked);
+    public @Nullable OnOffType getCarLocked() {
+        return carLocked;
     }
 
-    public Optional<OnOffType> getEngineRunning() {
-        return Optional.ofNullable(engineRunning);
+    public @Nullable OnOffType getEngineRunning() {
+        return engineRunning;
     }
 
     public boolean aFailedBulb() {
index 4f78ec4f57f7825f830f9d52d7db67b2ba5f4ea0..01d0c190214eebc14152d7c0903d570f6e41b08f 100644 (file)
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Stack;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
@@ -207,8 +208,9 @@ public class VehicleHandler extends BaseThingHandler {
                 // We will update trips only if car position has changed to save server queries
                 updateTrips(service);
             }
-            if (!vehicleStatus.getEngineRunning().equals(newVehicleStatus.getEngineRunning())
-                    && newVehicleStatus.getEngineRunning().get() == OnOffType.ON) {
+            OnOffType newEngineRunning = newVehicleStatus.getEngineRunning();
+            if (newEngineRunning != null && !newEngineRunning.equals(vehicleStatus.getEngineRunning())
+                    && newEngineRunning == OnOffType.ON) {
                 triggerChannel(GROUP_OTHER + "#" + CAR_EVENT, EVENT_CAR_STARTED);
             }
             vehicleStatus = newVehicleStatus;
@@ -286,9 +288,9 @@ public class VehicleHandler extends BaseThingHandler {
     private State getTripValue(String channelId, TripDetail tripDetails) {
         switch (channelId) {
             case TRIP_CONSUMPTION:
-                return tripDetails.getFuelConsumption()
+                return Objects.requireNonNull(tripDetails.getFuelConsumption()
                         .map(value -> (State) new QuantityType<>(value.floatValue() / 100, LITRE))
-                        .orElse(UnDefType.UNDEF);
+                        .orElse(UnDefType.UNDEF));
             case TRIP_DISTANCE:
                 return new QuantityType<>((double) tripDetails.distance / 1000, KILO(METRE));
             case TRIP_START_TIME:
@@ -296,8 +298,8 @@ public class VehicleHandler extends BaseThingHandler {
             case TRIP_END_TIME:
                 return tripDetails.getEndTime();
             case TRIP_DURATION:
-                return tripDetails.getDurationInMinutes().map(value -> (State) new QuantityType<>(value, MINUTE))
-                        .orElse(UnDefType.UNDEF);
+                return Objects.requireNonNull(tripDetails.getDurationInMinutes()
+                        .map(value -> (State) new QuantityType<>(value, MINUTE)).orElse(UnDefType.UNDEF));
             case TRIP_START_ODOMETER:
                 return new QuantityType<>((double) tripDetails.startOdometer / 1000, KILO(METRE));
             case TRIP_STOP_ODOMETER:
@@ -435,9 +437,9 @@ public class VehicleHandler extends BaseThingHandler {
             case CAR_LOCKED:
                 // Warning : carLocked is in the Doors group but is part of general status informations.
                 // Did not change it to avoid breaking change for users
-                return status.getCarLocked().map(State.class::cast).orElse(UnDefType.UNDEF);
+                return Objects.requireNonNullElse((State) status.getCarLocked(), UnDefType.UNDEF);
             case ENGINE_RUNNING:
-                return status.getEngineRunning().map(State.class::cast).orElse(UnDefType.UNDEF);
+                return Objects.requireNonNullElse((State) status.getEngineRunning(), UnDefType.UNDEF);
             case BRAKE_FLUID_LEVEL:
                 return fluidLevelToState(status.brakeFluidLevel);
             case WASHER_FLUID_LEVEL:
@@ -451,7 +453,8 @@ public class VehicleHandler extends BaseThingHandler {
                 return OnOffType.from(status.aFailedBulb());
             case REMOTE_HEATER:
             case PRECLIMATIZATION:
-                return status.getHeater().map(heater -> getHeaterValue(channelId, heater)).orElse(UnDefType.NULL);
+                Heater heater = status.getHeater();
+                return heater != null ? getHeaterValue(channelId, heater) : UnDefType.NULL;
         }
         switch (groupId) {
             case GROUP_TANK:
@@ -461,14 +464,17 @@ public class VehicleHandler extends BaseThingHandler {
             case GROUP_POSITION:
                 return getPositionValue(channelId, position);
             case GROUP_DOORS:
-                return status.getDoors().map(doors -> getDoorsValue(channelId, doors)).orElse(UnDefType.NULL);
+                DoorsStatus doors = status.getDoors();
+                return doors != null ? getDoorsValue(channelId, doors) : UnDefType.NULL;
             case GROUP_WINDOWS:
-                return status.getWindows().map(windows -> getWindowsValue(channelId, windows)).orElse(UnDefType.NULL);
+                WindowsStatus windows = status.getWindows();
+                return windows != null ? getWindowsValue(channelId, windows) : UnDefType.NULL;
             case GROUP_TYRES:
-                return status.getTyrePressure().map(tyres -> getTyresValue(channelId, tyres)).orElse(UnDefType.NULL);
+                TyrePressure tyres = status.getTyrePressure();
+                return tyres != null ? getTyresValue(channelId, tyres) : UnDefType.NULL;
             case GROUP_BATTERY:
-                return status.getHvBattery().map(batteries -> getBatteryValue(channelId, batteries))
-                        .orElse(UnDefType.NULL);
+                HvBattery batteries = status.getHvBattery();
+                return batteries != null ? getBatteryValue(channelId, batteries) : UnDefType.NULL;
         }
         return UnDefType.NULL;
     }
@@ -564,7 +570,7 @@ public class VehicleHandler extends BaseThingHandler {
 
     public void actionOpenClose(String action, OnOffType controlState) {
         if (activeOptions.containsKey(action)) {
-            if (vehicleStatus.getCarLocked().isEmpty() || vehicleStatus.getCarLocked().get() != controlState) {
+            if (vehicleStatus.getCarLocked() == null || vehicleStatus.getCarLocked() != controlState) {
                 post(String.format("vehicles/%s/%s", configuration.vin, action), "{}");
             } else {
                 logger.info("The car {} is already {}ed", configuration.vin, action);
index aee786ad666e98aec5b24c7bced4ea8b909d1f9e..1fdfe7e27f6d23c19b854a5e2874463efe9fb509 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.binding.volvooncall.internal.wrapper;
 
 import java.time.ZoneId;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -33,18 +34,18 @@ import org.openhab.core.types.UnDefType;
  */
 @NonNullByDefault
 public class VehiclePositionWrapper {
-    private final Optional<PositionData> position;
+    private final @Nullable PositionData position;
     private boolean isCalculated;
 
     public VehiclePositionWrapper(Position vehicle) {
         if (vehicle.calculatedPosition != null && vehicle.position.latitude != null) {
-            position = Optional.of(vehicle.position);
+            position = vehicle.position;
             isCalculated = false;
         } else if (vehicle.calculatedPosition != null && vehicle.calculatedPosition.latitude != null) {
-            position = Optional.of(vehicle.calculatedPosition);
+            position = vehicle.calculatedPosition;
             isCalculated = true;
         } else {
-            position = Optional.empty();
+            position = null;
         }
     }
 
@@ -56,15 +57,17 @@ public class VehiclePositionWrapper {
     }
 
     public State getPosition() {
-        return position.map(pos -> getPositionAsState(pos)).orElse(UnDefType.UNDEF);
+        PositionData position = this.position;
+        return position != null ? getPositionAsState(position) : UnDefType.UNDEF;
     }
 
     public @Nullable String getPositionAsJSon() {
-        if (getPosition() != UnDefType.UNDEF) {
+        PositionData position = this.position;
+        if (position != null) {
             StringBuilder json = new StringBuilder("{\"clientLatitude\":");
-            json.append(position.get().latitude);
+            json.append(position.latitude);
             json.append(",\"clientLongitude\":");
-            json.append(position.get().longitude);
+            json.append(position.longitude);
             json.append(",\"clientAccuracy\":0}");
 
             return json.toString();
@@ -73,16 +76,17 @@ public class VehiclePositionWrapper {
     }
 
     public State isCalculated() {
-        return position.map(pos -> (State) OnOffType.from(isCalculated)).orElse(UnDefType.UNDEF);
+        return position != null ? (State) OnOffType.from(isCalculated) : UnDefType.UNDEF;
     }
 
     public State isHeading() {
-        return position.map(pos -> (State) OnOffType.from(pos.isHeading())).orElse(UnDefType.UNDEF);
+        PositionData position = this.position;
+        return position != null ? (State) OnOffType.from(position.isHeading()) : UnDefType.UNDEF;
     }
 
     public State getTimestamp() {
-        return position.flatMap(pos -> pos.getTimestamp())
+        return Objects.requireNonNull(Optional.ofNullable(this.position).flatMap(pos -> pos.getTimestamp())
                 .map(dt -> (State) new DateTimeType(dt.withZoneSameInstant(ZoneId.systemDefault())))
-                .orElse(UnDefType.NULL);
+                .orElse(UnDefType.NULL));
     }
 }
index 9968d3e4db2c481f55872bde08db700a1daf8051..f84d11f0ff021586e575c16d0b78b46ad30f1663 100644 (file)
@@ -251,8 +251,8 @@ public class HomekitAccessoryFactory {
                     HomekitAccessoryType type = accessoryType.get();
                     if (meta.length > 1) {
                         // it has characteristic as well
-                        accessories.add(new SimpleEntry<>(type,
-                                HomekitCharacteristicType.valueOfTag(meta[1].trim()).orElse(EMPTY)));
+                        accessories.add(new SimpleEntry<>(type, Objects
+                                .requireNonNull(HomekitCharacteristicType.valueOfTag(meta[1].trim()).orElse(EMPTY))));
                     } else {// it has no characteristic
                         accessories.add(new SimpleEntry<>(type, EMPTY));
                     }
index 210859c4481c15c0963ac1abd1a901d6fe423595..3fbe95d140e2ad3f967b79f216a8d4c72fc26007 100644 (file)
@@ -13,7 +13,6 @@
 package org.openhab.persistence.influxdb.internal;
 
 import java.util.Map;
-import java.util.Optional;
 import java.util.StringJoiner;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -69,7 +68,7 @@ public class InfluxDBConfiguration {
 
     private InfluxDBVersion parseInfluxVersion(@Nullable String value) {
         try {
-            return Optional.ofNullable(value).map(InfluxDBVersion::valueOf).orElse(InfluxDBVersion.UNKNOWN);
+            return value != null ? InfluxDBVersion.valueOf(value) : InfluxDBVersion.UNKNOWN;
         } catch (RuntimeException e) {
             logger.warn("Invalid version {}", value);
             return InfluxDBVersion.UNKNOWN;
index a155dfcd1e58bb5bc31c2e8dde8f644eebb2f3ff..f5df1dbf8609cf0a7b66850c05c21a2b5c3803f7 100644 (file)
@@ -16,6 +16,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -125,8 +126,9 @@ public class JdbcConfiguration {
         logger.debug("JDBC::updateConfig: url={}", url);
 
         // set database type and database type class
-        setDBDAOClass(parsedURL.getProperty("dbShortcut")); // derby, h2, hsqldb, mariadb, mysql, postgresql,
-                                                            // sqlite, timescaledb
+        setDBDAOClass(Objects.requireNonNull(parsedURL.getProperty("dbShortcut"))); // derby, h2, hsqldb, mariadb,
+                                                                                    // mysql, postgresql,
+        // sqlite, timescaledb
         // set user
         if (user != null && !user.isBlank()) {
             dBDAO.databaseProps.setProperty("dataSource.user", user);
@@ -234,7 +236,7 @@ public class JdbcConfiguration {
         }
 
         // test if JDBC driver bundle is available
-        testJDBCDriver(dn);
+        testJDBCDriver(Objects.requireNonNull(dn));
 
         logger.debug("JDBC::updateConfig: configuration complete. service={}", getName());
 
index a483adc0024ca684358227c46f0665fb1fa8b6b8..f1f0f33dc8efed5a941ddbbef3e5280d69e432ef 100644 (file)
@@ -24,6 +24,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -134,7 +135,7 @@ public class ScaleTransformationService
         }
 
         @Override
-        public @Nullable Object put(@Nullable Object key, @Nullable Object value) {
+        public @Nullable Object put(Object key, Object value) {
             keys.add(key);
             return super.put(key, value);
         }
@@ -207,8 +208,8 @@ public class ScaleTransformationService
                 properties.load(new StringReader(function));
 
                 for (Object orderedKey : properties.orderedKeys()) {
-                    final String entry = (String) orderedKey;
-                    final String value = properties.getProperty(entry);
+                    final String entry = Objects.requireNonNull((String) orderedKey);
+                    final String value = Objects.requireNonNull(properties.getProperty(entry));
                     final Matcher matcher = LIMITS_PATTERN.matcher(entry);
                     if (matcher.matches() && (matcher.groupCount() == 4)) {
                         final boolean lowerInclusive = "[".equals(matcher.group(1));
index ee1598d685b0e13f75127688e198f20ae174377d..4fbe50fc299b5882a2abdd30fc81288cdb643e03 100644 (file)
@@ -107,7 +107,7 @@ public class InputStreamAudioStream extends AudioStream implements SizeableAudio
     }
 
     @Override
-    public long transferTo(@Nullable OutputStream out) throws IOException {
+    public long transferTo(OutputStream out) throws IOException {
         return innerInputStream.transferTo(out);
     }
 
index 7614253accc7cb1ab1f59e16cd979385a315e907..b877fc427510ff116136d6008296b43103f28b28 100644 (file)
@@ -106,7 +106,7 @@ public class PollyTTSAudioStream extends AudioStream {
     }
 
     @Override
-    public long transferTo(@Nullable OutputStream out) throws IOException {
+    public long transferTo(OutputStream out) throws IOException {
         return innerInputStream.transferTo(out);
     }
 }
diff --git a/pom.xml b/pom.xml
index 9ed2fa04c63652466cebb360858757bb0a60d81c..c760b31437a350e423dffe05bf24ae1ed61ca0ef 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
     <ohc.version>4.3.0-SNAPSHOT</ohc.version>
     <bnd.version>7.0.0</bnd.version>
     <commons.net.version>3.9.0</commons.net.version>
-    <eea.version>2.2.1</eea.version>
+    <eea.version>2.4.0</eea.version>
     <jackson.version>2.17.1</jackson.version>
     <jna.version>5.14.0</jna.version>
     <karaf.version>4.4.6</karaf.version>