]> git.basschouten.com Git - openhab-addons.git/commitdiff
[yamahareceiver] Fix ChannelTypeProvider (#16278)
authorJ-N-K <github@klug.nrw>
Sun, 14 Jan 2024 20:53:57 +0000 (21:53 +0100)
committerGitHub <noreply@github.com>
Sun, 14 Jan 2024 20:53:57 +0000 (21:53 +0100)
* [yamahareceiver] Fix ChannelTypeProvider
* [yamaha] Fix remaining ChannelTypeProvider (#23)

Also-by: Florian Hotze <florianh_dev@icloud.com>
Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.binding.yamahareceiver/src/main/java/org/openhab/binding/yamahareceiver/internal/ChannelsTypeProviderAvailableInputs.java
bundles/org.openhab.binding.yamahareceiver/src/main/java/org/openhab/binding/yamahareceiver/internal/ChannelsTypeProviderPreset.java
bundles/org.openhab.binding.yamahareceiver/src/main/java/org/openhab/binding/yamahareceiver/internal/handler/YamahaZoneThingHandler.java

index 6255d3ce872969c1460f73a306e2e16fe4f81aea..489417691786b1529053b569302d1143d2ded12d 100644 (file)
@@ -47,31 +47,35 @@ import org.osgi.service.component.annotations.ServiceScope;
         ChannelTypeProvider.class })
 @NonNullByDefault
 public class ChannelsTypeProviderAvailableInputs implements ChannelTypeProvider, ThingHandlerService {
-    private @NonNullByDefault({}) ChannelType channelType;
-    private @NonNullByDefault({}) ChannelTypeUID channelTypeUID;
-    private @NonNullByDefault({}) YamahaZoneThingHandler handler;
+    private @Nullable ChannelType channelType;
+    private @Nullable ChannelTypeUID channelTypeUID;
+    private @Nullable YamahaZoneThingHandler handler;
 
     @Override
     public Collection<ChannelType> getChannelTypes(@Nullable Locale locale) {
-        return Set.of(channelType);
+        ChannelType channelType = this.channelType;
+        return channelType == null ? Set.of() : Set.of(channelType);
     }
 
     @Override
     public @Nullable ChannelType getChannelType(ChannelTypeUID channelTypeUID, @Nullable Locale locale) {
-        if (this.channelTypeUID.equals(channelTypeUID)) {
+        if (channelTypeUID.equals(this.channelTypeUID)) {
             return channelType;
         } else {
             return null;
         }
     }
 
-    public ChannelTypeUID getChannelTypeUID() {
+    public @Nullable ChannelTypeUID getChannelTypeUID() {
         return channelTypeUID;
     }
 
     private void createChannelType(StateDescriptionFragment state) {
-        channelType = ChannelTypeBuilder.state(channelTypeUID, "Input source", "String")
-                .withDescription("Select the input source of the AVR").withStateDescriptionFragment(state).build();
+        ChannelTypeUID channelTypeUID = this.channelTypeUID;
+        if (channelTypeUID != null) {
+            channelType = ChannelTypeBuilder.state(channelTypeUID, "Input source", "String")
+                    .withDescription("Select the input source of the AVR").withStateDescriptionFragment(state).build();
+        }
     }
 
     private StateDescriptionFragment getDefaultStateDescription() {
@@ -128,7 +132,6 @@ public class ChannelsTypeProviderAvailableInputs implements ChannelTypeProvider,
                 .withOptions(options).build());
     }
 
-    @NonNullByDefault({})
     @Override
     public void setThingHandler(ThingHandler handler) {
         this.handler = (YamahaZoneThingHandler) handler;
index e49939016e414094248cff425fb2d406da812e02..3b9a02b48ae2074d4f518697bbe178d3975ea91e 100644 (file)
@@ -46,25 +46,26 @@ import org.osgi.service.component.annotations.ServiceScope;
 @Component(scope = ServiceScope.PROTOTYPE, service = { ChannelsTypeProviderPreset.class, ChannelTypeProvider.class })
 @NonNullByDefault
 public class ChannelsTypeProviderPreset implements ChannelTypeProvider, ThingHandlerService {
-    private @NonNullByDefault({}) ChannelType channelType;
-    private @NonNullByDefault({}) ChannelTypeUID channelTypeUID;
-    private @NonNullByDefault({}) YamahaZoneThingHandler handler;
+    private @Nullable ChannelType channelType;
+    private @Nullable ChannelTypeUID channelTypeUID;
+    private @Nullable YamahaZoneThingHandler handler;
 
     @Override
     public Collection<ChannelType> getChannelTypes(@Nullable Locale locale) {
-        return Set.of(channelType);
+        ChannelType channelType = this.channelType;
+        return channelType == null ? Set.of() : Set.of(channelType);
     }
 
     @Override
     public @Nullable ChannelType getChannelType(ChannelTypeUID channelTypeUID, @Nullable Locale locale) {
-        if (this.channelTypeUID.equals(channelTypeUID)) {
+        if (channelTypeUID.equals(this.channelTypeUID)) {
             return channelType;
         } else {
             return null;
         }
     }
 
-    public ChannelTypeUID getChannelTypeUID() {
+    public @Nullable ChannelTypeUID getChannelTypeUID() {
         return channelTypeUID;
     }
 
@@ -83,12 +84,14 @@ public class ChannelsTypeProviderPreset implements ChannelTypeProvider, ThingHan
     }
 
     private void createChannelType(StateDescriptionFragment state) {
-        channelType = ChannelTypeBuilder.state(channelTypeUID, "Preset", "Number")
-                .withDescription("Select a saved channel by its preset number").withStateDescriptionFragment(state)
-                .build();
+        ChannelTypeUID channelTypeUID = this.channelTypeUID;
+        if (channelTypeUID != null) {
+            channelType = ChannelTypeBuilder.state(channelTypeUID, "Preset", "Number")
+                    .withDescription("Select a saved channel by its preset number").withStateDescriptionFragment(state)
+                    .build();
+        }
     }
 
-    @NonNullByDefault({})
     @Override
     public void setThingHandler(ThingHandler handler) {
         this.handler = (YamahaZoneThingHandler) handler;
index 192883f7c7a20309a0eb3236995db664911dd4b4..d9f54a7892994b1f86a4c5c5c940efed7a791107 100644 (file)
@@ -73,6 +73,7 @@ import org.openhab.core.thing.ThingStatusInfo;
 import org.openhab.core.thing.binding.BaseThingHandler;
 import org.openhab.core.thing.binding.ThingHandlerService;
 import org.openhab.core.thing.binding.builder.ChannelBuilder;
+import org.openhab.core.thing.type.ChannelTypeUID;
 import org.openhab.core.types.Command;
 import org.openhab.core.types.RefreshType;
 import org.slf4j.Logger;
@@ -755,8 +756,12 @@ public class YamahaZoneThingHandler extends BaseThingHandler
         // Remove the old channel and add the new channel. The channel will be requested from the
         // yamahaChannelTypeProvider.
         ChannelUID inputChannelUID = new ChannelUID(thing.getUID(), CHANNEL_GROUP_ZONE, CHANNEL_INPUT);
-        Channel channel = ChannelBuilder.create(inputChannelUID, "String")
-                .withType(channelsTypeProviderAvailableInputs.getChannelTypeUID()).build();
+        ChannelTypeUID channelTypeUID = channelsTypeProviderAvailableInputs.getChannelTypeUID();
+        if (channelTypeUID == null) {
+            logger.warn("ChannelTypeUID is null, this should not happen.");
+            return;
+        }
+        Channel channel = ChannelBuilder.create(inputChannelUID, "String").withType(channelTypeUID).build();
         updateThing(editThing().withoutChannel(inputChannelUID).withChannel(channel).build());
     }
 
@@ -795,11 +800,15 @@ public class YamahaZoneThingHandler extends BaseThingHandler
 
             // Remove the old channel and add the new channel. The channel will be requested from the
             // channelsTypeProviderPreset.
-            ChannelUID inputChannelUID = new ChannelUID(thing.getUID(), CHANNEL_GROUP_PLAYBACK,
+            ChannelUID presetChannelUID = new ChannelUID(thing.getUID(), CHANNEL_GROUP_PLAYBACK,
                     CHANNEL_PLAYBACK_PRESET);
-            Channel channel = ChannelBuilder.create(inputChannelUID, "Number")
-                    .withType(channelsTypeProviderPreset.getChannelTypeUID()).build();
-            updateThing(editThing().withoutChannel(inputChannelUID).withChannel(channel).build());
+            ChannelTypeUID channelTypeUID = channelsTypeProviderPreset.getChannelTypeUID();
+            if (channelTypeUID == null) {
+                logger.warn("ChannelTypeUID is null, this should not happen.");
+                return;
+            }
+            Channel channel = ChannelBuilder.create(presetChannelUID, "Number").withType(channelTypeUID).build();
+            updateThing(editThing().withoutChannel(presetChannelUID).withChannel(channel).build());
         }
 
         updateState(grpPlayback(CHANNEL_PLAYBACK_PRESET), new DecimalType(msg.presetChannel));