|
12 | 12 | */
|
13 | 13 | package org.openhab.binding.monopriceaudio.internal.communication;
|
14 | 14 |
|
| 15 | +import java.util.Collections; |
15 | 16 | import java.util.HashMap;
|
16 | 17 | import java.util.List;
|
17 | 18 | import java.util.Map;
|
18 | 19 | import java.util.regex.Matcher;
|
19 | 20 | import java.util.regex.Pattern;
|
| 21 | +import java.util.stream.IntStream; |
20 | 22 |
|
21 | 23 | import org.eclipse.jdt.annotation.NonNullByDefault;
|
22 | 24 | import org.openhab.binding.monopriceaudio.internal.configuration.MonopriceAudioThingConfiguration;
|
@@ -82,7 +84,7 @@ public List<StateOption> getSourceLabels(MonopriceAudioThingConfiguration config
|
82 | 84 | 2, false, List.of("1", "2", "3", "4", "5", "6")) {
|
83 | 85 | @Override
|
84 | 86 | public MonopriceAudioZoneDTO getZoneData(String newZoneData) {
|
85 |
| - MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
| 87 | + final MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
86 | 88 |
|
87 | 89 | Matcher matcher = MONOPRICE70_PATTERN.matcher(newZoneData);
|
88 | 90 | if (matcher.find()) {
|
@@ -127,8 +129,8 @@ public List<StateOption> getSourceLabels(MonopriceAudioThingConfiguration config
|
127 | 129 | false, List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16")) {
|
128 | 130 | @Override
|
129 | 131 | public MonopriceAudioZoneDTO getZoneData(String newZoneData) {
|
130 |
| - MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
131 |
| - Matcher matcher = XANTECH_PATTERN.matcher(newZoneData); |
| 132 | + final MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
| 133 | + final Matcher matcher = XANTECH_PATTERN.matcher(newZoneData); |
132 | 134 |
|
133 | 135 | if (matcher.find()) {
|
134 | 136 | zoneData.setZone(matcher.group(1));
|
@@ -156,8 +158,8 @@ public List<StateOption> getSourceLabels(MonopriceAudioThingConfiguration config
|
156 | 158 |
|
157 | 159 | // Used by 10761/DAX66 and DAX88
|
158 | 160 | private static MonopriceAudioZoneDTO getMonopriceZoneData(String newZoneData) {
|
159 |
| - MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
160 |
| - Matcher matcher = MONOPRICE_PATTERN.matcher(newZoneData); |
| 161 | + final MonopriceAudioZoneDTO zoneData = new MonopriceAudioZoneDTO(); |
| 162 | + final Matcher matcher = MONOPRICE_PATTERN.matcher(newZoneData); |
161 | 163 |
|
162 | 164 | if (matcher.find()) {
|
163 | 165 | zoneData.setZone(matcher.group(1));
|
@@ -191,31 +193,31 @@ private static MonopriceAudioZoneDTO getMonopriceZoneData(String newZoneData) {
|
191 | 193 | private static final Pattern XANTECH_PATTERN = Pattern.compile(
|
192 | 194 | "^#(\\d{1,2})ZS PR(\\d{1}) SS(\\d{1}) VO(\\d{1,2}) MU(\\d{1}) TR(\\d{1,2}) BS(\\d{1,2}) BA(\\d{1,2}) LS(\\d{1}) PS(\\d{1})+");
|
193 | 195 |
|
194 |
| - private String cmdPrefix; |
195 |
| - private String cmdSuffix; |
196 |
| - private String queryPrefix; |
197 |
| - private String querySuffix; |
198 |
| - private String respPrefix; |
199 |
| - private String powerCmd; |
200 |
| - private String sourceCmd; |
201 |
| - private String volumeCmd; |
202 |
| - private String muteCmd; |
203 |
| - private String trebleCmd; |
204 |
| - private String bassCmd; |
205 |
| - private String balanceCmd; |
206 |
| - private String dndCmd; |
207 |
| - private int maxVol; |
208 |
| - private int minTone; |
209 |
| - private int maxTone; |
210 |
| - private int toneOffset; |
211 |
| - private int minBal; |
212 |
| - private int maxBal; |
213 |
| - private int balOffset; |
214 |
| - private int maxZones; |
215 |
| - private int numSources; |
216 |
| - private boolean padNumbers; |
217 |
| - private List<String> zoneIds; |
218 |
| - private Map<String, String> zoneIdMap = new HashMap<>(); |
| 196 | + private final String cmdPrefix; |
| 197 | + private final String cmdSuffix; |
| 198 | + private final String queryPrefix; |
| 199 | + private final String querySuffix; |
| 200 | + private final String respPrefix; |
| 201 | + private final String powerCmd; |
| 202 | + private final String sourceCmd; |
| 203 | + private final String volumeCmd; |
| 204 | + private final String muteCmd; |
| 205 | + private final String trebleCmd; |
| 206 | + private final String bassCmd; |
| 207 | + private final String balanceCmd; |
| 208 | + private final String dndCmd; |
| 209 | + private final int maxVol; |
| 210 | + private final int minTone; |
| 211 | + private final int maxTone; |
| 212 | + private final int toneOffset; |
| 213 | + private final int minBal; |
| 214 | + private final int maxBal; |
| 215 | + private final int balOffset; |
| 216 | + private final int maxZones; |
| 217 | + private final int numSources; |
| 218 | + private final boolean padNumbers; |
| 219 | + private final List<String> zoneIds; |
| 220 | + private final Map<String, String> zoneIdMap; |
219 | 221 |
|
220 | 222 | private static final String ON_STR = "1";
|
221 | 223 | private static final String OFF_STR = "0";
|
@@ -256,11 +258,10 @@ private static MonopriceAudioZoneDTO getMonopriceZoneData(String newZoneData) {
|
256 | 258 | this.padNumbers = padNumbers;
|
257 | 259 | this.zoneIds = zoneIds;
|
258 | 260 |
|
259 |
| - int i = 1; |
260 |
| - for (String zoneId : zoneIds) { |
261 |
| - zoneIdMap.put(zoneId, "zone" + i); |
262 |
| - i++; |
263 |
| - } |
| 261 | + // Build a map between the amp's physical zone IDs and the thing's logical zone names |
| 262 | + final Map<String, String> zoneIdMap = new HashMap<>(); |
| 263 | + IntStream.range(0, zoneIds.size()).forEach(i -> zoneIdMap.put(zoneIds.get(i), "zone" + (i + 1))); |
| 264 | + this.zoneIdMap = Collections.unmodifiableMap(zoneIdMap); |
264 | 265 | }
|
265 | 266 |
|
266 | 267 | public abstract MonopriceAudioZoneDTO getZoneData(String newZoneData);
|
@@ -378,26 +379,14 @@ public List<String> getZoneIds() {
|
378 | 379 | }
|
379 | 380 |
|
380 | 381 | public String getFormattedValue(Integer value) {
|
381 |
| - if (padNumbers) { |
382 |
| - return String.format("%02d", value); |
383 |
| - } else { |
384 |
| - return value.toString(); |
385 |
| - } |
| 382 | + return padNumbers ? String.format("%02d", value) : value.toString(); |
386 | 383 | }
|
387 | 384 |
|
388 | 385 | public String getOnStr() {
|
389 |
| - if (padNumbers) { |
390 |
| - return ON_STR_PAD; |
391 |
| - } else { |
392 |
| - return ON_STR; |
393 |
| - } |
| 386 | + return padNumbers ? ON_STR_PAD : ON_STR; |
394 | 387 | }
|
395 | 388 |
|
396 | 389 | public String getOffStr() {
|
397 |
| - if (padNumbers) { |
398 |
| - return OFF_STR_PAD; |
399 |
| - } else { |
400 |
| - return OFF_STR; |
401 |
| - } |
| 390 | + return padNumbers ? OFF_STR_PAD : OFF_STR; |
402 | 391 | }
|
403 | 392 | }
|
0 commit comments