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.velux.internal.things;
16 import java.util.concurrent.ConcurrentHashMap;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.openhab.binding.velux.internal.VeluxBindingConstants;
20 import org.openhab.binding.velux.internal.things.VeluxScene.SceneName;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
25 * Combined set of scene informations provided by the <B>Velux</B> bridge,
26 * which can be used for later interactions.
28 * The following class access methods exist:
30 * <LI>{@link VeluxExistingScenes#isRegistered} for querying existence of a {@link VeluxScene},</LI>
31 * <LI>{@link VeluxExistingScenes#register} for storing a {@link VeluxScene},</LI>
32 * <LI>{@link VeluxExistingScenes#get} for retrieval of a {@link VeluxScene},</LI>
33 * <LI>{@link VeluxExistingScenes#values} for retrieval of all {@link VeluxScene}s,</LI>
34 * <LI>{@link VeluxExistingScenes#getNoMembers} for retrieval of the number of all {@link VeluxScene}s,</LI>
35 * <LI>{@link VeluxExistingScenes#toString} for a descriptive string representation.</LI>
40 * @author Guenther Schreiner - initial contribution.
43 public class VeluxExistingScenes {
44 private final Logger logger = LoggerFactory.getLogger(VeluxExistingScenes.class);
46 // Type definitions, class-internal variables
48 private Map<String, VeluxScene> existingScenesBySceneName;
49 private int memberCount;
51 // Constructor methods
53 public VeluxExistingScenes() {
54 existingScenesBySceneName = new ConcurrentHashMap<>();
56 logger.trace("VeluxExistingScenes(constructor) done.");
59 // Class access methods
61 public boolean isRegistered(SceneName sceneName) {
62 logger.trace("isRegistered({}) returns {}.", sceneName,
63 existingScenesBySceneName.containsKey(sceneName.toString()) ? "true" : "false");
64 return existingScenesBySceneName.containsKey(sceneName.toString());
67 public boolean isRegistered(VeluxScene scene) {
68 return isRegistered(scene.getName());
71 public boolean register(VeluxScene newScene) {
72 if (isRegistered(newScene)) {
73 logger.trace("register() ignoring scene {} as already known.", newScene);
76 logger.trace("register() registering new scene {}.", newScene);
77 existingScenesBySceneName.put(newScene.getName().toString(), newScene);
82 public VeluxScene get(SceneName sceneName) {
83 logger.trace("get({}) called.", sceneName);
84 if (!isRegistered(sceneName)) {
85 return VeluxScene.UNKNOWN;
87 return existingScenesBySceneName.getOrDefault(sceneName.toString(), VeluxScene.UNKNOWN);
90 public VeluxScene[] values() {
91 return existingScenesBySceneName.values().toArray(new VeluxScene[0]);
94 public int getNoMembers() {
95 logger.trace("getNoMembers() returns {}.", memberCount);
99 public String toString(boolean showSummary, String delimiter) {
100 StringBuilder sb = new StringBuilder();
103 sb.append(memberCount).append(" members: ");
105 for (VeluxScene scene : this.values()) {
106 sb.append(scene.toString()).append(delimiter);
108 if (sb.lastIndexOf(delimiter) > 0) {
109 sb.deleteCharAt(sb.lastIndexOf(delimiter));
111 return sb.toString();
115 public String toString() {
116 return toString(true, VeluxBindingConstants.OUTPUT_VALUE_SEPARATOR);