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;
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<String, ChannelTypeUID> 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<String, ChannelTypeUID> 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<String, ChannelTypeUID> 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<String, ChannelTypeUID> 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<String, ChannelTypeUID> 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<String, String> 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<String, ChannelTypeUID> 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");
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;
// add the channels that were not yet added
if (!channelsToAdd.isEmpty()) {
- for (Entry<String, ChannelTypeUID> 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<String, ChannelTypeUID> 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");
}