2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.upnpcontrol.internal;
15 import static org.openhab.binding.upnpcontrol.internal.UpnpControlBindingConstants.*;
18 import java.util.function.Function;
19 import java.util.stream.Collectors;
20 import java.util.stream.Stream;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.eclipse.jdt.annotation.Nullable;
26 * This enum contains default openHAB channel configurations for optional channels as defined in the UPnP standard.
27 * Vendor specific channels are not part of this.
29 * @author Mark Herwege - Initial contribution
33 public enum UpnpChannelName {
36 LF_VOLUME("LFvolume", "@text/channel.upnpcontrol.lfvolume.label", "@text/channel.upnpcontrol.lfvolume.description",
37 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
38 RF_VOLUME("RFvolume", "@text/channel.upnpcontrol.rfvolume.label", "@text/channel.upnpcontrol.rfvolume.description",
39 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
40 CF_VOLUME("CFvolume", "@text/channel.upnpcontrol.cfvolume.label", "@text/channel.upnpcontrol.cfvolume.description",
41 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
42 LFE_VOLUME("LFEvolume", "@text/channel.upnpcontrol.lfevolume.label",
43 "@text/channel.upnpcontrol.lfevolume.description", ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
44 LS_VOLUME("LSvolume", "@text/channel.upnpcontrol.lsvolume.label", "@text/channel.upnpcontrol.lsvolume.description",
45 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
46 RS_VOLUME("RSvolume", "@text/channel.upnpcontrol.rsvolume.label", "@text/channel.upnpcontrol.rsvolume.description",
47 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
48 LFC_VOLUME("LFCvolume", "@text/channel.upnpcontrol.lfcvolume.label",
49 "@text/channel.upnpcontrol.lfcvolume.description", ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
50 RFC_VOLUME("RFCvolume", "@text/channel.upnpcontrol.rfcvolume.label",
51 "@text/channel.upnpcontrol.rfcvolume.description", ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
52 SD_VOLUME("SDvolume", "@text/channel.upnpcontrol.sdvolume.label", "@text/channel.upnpcontrol.sdvolume.description",
53 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
54 SL_VOLUME("SLvolume", "@text/channel.upnpcontrol.slvolume.label", "@text/channel.upnpcontrol.slvolume.description",
55 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
56 SR_VOLUME("SRvolume", "@text/channel.upnpcontrol.srvolume.label", "@text/channel.upnpcontrol.srvolume.description",
57 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
58 T_VOLUME("Tvolume", "@text/channel.upnpcontrol.tvolume.label", "@text/channel.upnpcontrol.tvolume.description",
59 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
60 B_VOLUME("Bvolume", "@text/channel.upnpcontrol.bvolume.label", "@text/channel.upnpcontrol.bvolume.description",
61 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
62 BC_VOLUME("BCvolume", "@text/channel.upnpcontrol.bcvolume.label", "@text/channel.upnpcontrol.bcvolume.description",
63 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
64 BL_VOLUME("BLvolume", "@text/channel.upnpcontrol.blvolume.label", "@text/channel.upnpcontrol.blvolume.description",
65 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
66 BR_VOLUME("BRvolume", "@text/channel.upnpcontrol.brvolume.label", "@text/channel.upnpcontrol.brvolume.description",
67 ITEM_TYPE_VOLUME, CHANNEL_TYPE_VOLUME),
70 LF_MUTE("LFmute", "@text/channel.upnpcontrol.lfmute.label", "@text/channel.upnpcontrol.lfmute.description",
71 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
72 RF_MUTE("RFmute", "@text/channel.upnpcontrol.rfmute.label", "@text/channel.upnpcontrol.rfmute.description",
73 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
74 CF_MUTE("CFmute", "@text/channel.upnpcontrol.cfmute.label", "@text/channel.upnpcontrol.cfmute.description",
75 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
76 LFE_MUTE("LFEmute", "@text/channel.upnpcontrol.lfemute.label", "@text/channel.upnpcontrol.lfemute.description",
77 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
78 LS_MUTE("LSmute", "@text/channel.upnpcontrol.lsmute.label", "@text/channel.upnpcontrol.lsmute.description",
79 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
80 RS_MUTE("RSmute", "@text/channel.upnpcontrol.rsmute.label", "@text/channel.upnpcontrol.rsmute.description",
81 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
82 LFC_MUTE("LFCmute", "@text/channel.upnpcontrol.lfcmute.label", "@text/channel.upnpcontrol.lfcmute.description",
83 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
84 RFC_MUTE("RFCmute", "@text/channel.upnpcontrol.rfcmute.label", "@text/channel.upnpcontrol.rfcmute.description",
85 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
86 SD_MUTE("SDmute", "@text/channel.upnpcontrol.sdmute.label", "@text/channel.upnpcontrol.sdmute.description",
87 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
88 SL_MUTE("SLmute", "@text/channel.upnpcontrol.slmute.label", "@text/channel.upnpcontrol.slmute.description",
89 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
90 SR_MUTE("SRmute", "@text/channel.upnpcontrol.srmute.label", "@text/channel.upnpcontrol.srmute.description",
91 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
92 T_MUTE("Tmute", "@text/channel.upnpcontrol.tmute.label", "@text/channel.upnpcontrol.tmute.description",
93 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
94 B_MUTE("Bmute", "@text/channel.upnpcontrol.bmute.label", "@text/channel.upnpcontrol.bmute.description",
95 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
96 BC_MUTE("BCmute", "@text/channel.upnpcontrol.bcmute.label", "@text/channel.upnpcontrol.bcmute.description",
97 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
98 BL_MUTE("BLmute", "@text/channel.upnpcontrol.blmute.label", "@text/channel.upnpcontrol.blmute.description",
99 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
100 BR_MUTE("BRmute", "@text/channel.upnpcontrol.brmute.label", "@text/channel.upnpcontrol.brmute.description",
101 ITEM_TYPE_MUTE, CHANNEL_TYPE_MUTE),
104 LF_LOUDNESS("LFloudness", "@text/channel.upnpcontrol.lfloudness.label",
105 "@text/channel.upnpcontrol.lfloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
106 RF_LOUDNESS("RFloudness", "@text/channel.upnpcontrol.rfloudness.label",
107 "@text/channel.upnpcontrol.rfloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
108 CF_LOUDNESS("CFloudness", "@text/channel.upnpcontrol.cfloudness.label",
109 "@text/channel.upnpcontrol.cfloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
110 LFE_LOUDNESS("LFEloudness", "@text/channel.upnpcontrol.lfeloudness.label",
111 "@text/channel.upnpcontrol.lfeloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
112 LS_LOUDNESS("LSloudness", "@text/channel.upnpcontrol.lsloudness.label",
113 "@text/channel.upnpcontrol.lsloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
114 RS_LOUDNESS("RSloudness", "@text/channel.upnpcontrol.rsloudness.label",
115 "@text/channel.upnpcontrol.rsloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
116 LFC_LOUDNESS("LFCloudness", "@text/channel.upnpcontrol.lfcloudness.label",
117 "@text/channel.upnpcontrol.lfcloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
118 RFC_LOUDNESS("RFCloudness", "@text/channel.upnpcontrol.rfcloudness.label",
119 "@text/channel.upnpcontrol.rfcloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
120 SD_LOUDNESS("SDloudness", "@text/channel.upnpcontrol.sdloudness.label",
121 "@text/channel.upnpcontrol.sdloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
122 SL_LOUDNESS("SLloudness", "@text/channel.upnpcontrol.slloudness.label",
123 "@text/channel.upnpcontrol.slloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
124 SR_LOUDNESS("SRloudness", "@text/channel.upnpcontrol.srloudness.label",
125 "@text/channel.upnpcontrol.srloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
126 T_LOUDNESS("Tloudness", "@text/channel.upnpcontrol.tloudness.label",
127 "@text/channel.upnpcontrol.tloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
128 B_LOUDNESS("Bloudness", "@text/channel.upnpcontrol.bloudness.label",
129 "@text/channel.upnpcontrol.bloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
130 BC_LOUDNESS("BCloudness", "@text/channel.upnpcontrol.bcloudness.label",
131 "@text/channel.upnpcontrol.bcloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
132 BL_LOUDNESS("BLloudness", "@text/channel.upnpcontrol.blloudness.label",
133 "@text/channel.upnpcontrol.blloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS),
134 BR_LOUDNESS("BRloudness", "@text/channel.upnpcontrol.brloudness.label",
135 "@text/channel.upnpcontrol.brloudness.description", ITEM_TYPE_LOUDNESS, CHANNEL_TYPE_LOUDNESS);
137 private static final Map<String, UpnpChannelName> UPNP_CHANNEL_NAME_MAP = Stream.of(UpnpChannelName.values())
138 .collect(Collectors.toMap(UpnpChannelName::getChannelId, Function.identity()));
140 private final String channelId;
141 private final String label;
142 private final String description;
143 private final String itemType;
144 private final String channelType;
146 UpnpChannelName(final String channelId, final String label, final String description, final String itemType,
147 final String channelType) {
148 this.channelId = channelId;
150 this.description = description;
151 this.itemType = itemType;
152 this.channelType = channelType;
156 * @return The name of the Channel
158 public String getChannelId() {
163 * @return The label for the Channel
165 public String getLabel() {
170 * @return The description for the Channel
172 public String getDescription() {
177 * @return The item type for the Channel
179 public String getItemType() {
184 * @return The channel type for the Channel
186 public String getChannelType() {
191 * Returns the UPnP Channel enum for the given channel id or null if there is no enum available for the given
194 * @param channelId Channel to find
195 * @return The UPnP Channel enum or null if there is none.
197 public static @Nullable UpnpChannelName channelIdToUpnpChannelName(final String channelId) {
198 return UPNP_CHANNEL_NAME_MAP.get(channelId);