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 ae29e8523c6e6..88d8391d3691a 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 @@ -13,8 +13,6 @@ package org.openhab.binding.denonmarantz.internal; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.Map; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -79,55 +77,28 @@ public class DenonMarantzBindingConstants { public static final String CHANNEL_ZONE4_INPUT = "zone4#input"; // Map of Zone2 Channel Type UIDs (to be added to Thing later when needed) - public static final Map ZONE2_CHANNEL_TYPES = new LinkedHashMap<>(); - static { - ZONE2_CHANNEL_TYPES.put(CHANNEL_ZONE2_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")); - ZONE2_CHANNEL_TYPES.put(CHANNEL_ZONE2_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")); - ZONE2_CHANNEL_TYPES.put(CHANNEL_ZONE2_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")); - ZONE2_CHANNEL_TYPES.put(CHANNEL_ZONE2_MUTE, new ChannelTypeUID(BINDING_ID, "mute")); - ZONE2_CHANNEL_TYPES.put(CHANNEL_ZONE2_INPUT, new ChannelTypeUID(BINDING_ID, "input")); - } + public static final Map ZONE2_CHANNEL_TYPES = Map.ofEntries( + Map.entry(CHANNEL_ZONE2_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")), + Map.entry(CHANNEL_ZONE2_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")), + Map.entry(CHANNEL_ZONE2_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")), + Map.entry(CHANNEL_ZONE2_MUTE, new ChannelTypeUID(BINDING_ID, "mute")), + Map.entry(CHANNEL_ZONE2_INPUT, new ChannelTypeUID(BINDING_ID, "input"))); // Map of Zone3 Channel Type UIDs (to be added to Thing later when needed) - public static final Map ZONE3_CHANNEL_TYPES = new LinkedHashMap<>(); - static { - ZONE3_CHANNEL_TYPES.put(CHANNEL_ZONE3_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")); - ZONE3_CHANNEL_TYPES.put(CHANNEL_ZONE3_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")); - ZONE3_CHANNEL_TYPES.put(CHANNEL_ZONE3_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")); - ZONE3_CHANNEL_TYPES.put(CHANNEL_ZONE3_MUTE, new ChannelTypeUID(BINDING_ID, "mute")); - ZONE3_CHANNEL_TYPES.put(CHANNEL_ZONE3_INPUT, new ChannelTypeUID(BINDING_ID, "input")); - } + public static final Map ZONE3_CHANNEL_TYPES = Map.ofEntries( + Map.entry(CHANNEL_ZONE3_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")), + Map.entry(CHANNEL_ZONE3_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")), + Map.entry(CHANNEL_ZONE3_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")), + Map.entry(CHANNEL_ZONE3_MUTE, new ChannelTypeUID(BINDING_ID, "mute")), + Map.entry(CHANNEL_ZONE3_INPUT, new ChannelTypeUID(BINDING_ID, "input"))); // Map of Zone4 Channel Type UIDs (to be added to Thing later when needed) - public static final Map ZONE4_CHANNEL_TYPES = new LinkedHashMap<>(); - static { - ZONE4_CHANNEL_TYPES.put(CHANNEL_ZONE4_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")); - ZONE4_CHANNEL_TYPES.put(CHANNEL_ZONE4_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")); - ZONE4_CHANNEL_TYPES.put(CHANNEL_ZONE4_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")); - ZONE4_CHANNEL_TYPES.put(CHANNEL_ZONE4_MUTE, new ChannelTypeUID(BINDING_ID, "mute")); - ZONE4_CHANNEL_TYPES.put(CHANNEL_ZONE4_INPUT, new ChannelTypeUID(BINDING_ID, "input")); - } - - /** - * Static mapping of ChannelType-to-ItemType (workaround while waiting for - * https://github.com/eclipse/smarthome/issues/4950 as yet there is no convenient way to extract the item type from - * thing-types.xml) - * See https://github.com/eclipse/smarthome/pull/4787#issuecomment-362287430 - */ - public static final Map CHANNEL_ITEM_TYPES = new HashMap<>(); - static { - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE2_POWER, "Switch"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE2_VOLUME, "Dimmer"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE2_VOLUME_DB, "Number"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE2_MUTE, "Switch"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE2_INPUT, "String"); - - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE3_POWER, "Switch"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE3_VOLUME, "Dimmer"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE3_VOLUME_DB, "Number"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE3_MUTE, "Switch"); - CHANNEL_ITEM_TYPES.put(CHANNEL_ZONE3_INPUT, "String"); - } + public static final Map ZONE4_CHANNEL_TYPES = Map.ofEntries( + Map.entry(CHANNEL_ZONE4_POWER, new ChannelTypeUID(BINDING_ID, "zonePower")), + Map.entry(CHANNEL_ZONE4_VOLUME, new ChannelTypeUID(BINDING_ID, "volume")), + Map.entry(CHANNEL_ZONE4_VOLUME_DB, new ChannelTypeUID(BINDING_ID, "volumeDB")), + Map.entry(CHANNEL_ZONE4_MUTE, new ChannelTypeUID(BINDING_ID, "mute")), + Map.entry(CHANNEL_ZONE4_INPUT, new ChannelTypeUID(BINDING_ID, "input"))); // Offset in dB from the actual dB value to the volume as presented by the AVR (0 == -80 dB) public static final BigDecimal DB_OFFSET = new BigDecimal("80"); diff --git a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/handler/DenonMarantzHandler.java b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/handler/DenonMarantzHandler.java index 1ba7dcc5ed27c..e37d55e2893fa 100644 --- a/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/handler/DenonMarantzHandler.java +++ b/bundles/org.openhab.binding.denonmarantz/src/main/java/org/openhab/binding/denonmarantz/internal/handler/DenonMarantzHandler.java @@ -53,7 +53,8 @@ import org.openhab.core.thing.ThingStatus; import org.openhab.core.thing.ThingStatusDetail; import org.openhab.core.thing.binding.BaseThingHandler; -import org.openhab.core.thing.binding.builder.ChannelBuilder; +import org.openhab.core.thing.binding.ThingHandlerCallback; +import org.openhab.core.thing.type.ChannelKind; import org.openhab.core.thing.type.ChannelTypeUID; import org.openhab.core.types.Command; import org.openhab.core.types.RefreshType; @@ -376,14 +377,17 @@ private void configureZoneChannels() { // add the channels that were not yet added if (!channelsToAdd.isEmpty()) { - for (Entry entry : channelsToAdd) { - String itemType = CHANNEL_ITEM_TYPES.get(entry.getKey()); - Channel channel = ChannelBuilder - .create(new ChannelUID(this.getThing().getUID(), entry.getKey()), itemType) - .withType(entry.getValue()).build(); - channels.add(channel); + ThingHandlerCallback callback = getCallback(); + if (callback != null) { + for (Entry entry : channelsToAdd) { + ChannelUID channelUID = new ChannelUID(this.getThing().getUID(), entry.getKey()); + channels.add(callback.createChannelBuilder(channelUID, entry.getValue()) + .withKind(ChannelKind.STATE).build()); + } + channelsUpdated = true; + } else { + logger.warn("Could not create zone channels"); } - channelsUpdated = true; } else { logger.debug("No zone channels have been added"); }