From b70d3b11845642223be86fc4e474177fa23928c3 Mon Sep 17 00:00:00 2001 From: Jacob Laursen Date: Mon, 13 May 2024 22:51:04 +0200 Subject: [PATCH] [denonmarantz] Add null annotations (#16757) * Add null annotations Signed-off-by: Jacob Laursen --- .../DenonMarantzBindingConstants.java | 2 + .../internal/DenonMarantzState.java | 124 +++++++++--------- .../UnsupportedCommandTypeException.java | 3 + .../config/DenonMarantzConfiguration.java | 30 ++--- .../connector/DenonMarantzConnector.java | 9 ++ .../DenonMarantzConnectorFactory.java | 5 +- .../http/DenonMarantzHttpConnector.java | 54 +++++--- .../DenonMarantzTelnetClientThread.java | 28 ++-- .../telnet/DenonMarantzTelnetConnector.java | 30 +++-- .../telnet/DenonMarantzTelnetListener.java | 3 + .../internal/xml/adapters/OnOffAdapter.java | 10 +- .../internal/xml/adapters/StringAdapter.java | 10 +- .../internal/xml/adapters/VolumeAdapter.java | 10 +- .../xml/{entities => dto}/Deviceinfo.java | 2 +- .../internal/xml/{entities => dto}/Main.java | 4 +- .../xml/{entities => dto}/ZoneStatus.java | 8 +- .../xml/{entities => dto}/ZoneStatusLite.java | 8 +- .../commands/AppCommandRequest.java | 5 +- .../commands/AppCommandResponse.java | 5 +- .../{entities => dto}/commands/CommandRx.java | 9 +- .../{entities => dto}/commands/CommandTx.java | 2 +- .../commands/DeletedSourceList.java | 2 +- .../commands/RenameSourceList.java | 2 +- .../xml/{entities => dto}/commands/Text.java | 2 +- .../{entities => dto}/types/OnOffType.java | 2 +- .../{entities => dto}/types/StringType.java | 2 +- .../{entities => dto}/types/VolumeType.java | 2 +- 27 files changed, 219 insertions(+), 154 deletions(-) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/Deviceinfo.java (94%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/Main.java (86%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/ZoneStatus.java (88%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/ZoneStatusLite.java (85%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/AppCommandRequest.java (90%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/AppCommandResponse.java (89%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/CommandRx.java (93%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/CommandTx.java (96%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/DeletedSourceList.java (93%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/RenameSourceList.java (92%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/commands/Text.java (94%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/types/OnOffType.java (93%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/types/StringType.java (93%) rename bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/{entities => dto}/types/VolumeType.java (93%) diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzBindingConstants.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzBindingConstants.java index 8da35e9163..ae29e8523c 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzBindingConstants.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzBindingConstants.java @@ -17,6 +17,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.type.ChannelTypeUID; @@ -26,6 +27,7 @@ import org.openhab.core.thing.type.ChannelTypeUID; * * @author Jan-Willem Veldhuis - Initial contribution */ +@NonNullByDefault public class DenonMarantzBindingConstants { public static final String BINDING_ID = "denonmarantz"; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzState.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzState.java index 63de251768..d79e8e263c 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzState.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/DenonMarantzState.java @@ -14,6 +14,8 @@ package org.openhab.binding.denonmarantz.internal; import java.math.BigDecimal; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.PercentType; @@ -26,38 +28,39 @@ import org.openhab.core.types.State; * @author Jan-Willem Veldhuis - Initial contribution * */ +@NonNullByDefault public class DenonMarantzState { - private State power; - private State mainZonePower; - private State mute; - private State mainVolume; - private State mainVolumeDB; - private State input; - private State surroundProgram; + private @Nullable State power; + private @Nullable State mainZonePower; + private @Nullable State mute; + private @Nullable State mainVolume; + private @Nullable State mainVolumeDB; + private @Nullable State input; + private @Nullable State surroundProgram; - private State artist; - private State album; - private State track; + private @Nullable State artist; + private @Nullable State album; + private @Nullable State track; // ------ Zones ------ - private State zone2Power; - private State zone2Volume; - private State zone2VolumeDB; - private State zone2Mute; - private State zone2Input; - - private State zone3Power; - private State zone3Volume; - private State zone3VolumeDB; - private State zone3Mute; - private State zone3Input; - - private State zone4Power; - private State zone4Volume; - private State zone4VolumeDB; - private State zone4Mute; - private State zone4Input; + private @Nullable State zone2Power; + private @Nullable State zone2Volume; + private @Nullable State zone2VolumeDB; + private @Nullable State zone2Mute; + private @Nullable State zone2Input; + + private @Nullable State zone3Power; + private @Nullable State zone3Volume; + private @Nullable State zone3VolumeDB; + private @Nullable State zone3Mute; + private @Nullable State zone3Input; + + private @Nullable State zone4Power; + private @Nullable State zone4Volume; + private @Nullable State zone4VolumeDB; + private @Nullable State zone4Mute; + private @Nullable State zone4Input; private DenonMarantzStateChangedListener handler; @@ -69,7 +72,7 @@ public class DenonMarantzState { handler.connectionError(errorMessage); } - public State getStateForChannelID(String channelID) { + public @Nullable State getStateForChannelID(String channelID) { switch (channelID) { case DenonMarantzBindingConstants.CHANNEL_POWER: return power; @@ -135,7 +138,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(power); if (newVal != this.power) { this.power = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_POWER, this.power); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_POWER, newVal); } } @@ -143,7 +146,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(mainPower); if (newVal != this.mainZonePower) { this.mainZonePower = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_ZONE_POWER, this.mainZonePower); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_ZONE_POWER, newVal); } } @@ -151,7 +154,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(mute); if (newVal != this.mute) { this.mute = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MUTE, this.mute); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MUTE, newVal); } } @@ -159,10 +162,11 @@ public class DenonMarantzState { PercentType newVal = new PercentType(volume); if (!newVal.equals(this.mainVolume)) { this.mainVolume = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_VOLUME, this.mainVolume); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_VOLUME, newVal); // update the main volume in dB too - this.mainVolumeDB = DecimalType.valueOf(volume.subtract(DenonMarantzBindingConstants.DB_OFFSET).toString()); - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_VOLUME_DB, this.mainVolumeDB); + State mainVolumeDB = this.mainVolumeDB = DecimalType + .valueOf(volume.subtract(DenonMarantzBindingConstants.DB_OFFSET).toString()); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_MAIN_VOLUME_DB, mainVolumeDB); } } @@ -170,7 +174,7 @@ public class DenonMarantzState { StringType newVal = StringType.valueOf(input); if (!newVal.equals(this.input)) { this.input = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_INPUT, this.input); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_INPUT, newVal); } } @@ -178,31 +182,31 @@ public class DenonMarantzState { StringType newVal = StringType.valueOf(surroundProgram); if (!newVal.equals(this.surroundProgram)) { this.surroundProgram = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_SURROUND_PROGRAM, this.surroundProgram); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_SURROUND_PROGRAM, newVal); } } public void setNowPlayingArtist(String artist) { - StringType newVal = artist == null || artist.isBlank() ? StringType.EMPTY : StringType.valueOf(artist); + StringType newVal = artist.isBlank() ? StringType.EMPTY : StringType.valueOf(artist); if (!newVal.equals(this.artist)) { this.artist = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_ARTIST, this.artist); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_ARTIST, newVal); } } public void setNowPlayingAlbum(String album) { - StringType newVal = album == null || album.isBlank() ? StringType.EMPTY : StringType.valueOf(album); + StringType newVal = album.isBlank() ? StringType.EMPTY : StringType.valueOf(album); if (!newVal.equals(this.album)) { this.album = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_ALBUM, this.album); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_ALBUM, newVal); } } public void setNowPlayingTrack(String track) { - StringType newVal = track == null || track.isBlank() ? StringType.EMPTY : StringType.valueOf(track); + StringType newVal = track.isBlank() ? StringType.EMPTY : StringType.valueOf(track); if (!newVal.equals(this.track)) { this.track = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_TRACK, this.track); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_NOW_PLAYING_TRACK, newVal); } } @@ -210,7 +214,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(power); if (newVal != this.zone2Power) { this.zone2Power = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_POWER, this.zone2Power); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_POWER, newVal); } } @@ -218,11 +222,11 @@ public class DenonMarantzState { PercentType newVal = new PercentType(volume); if (!newVal.equals(this.zone2Volume)) { this.zone2Volume = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_VOLUME, this.zone2Volume); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_VOLUME, newVal); // update the volume in dB too - this.zone2VolumeDB = DecimalType + State zone2VolumeDB = this.zone2VolumeDB = DecimalType .valueOf(volume.subtract(DenonMarantzBindingConstants.DB_OFFSET).toString()); - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_VOLUME_DB, this.zone2VolumeDB); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_VOLUME_DB, zone2VolumeDB); } } @@ -230,7 +234,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(mute); if (newVal != this.zone2Mute) { this.zone2Mute = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_MUTE, this.zone2Mute); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_MUTE, newVal); } } @@ -238,7 +242,7 @@ public class DenonMarantzState { StringType newVal = StringType.valueOf(zone2Input); if (!newVal.equals(this.zone2Input)) { this.zone2Input = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_INPUT, this.zone2Input); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_INPUT, newVal); } } @@ -246,7 +250,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(power); if (newVal != this.zone3Power) { this.zone3Power = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_POWER, this.zone3Power); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_POWER, newVal); } } @@ -254,11 +258,11 @@ public class DenonMarantzState { PercentType newVal = new PercentType(volume); if (!newVal.equals(this.zone3Volume)) { this.zone3Volume = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_VOLUME, this.zone3Volume); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_VOLUME, newVal); // update the volume in dB too - this.zone3VolumeDB = DecimalType + State zone3VolumeDB = this.zone3VolumeDB = DecimalType .valueOf(volume.subtract(DenonMarantzBindingConstants.DB_OFFSET).toString()); - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_VOLUME_DB, this.zone3VolumeDB); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_VOLUME_DB, zone3VolumeDB); } } @@ -266,7 +270,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(mute); if (newVal != this.zone3Mute) { this.zone3Mute = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_MUTE, this.zone3Mute); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE3_MUTE, newVal); } } @@ -274,7 +278,7 @@ public class DenonMarantzState { StringType newVal = StringType.valueOf(zone3Input); if (!newVal.equals(this.zone3Input)) { this.zone3Input = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_INPUT, this.zone3Input); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE2_INPUT, newVal); } } @@ -282,7 +286,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(power); if (newVal != this.zone4Power) { this.zone4Power = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_POWER, this.zone4Power); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_POWER, newVal); } } @@ -290,11 +294,11 @@ public class DenonMarantzState { PercentType newVal = new PercentType(volume); if (!newVal.equals(this.zone4Volume)) { this.zone4Volume = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_VOLUME, this.zone4Volume); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_VOLUME, newVal); // update the volume in dB too - this.zone4VolumeDB = DecimalType + State zone4VolumeDB = this.zone4VolumeDB = DecimalType .valueOf(volume.subtract(DenonMarantzBindingConstants.DB_OFFSET).toString()); - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_VOLUME_DB, this.zone4VolumeDB); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_VOLUME_DB, zone4VolumeDB); } } @@ -302,7 +306,7 @@ public class DenonMarantzState { OnOffType newVal = OnOffType.from(mute); if (newVal != this.zone4Mute) { this.zone4Mute = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_MUTE, this.zone4Mute); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_MUTE, newVal); } } @@ -310,7 +314,7 @@ public class DenonMarantzState { StringType newVal = StringType.valueOf(zone4Input); if (!newVal.equals(this.zone4Input)) { this.zone4Input = newVal; - handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_INPUT, this.zone4Input); + handler.stateChanged(DenonMarantzBindingConstants.CHANNEL_ZONE4_INPUT, newVal); } } } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/UnsupportedCommandTypeException.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/UnsupportedCommandTypeException.java index c2a070d815..c14130ba81 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/UnsupportedCommandTypeException.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/UnsupportedCommandTypeException.java @@ -12,12 +12,15 @@ */ package org.openhab.binding.denonmarantz.internal; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Exception thrown when an unsupported command type is sent to a channel. * * @author Jan-Willem Veldhuis - Initial contribution * */ +@NonNullByDefault public class UnsupportedCommandTypeException extends Exception { private static final long serialVersionUID = 42L; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/config/DenonMarantzConfiguration.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/config/DenonMarantzConfiguration.java index 2e86c789c0..6c2514d516 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/config/DenonMarantzConfiguration.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/config/DenonMarantzConfiguration.java @@ -15,7 +15,8 @@ package org.openhab.binding.denonmarantz.internal.config; import java.math.BigDecimal; import java.util.List; -import org.openhab.binding.denonmarantz.internal.connector.DenonMarantzConnector; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; /** * Configuration class for the Denon Marantz binding. @@ -23,43 +24,42 @@ import org.openhab.binding.denonmarantz.internal.connector.DenonMarantzConnector * @author Jan-Willem Veldhuis - Initial contribution * */ +@NonNullByDefault public class DenonMarantzConfiguration { /** * The hostname (or IP Address) of the Denon Marantz AVR */ - public String host; + public String host = ""; /** * Whether Telnet communication is enabled */ - public Boolean telnetEnabled; + public @Nullable Boolean telnetEnabled; /** * The telnet port */ - public Integer telnetPort; + public Integer telnetPort = 23; /** * The HTTP port */ - public Integer httpPort; + public Integer httpPort = 80; /** * The interval to poll the AVR over HTTP for changes */ - public Integer httpPollingInterval; + public Integer httpPollingInterval = 5; // Default maximum volume public static final BigDecimal MAX_VOLUME = new BigDecimal("98"); - private DenonMarantzConnector connector; - - private Integer zoneCount; + private Integer zoneCount = 2; private BigDecimal mainVolumeMax = MAX_VOLUME; - public List inputOptions; + public @Nullable List inputOptions; public String getHost() { return host; @@ -69,7 +69,7 @@ public class DenonMarantzConfiguration { this.host = host; } - public Boolean isTelnet() { + public @Nullable Boolean isTelnet() { return telnetEnabled; } @@ -93,14 +93,6 @@ public class DenonMarantzConfiguration { this.httpPort = httpPort; } - public DenonMarantzConnector getConnector() { - return connector; - } - - public void setConnector(DenonMarantzConnector connector) { - this.connector = connector; - } - public BigDecimal getMainVolumeMax() { return mainVolumeMax; } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnector.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnector.java index d46bdea2d2..c9d99c0d59 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnector.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnector.java @@ -18,6 +18,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.concurrent.ScheduledExecutorService; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.denonmarantz.internal.DenonMarantzState; import org.openhab.binding.denonmarantz.internal.UnsupportedCommandTypeException; import org.openhab.binding.denonmarantz.internal.config.DenonMarantzConfiguration; @@ -34,6 +35,7 @@ import org.openhab.core.types.RefreshType; * * @author Jan-Willem Veldhuis - Initial contribution */ +@NonNullByDefault public abstract class DenonMarantzConnector { private static final BigDecimal POINTFIVE = new BigDecimal("0.5"); @@ -47,6 +49,13 @@ public abstract class DenonMarantzConnector { protected abstract void internalSendCommand(String command); + public DenonMarantzConnector(DenonMarantzConfiguration config, ScheduledExecutorService scheduler, + DenonMarantzState state) { + this.config = config; + this.scheduler = scheduler; + this.state = state; + } + public void sendCustomCommand(Command command) throws UnsupportedCommandTypeException { String cmd; if (command instanceof StringType) { diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnectorFactory.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnectorFactory.java index 403e97427e..8aaeefac8f 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnectorFactory.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/DenonMarantzConnectorFactory.java @@ -14,6 +14,7 @@ package org.openhab.binding.denonmarantz.internal.connector; import java.util.concurrent.ScheduledExecutorService; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jetty.client.HttpClient; import org.openhab.binding.denonmarantz.internal.DenonMarantzState; import org.openhab.binding.denonmarantz.internal.config.DenonMarantzConfiguration; @@ -26,11 +27,13 @@ import org.openhab.binding.denonmarantz.internal.connector.telnet.DenonMarantzTe * * @author Jan-Willem Veldhuis - Initial contribution */ +@NonNullByDefault public class DenonMarantzConnectorFactory { public DenonMarantzConnector getConnector(DenonMarantzConfiguration config, DenonMarantzState state, ScheduledExecutorService scheduler, HttpClient httpClient, String thingUID) { - if (config.isTelnet()) { + Boolean isTelnet = config.isTelnet(); + if (isTelnet != null && isTelnet) { return new DenonMarantzTelnetConnector(config, state, scheduler, thingUID); } else { return new DenonMarantzHttpConnector(config, state, scheduler, httpClient); diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/http/DenonMarantzHttpConnector.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/http/DenonMarantzHttpConnector.java index 7a4a5ac079..37be5ec307 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/http/DenonMarantzHttpConnector.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/http/DenonMarantzHttpConnector.java @@ -32,6 +32,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.util.StreamReaderDelegate; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.Response; @@ -39,14 +40,14 @@ import org.eclipse.jetty.client.api.Result; import org.openhab.binding.denonmarantz.internal.DenonMarantzState; import org.openhab.binding.denonmarantz.internal.config.DenonMarantzConfiguration; import org.openhab.binding.denonmarantz.internal.connector.DenonMarantzConnector; -import org.openhab.binding.denonmarantz.internal.xml.entities.Deviceinfo; -import org.openhab.binding.denonmarantz.internal.xml.entities.Main; -import org.openhab.binding.denonmarantz.internal.xml.entities.ZoneStatus; -import org.openhab.binding.denonmarantz.internal.xml.entities.ZoneStatusLite; -import org.openhab.binding.denonmarantz.internal.xml.entities.commands.AppCommandRequest; -import org.openhab.binding.denonmarantz.internal.xml.entities.commands.AppCommandResponse; -import org.openhab.binding.denonmarantz.internal.xml.entities.commands.CommandRx; -import org.openhab.binding.denonmarantz.internal.xml.entities.commands.CommandTx; +import org.openhab.binding.denonmarantz.internal.xml.dto.Deviceinfo; +import org.openhab.binding.denonmarantz.internal.xml.dto.Main; +import org.openhab.binding.denonmarantz.internal.xml.dto.ZoneStatus; +import org.openhab.binding.denonmarantz.internal.xml.dto.ZoneStatusLite; +import org.openhab.binding.denonmarantz.internal.xml.dto.commands.AppCommandRequest; +import org.openhab.binding.denonmarantz.internal.xml.dto.commands.AppCommandResponse; +import org.openhab.binding.denonmarantz.internal.xml.dto.commands.CommandRx; +import org.openhab.binding.denonmarantz.internal.xml.dto.commands.CommandTx; import org.openhab.core.io.net.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +60,7 @@ import org.slf4j.LoggerFactory; * @author Jeroen Idserda - Initial Contribution (1.x Binding) * @author Jan-Willem Veldhuis - Refactored for 2.x */ +@NonNullByDefault public class DenonMarantzHttpConnector extends DenonMarantzConnector { private Logger logger = LoggerFactory.getLogger(DenonMarantzHttpConnector.class); @@ -88,13 +90,11 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector { private final HttpClient httpClient; - private ScheduledFuture pollingJob; + private @Nullable ScheduledFuture pollingJob; public DenonMarantzHttpConnector(DenonMarantzConfiguration config, DenonMarantzState state, ScheduledExecutorService scheduler, HttpClient httpClient) { - this.config = config; - this.scheduler = scheduler; - this.state = state; + super(config, scheduler, state); this.cmdUrl = String.format("http://%s:%d/goform/formiPhoneAppDirect.xml?", config.getHost(), config.getHttpPort()); this.statusUrl = String.format("http://%s:%d/goform/", config.getHost(), config.getHttpPort()); @@ -143,11 +143,13 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector { } private boolean isPolling() { + ScheduledFuture pollingJob = this.pollingJob; return pollingJob != null && !pollingJob.isCancelled(); } private void stopPolling() { - if (isPolling()) { + ScheduledFuture pollingJob = this.pollingJob; + if (pollingJob != null) { pollingJob.cancel(true); logger.debug("HTTP polling stopped."); } @@ -166,7 +168,7 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector { @Override protected void internalSendCommand(String command) { logger.debug("Sending command '{}'", command); - if (command == null || command.isBlank()) { + if (command.isBlank()) { logger.warn("Trying to send empty command"); return; } @@ -176,8 +178,8 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector { httpClient.newRequest(url).timeout(5, TimeUnit.SECONDS).send(new Response.CompleteListener() { @Override - public void onComplete(Result result) { - if (result.getResponse().getStatus() != 200) { + public void onComplete(@Nullable Result result) { + if (result != null && result.getResponse().getStatus() != 200) { logger.warn("Error {} while sending command", result.getResponse().getReason()); } } @@ -255,11 +257,21 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector { AppCommandRequest request = AppCommandRequest.of(CommandTx.CMD_NET_STATUS); AppCommandResponse response = postDocument(url, AppCommandResponse.class, request); - if (response != null) { - CommandRx titleInfo = response.getCommands().get(0); - state.setNowPlayingArtist(titleInfo.getText("artist")); - state.setNowPlayingAlbum(titleInfo.getText("album")); - state.setNowPlayingTrack(titleInfo.getText("track")); + if (response == null) { + return; + } + CommandRx titleInfo = response.getCommands().get(0); + String artist = titleInfo.getText("artist"); + if (artist != null) { + state.setNowPlayingArtist(artist); + } + String album = titleInfo.getText("album"); + if (album != null) { + state.setNowPlayingAlbum(album); + } + String track = titleInfo.getText("track"); + if (track != null) { + state.setNowPlayingTrack(track); } } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetClientThread.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetClientThread.java index bd705523d4..69ac85b926 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetClientThread.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetClientThread.java @@ -20,6 +20,7 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.denonmarantz.internal.config.DenonMarantzConfiguration; import org.slf4j.Logger; @@ -31,6 +32,7 @@ import org.slf4j.LoggerFactory; * @author Jeroen Idserda - Initial contribution (1.x Binding) * @author Jan-Willem Veldhuis - Refactored for 2.x */ +@NonNullByDefault public class DenonMarantzTelnetClientThread extends Thread { private Logger logger = LoggerFactory.getLogger(DenonMarantzTelnetClientThread.class); @@ -45,9 +47,9 @@ public class DenonMarantzTelnetClientThread extends Thread { private boolean connected = false; - private Socket socket; + private @Nullable Socket socket; - private OutputStreamWriter out; + private @Nullable OutputStreamWriter out; private @Nullable BufferedReader in; @@ -84,12 +86,15 @@ public class DenonMarantzTelnetClientThread extends Thread { } catch (SocketTimeoutException e) { logger.trace("Socket timeout"); // Disconnects are not always detected unless you write to the socket. - try { - out.write('\r'); - out.flush(); - } catch (IOException e2) { - logger.debug("Error writing to socket"); - connected = false; + OutputStreamWriter out = this.out; + if (out != null) { + try { + out.write('\r'); + out.flush(); + } catch (IOException e2) { + logger.debug("Error writing to socket"); + connected = false; + } } } catch (IOException e) { if (!isInterrupted()) { @@ -106,6 +111,7 @@ public class DenonMarantzTelnetClientThread extends Thread { } public void sendCommand(String command) { + OutputStreamWriter out = this.out; if (out != null) { try { out.write(command + '\r'); @@ -126,6 +132,7 @@ public class DenonMarantzTelnetClientThread extends Thread { disconnect(); int delay = 0; + Socket socket = this.socket; while (!isInterrupted() && (socket == null || !socket.isConnected())) { try { Thread.sleep(delay); @@ -134,7 +141,7 @@ public class DenonMarantzTelnetClientThread extends Thread { // Use raw socket instead of TelnetClient here because TelnetClient sends an // extra newline char after each write which causes the connection to become // unresponsive. - socket = new Socket(); + socket = this.socket = new Socket(); socket.connect(new InetSocketAddress(config.getHost(), config.getTelnetPort()), TIMEOUT); socket.setKeepAlive(true); socket.setSoTimeout(TIMEOUT); @@ -161,6 +168,7 @@ public class DenonMarantzTelnetClientThread extends Thread { } private void disconnect() { + Socket socket = this.socket; if (socket != null) { logger.debug("Disconnecting socket"); try { @@ -168,7 +176,7 @@ public class DenonMarantzTelnetClientThread extends Thread { } catch (IOException e) { logger.debug("Error while disconnecting telnet client", e); } finally { - socket = null; + this.socket = null; out = null; in = null; listener.telnetClientConnected(false); diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetConnector.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetConnector.java index c759a73710..562e1ce40f 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetConnector.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetConnector.java @@ -20,6 +20,8 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Pattern; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.denonmarantz.internal.DenonMarantzState; import org.openhab.binding.denonmarantz.internal.config.DenonMarantzConfiguration; import org.openhab.binding.denonmarantz.internal.connector.DenonMarantzConnector; @@ -33,6 +35,7 @@ import org.slf4j.LoggerFactory; * @author Jeroen Idserda - Initial Contribution (1.x Binding) * @author Jan-Willem Veldhuis - Refactored for 2.x */ +@NonNullByDefault public class DenonMarantzTelnetConnector extends DenonMarantzConnector implements DenonMarantzTelnetListener { private final Logger logger = LoggerFactory.getLogger(DenonMarantzTelnetConnector.class); @@ -45,21 +48,19 @@ public class DenonMarantzTelnetConnector extends DenonMarantzConnector implement private static final BigDecimal NINETYNINE = new BigDecimal("99"); - private DenonMarantzTelnetClientThread telnetClientThread; + private @Nullable DenonMarantzTelnetClientThread telnetClientThread; private boolean displayNowplaying = false; protected boolean disposing = false; - private Future telnetStateRequest; + private @Nullable Future telnetStateRequest; private String thingUID; public DenonMarantzTelnetConnector(DenonMarantzConfiguration config, DenonMarantzState state, ScheduledExecutorService scheduler, String thingUID) { - this.config = config; - this.scheduler = scheduler; - this.state = state; + super(config, scheduler, state); this.thingUID = thingUID; } @@ -68,7 +69,8 @@ public class DenonMarantzTelnetConnector extends DenonMarantzConnector implement */ @Override public void connect() { - telnetClientThread = new DenonMarantzTelnetClientThread(config, this); + DenonMarantzTelnetClientThread telnetClientThread = this.telnetClientThread = new DenonMarantzTelnetClientThread( + config, this); telnetClientThread.setName("OH-binding-" + thingUID); telnetClientThread.start(); } @@ -76,7 +78,8 @@ public class DenonMarantzTelnetConnector extends DenonMarantzConnector implement @Override public void telnetClientConnected(boolean connected) { if (!connected) { - if (config.isTelnet() && !disposing) { + Boolean isTelnet = config.isTelnet(); + if (isTelnet != null && isTelnet && !disposing) { logger.debug("Telnet client disconnected."); state.connectionError( "Error connecting to the telnet port. Consider disabling telnet in this Thing's configuration to use HTTP polling instead."); @@ -94,17 +97,19 @@ public class DenonMarantzTelnetConnector extends DenonMarantzConnector implement logger.debug("disposing connector"); disposing = true; + Future telnetStateRequest = this.telnetStateRequest; if (telnetStateRequest != null) { telnetStateRequest.cancel(true); - telnetStateRequest = null; + this.telnetStateRequest = null; } + DenonMarantzTelnetClientThread telnetClientThread = this.telnetClientThread; if (telnetClientThread != null) { telnetClientThread.interrupt(); // Invoke a shutdown after interrupting the thread to close the socket immediately, // otherwise the client keeps running until a line was received from the telnet connection telnetClientThread.shutdown(); - telnetClientThread = null; + this.telnetClientThread = null; } } @@ -263,11 +268,14 @@ public class DenonMarantzTelnetConnector extends DenonMarantzConnector implement @Override protected void internalSendCommand(String command) { logger.debug("Sending command '{}'", command); - if (command == null || command.isBlank()) { + if (command.isBlank()) { logger.warn("Trying to send empty command"); return; } - telnetClientThread.sendCommand(command); + DenonMarantzTelnetClientThread telnetClientThread = this.telnetClientThread; + if (telnetClientThread != null) { + telnetClientThread.sendCommand(command); + } } /** diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetListener.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetListener.java index 4b9ed7abdb..ea1daae3a4 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetListener.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/connector/telnet/DenonMarantzTelnetListener.java @@ -12,6 +12,8 @@ */ package org.openhab.binding.denonmarantz.internal.connector.telnet; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Listener interface used to notify the * {@link org.openhab.binding.denonmarantz.internal.connector.DenonMarantzConnector} about received messages over Telnet @@ -19,6 +21,7 @@ package org.openhab.binding.denonmarantz.internal.connector.telnet; * @author Jan-Willem Veldhuis - Initial contribution * */ +@NonNullByDefault public interface DenonMarantzTelnetListener { /** * The telnet client has received a line. diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/OnOffAdapter.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/OnOffAdapter.java index e5d26115ed..857e0c4aee 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/OnOffAdapter.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/OnOffAdapter.java @@ -14,15 +14,19 @@ package org.openhab.binding.denonmarantz.internal.xml.adapters; import javax.xml.bind.annotation.adapters.XmlAdapter; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + /** * Maps 'On' and 'Off' string values to a boolean * * @author Jeroen Idserda - Initial contribution */ -public class OnOffAdapter extends XmlAdapter { +@NonNullByDefault +public class OnOffAdapter extends XmlAdapter<@Nullable String, @Nullable Boolean> { @Override - public Boolean unmarshal(String v) throws Exception { + public @Nullable Boolean unmarshal(@Nullable String v) throws Exception { if (v != null) { return Boolean.valueOf("on".equals(v.toLowerCase())); } @@ -31,7 +35,7 @@ public class OnOffAdapter extends XmlAdapter { } @Override - public String marshal(Boolean v) throws Exception { + public @Nullable String marshal(@Nullable Boolean v) throws Exception { return v ? "On" : "Off"; } } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/StringAdapter.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/StringAdapter.java index 31cf15ecbd..714933601a 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/StringAdapter.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/StringAdapter.java @@ -14,15 +14,19 @@ package org.openhab.binding.denonmarantz.internal.xml.adapters; import javax.xml.bind.annotation.adapters.XmlAdapter; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + /** * Adapter to clean up string values * * @author Jeroen Idserda - Initial contribution */ -public class StringAdapter extends XmlAdapter { +@NonNullByDefault +public class StringAdapter extends XmlAdapter<@Nullable String, @Nullable String> { @Override - public String unmarshal(String v) throws Exception { + public @Nullable String unmarshal(@Nullable String v) throws Exception { String val = v; if (val != null) { return val.trim(); @@ -31,7 +35,7 @@ public class StringAdapter extends XmlAdapter { } @Override - public String marshal(String v) throws Exception { + public @Nullable String marshal(@Nullable String v) throws Exception { return v; } } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/VolumeAdapter.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/VolumeAdapter.java index f1014c8d2a..d79bcc061f 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/VolumeAdapter.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/adapters/VolumeAdapter.java @@ -18,15 +18,19 @@ import java.math.BigDecimal; import javax.xml.bind.annotation.adapters.XmlAdapter; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + /** * Maps Denon volume values in db to percentage * * @author Jeroen Idserda - Initial contribution */ -public class VolumeAdapter extends XmlAdapter { +@NonNullByDefault +public class VolumeAdapter extends XmlAdapter<@Nullable String, BigDecimal> { @Override - public BigDecimal unmarshal(String v) throws Exception { + public BigDecimal unmarshal(@Nullable String v) throws Exception { if (v != null && !"--".equals(v.trim())) { return new BigDecimal(v.trim()).add(DB_OFFSET); } @@ -35,7 +39,7 @@ public class VolumeAdapter extends XmlAdapter { } @Override - public String marshal(BigDecimal v) throws Exception { + public @Nullable String marshal(BigDecimal v) throws Exception { if (v.equals(BigDecimal.ZERO)) { return "--"; } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Deviceinfo.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Deviceinfo.java similarity index 94% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Deviceinfo.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Deviceinfo.java index 549142486f..fab4765961 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Deviceinfo.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Deviceinfo.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities; +package org.openhab.binding.denonmarantz.internal.xml.dto; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Main.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Main.java similarity index 86% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Main.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Main.java index 0e74fbec45..41f27e39d6 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/Main.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/Main.java @@ -10,13 +10,13 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities; +package org.openhab.binding.denonmarantz.internal.xml.dto; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.OnOffType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.OnOffType; /** * Holds information about the Main zone of the receiver diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatus.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatus.java similarity index 88% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatus.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatus.java index 6a2f6c6621..5071787278 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatus.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatus.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities; +package org.openhab.binding.denonmarantz.internal.xml.dto; import java.util.List; @@ -20,9 +20,9 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.OnOffType; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.StringType; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.VolumeType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.OnOffType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.StringType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.VolumeType; /** * Holds information about the secondary zones of the receiver diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatusLite.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatusLite.java similarity index 85% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatusLite.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatusLite.java index de75cda102..5d38979f3f 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/ZoneStatusLite.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/ZoneStatusLite.java @@ -10,15 +10,15 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities; +package org.openhab.binding.denonmarantz.internal.xml.dto; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.OnOffType; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.StringType; -import org.openhab.binding.denonmarantz.internal.xml.entities.types.VolumeType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.OnOffType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.StringType; +import org.openhab.binding.denonmarantz.internal.xml.dto.types.VolumeType; /** * Holds limited information about the secondary zones of the receiver diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandRequest.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandRequest.java similarity index 90% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandRequest.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandRequest.java index 54659fcce9..03a7a9f85d 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandRequest.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandRequest.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import java.util.ArrayList; import java.util.List; @@ -20,6 +20,8 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Wrapper for a list of {@link CommandTx} * @@ -27,6 +29,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlRootElement(name = "tx") @XmlAccessorType(XmlAccessType.FIELD) +@NonNullByDefault public class AppCommandRequest { @XmlElement(name = "cmd") diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandResponse.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandResponse.java similarity index 89% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandResponse.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandResponse.java index fc74fb928c..952333180b 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/AppCommandResponse.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/AppCommandResponse.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import java.util.ArrayList; import java.util.List; @@ -20,6 +20,8 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Response to an {@link AppCommandRequest}, wraps a list of {@link CommandRx} * @@ -27,6 +29,7 @@ import javax.xml.bind.annotation.XmlRootElement; */ @XmlRootElement(name = "rx") @XmlAccessorType(XmlAccessType.FIELD) +@NonNullByDefault public class AppCommandResponse { @XmlElement(name = "cmd") diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandRx.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandRx.java similarity index 93% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandRx.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandRx.java index d9bb5d8b7d..55531ce69d 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandRx.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandRx.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import java.util.ArrayList; import java.util.List; @@ -21,6 +21,9 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + /** * Response to a {@link CommandTx} * @@ -184,9 +187,9 @@ public class CommandRx { this.source = source; } - public String getText(String key) { + public @Nullable String getText(@NonNull String key) { for (Text text : texts) { - if (text.getId().equals(key)) { + if (key.equals(text.getId())) { return text.getValue(); } } diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandTx.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandTx.java similarity index 96% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandTx.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandTx.java index 488d8564ce..d01939f39d 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/CommandTx.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/CommandTx.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/DeletedSourceList.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/DeletedSourceList.java similarity index 93% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/DeletedSourceList.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/DeletedSourceList.java index 7c8fc91e29..0e16ff73b5 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/DeletedSourceList.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/DeletedSourceList.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/RenameSourceList.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/RenameSourceList.java similarity index 92% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/RenameSourceList.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/RenameSourceList.java index 83201a8e05..352aad6820 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/RenameSourceList.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/RenameSourceList.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/Text.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/Text.java similarity index 94% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/Text.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/Text.java index 5c09eb1866..67de71fd9c 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/commands/Text.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/commands/Text.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.commands; +package org.openhab.binding.denonmarantz.internal.xml.dto.commands; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/OnOffType.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/OnOffType.java similarity index 93% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/OnOffType.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/OnOffType.java index a6df2bca21..dc1a60c66e 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/OnOffType.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/OnOffType.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.types; +package org.openhab.binding.denonmarantz.internal.xml.dto.types; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/StringType.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/StringType.java similarity index 93% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/StringType.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/StringType.java index 948d8d609e..3ac132a64e 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/StringType.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/StringType.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.types; +package org.openhab.binding.denonmarantz.internal.xml.dto.types; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/VolumeType.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/VolumeType.java similarity index 93% rename from bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/VolumeType.java rename to bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/VolumeType.java index 3a6125860f..73b5458bf4 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/entities/types/VolumeType.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/xml/dto/types/VolumeType.java @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -package org.openhab.binding.denonmarantz.internal.xml.entities.types; +package org.openhab.binding.denonmarantz.internal.xml.dto.types; import java.math.BigDecimal; -- 2.47.3