]> git.basschouten.com Git - openhab-addons.git/blob
6157b6071f65e7c5be4338fecffc5a7a9fd12573
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.russound.internal.rio.models;
14
15 import java.util.concurrent.atomic.AtomicBoolean;
16 import java.util.concurrent.atomic.AtomicReference;
17
18 import org.eclipse.jdt.annotation.Nullable;
19
20 /**
21  * Simple model of a RIO Preset and it's attributes. Please note this class is used to
22  * serialize/deserialize to JSON.
23  *
24  * @author Tim Roberts - Initial contribution
25  */
26 public class RioPreset {
27     /**
28      * The preset id
29      */
30     private final int id;
31
32     /**
33      * Whether the preset is valid or not
34      */
35     private final AtomicBoolean valid = new AtomicBoolean(false);
36
37     /**
38      * The preset name
39      */
40     private final AtomicReference<String> name = new AtomicReference<>(null);
41
42     /**
43      * Simply creates the preset from the given ID. The preset will not be valid and the name will default to
44      * "Preset " + id
45      *
46      * @param id a preset ID between 1 and 36
47      * @throws IllegalArgumentException if id < 1 or > 36
48      */
49     public RioPreset(int id) {
50         this(id, false, "Preset " + id);
51     }
52
53     /**
54      * Creates the preset from the given ID, validity and name. If the name is empty or null, it will default to
55      * "Preset " + id
56      *
57      * @param id a preset ID between 1 and 36
58      * @param isValid true if the preset is valid, false otherwise
59      * @param name a possibly null, possibly empty preset name
60      * @throws IllegalArgumentException if id < 1 or > 32
61      */
62     public RioPreset(int id, boolean valid, @Nullable String name) {
63         if (id < 1 || id > 36) {
64             throw new IllegalArgumentException("Preset ID can only be between 1 and 36");
65         }
66
67         this.id = id;
68         this.valid.set(valid);
69         this.name.set(name == null || name.isEmpty() ? "Preset " + id : name);
70     }
71
72     /**
73      * Returns the bank identifier this preset is for
74      *
75      * @return bank identifier between 1 and 6
76      */
77     public int getBank() {
78         return ((getId() - 1) / 6) + 1;
79     }
80
81     /**
82      * Returns the bank preset identifier this preset is for
83      *
84      * @return bank preset identifier between 1 and 6
85      */
86     public int getBankPreset() {
87         return ((getId() - 1) % 6) + 1;
88     }
89
90     /**
91      * Returns the preset identifier
92      *
93      * @return the preset identifier between 1 and 36
94      */
95     public int getId() {
96         return id;
97     }
98
99     /**
100      * Returns true if the preset is valid, false otherwise
101      *
102      * @return true if valid, false otherwise
103      */
104     public boolean isValid() {
105         return valid.get();
106     }
107
108     /**
109      * Sets whether the preset is valid (true) or not (false)
110      *
111      * @param presetValid true if valid, false otherwise
112      */
113     public void setValid(boolean presetValid) {
114         valid.set(presetValid);
115     }
116
117     /**
118      * Set's the preset name. If null or empty, will default to "Preset " + getId()
119      *
120      * @param presetName a possibly null, possibly empty preset name
121      */
122     public void setName(@Nullable String presetName) {
123         name.set(presetName == null || presetName.isEmpty() ? "Preset " + getId() : presetName);
124     }
125
126     /**
127      * Returns the preset name
128      *
129      * @return a non-null, non-empty preset name
130      */
131     public String getName() {
132         return name.get();
133     }
134 }