]> git.basschouten.com Git - openhab-addons.git/blob
204439fd4feade8d55975e0a7885fdf2921c839a
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2022 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 Favorite (both system and zone) 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 RioFavorite {
27     /**
28      * The favorite ID
29      */
30     private final int id;
31
32     /**
33      * Whether the favorite is valid or not
34      */
35     private final AtomicBoolean valid = new AtomicBoolean(false);
36
37     /**
38      * The favorite name
39      */
40     private final AtomicReference<String> name = new AtomicReference<>(null);
41
42     /**
43      * Simply creates the favorite from the given ID. The favorite will not be valid and the name will default to
44      * "Favorite " + id
45      *
46      * @param id a favorite ID between 1 and 32
47      * @throws IllegalArgumentException if id < 1 or > 32
48      */
49     public RioFavorite(int id) {
50         this(id, false, null);
51     }
52
53     /**
54      * Creates the favorite from the given ID, validity and name. If the name is empty or null, it will default to
55      * "Favorite " + id
56      *
57      * @param id a favorite ID between 1 and 32
58      * @param isValid true if the favorite is valid, false otherwise
59      * @param name a possibly null, possibly empty favorite name
60      * @throws IllegalArgumentException if id < 1 or > 32
61      */
62     public RioFavorite(int id, boolean isValid, @Nullable String name) {
63         if (id < 1 || id > 32) {
64             throw new IllegalArgumentException("Favorite ID must be between 1 and 32");
65         }
66
67         this.id = id;
68         this.valid.set(isValid);
69         this.name.set(name == null || name.isEmpty() ? "Favorite " + id : name);
70     }
71
72     /**
73      * Returns the favorite identifier
74      *
75      * @return a favorite id between 1 and 32
76      */
77     public int getId() {
78         return id;
79     }
80
81     /**
82      * Returns true if the favorite is valid, false otherwise
83      *
84      * @return true if valid, false otherwise
85      */
86     public boolean isValid() {
87         return valid.get();
88     }
89
90     /**
91      * Sets whether the favorite is valid or not
92      *
93      * @param favValid true if valid, false otherwise
94      */
95     public void setValid(boolean favValid) {
96         valid.set(favValid);
97     }
98
99     /**
100      * Set's the favorite name. If null or empty, will default to "Favorite " + getId()
101      *
102      * @param favName a possibly null, possibly empty favorite name
103      */
104     public void setName(@Nullable String favName) {
105         name.set(favName == null || favName.isEmpty() ? "Favorite " + getId() : favName);
106     }
107
108     /**
109      * Returns the favorite name
110      *
111      * @return a non-null, non-empty favorite name
112      */
113     public String getName() {
114         return name.get();
115     }
116 }