]> git.basschouten.com Git - openhab-addons.git/blob
b58a1841879022b85f9d3b0902dcd9e1b2b1b7d7
[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.hdpowerview.internal.console;
14
15 import java.util.Arrays;
16 import java.util.List;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.binding.hdpowerview.internal.GatewayWebTargets;
21 import org.openhab.binding.hdpowerview.internal.HDPowerViewBindingConstants;
22 import org.openhab.binding.hdpowerview.internal.HDPowerViewWebTargets;
23 import org.openhab.binding.hdpowerview.internal.dto.ShadeData;
24 import org.openhab.binding.hdpowerview.internal.dto.gen3.Shade;
25 import org.openhab.binding.hdpowerview.internal.dto.responses.RepeaterData;
26 import org.openhab.binding.hdpowerview.internal.exceptions.HubException;
27 import org.openhab.binding.hdpowerview.internal.handler.GatewayBridgeHandler;
28 import org.openhab.binding.hdpowerview.internal.handler.HDPowerViewHubHandler;
29 import org.openhab.core.io.console.Console;
30 import org.openhab.core.io.console.ConsoleCommandCompleter;
31 import org.openhab.core.io.console.StringsCompleter;
32 import org.openhab.core.io.console.extensions.AbstractConsoleCommandExtension;
33 import org.openhab.core.io.console.extensions.ConsoleCommandExtension;
34 import org.openhab.core.thing.Thing;
35 import org.openhab.core.thing.ThingRegistry;
36 import org.openhab.core.thing.binding.ThingHandler;
37 import org.osgi.service.component.annotations.Activate;
38 import org.osgi.service.component.annotations.Component;
39 import org.osgi.service.component.annotations.Reference;
40
41 /**
42  * The {@link HDPowerViewCommandExtension} is responsible for handling console commands
43  *
44  * @author Jacob Laursen - Initial contribution
45  */
46 @NonNullByDefault
47 @Component(service = ConsoleCommandExtension.class)
48 public class HDPowerViewCommandExtension extends AbstractConsoleCommandExtension implements ConsoleCommandCompleter {
49
50     private static final String SHOW_IDS = "showIds";
51     private static final StringsCompleter SUBCMD_COMPLETER = new StringsCompleter(List.of(SHOW_IDS), false);
52
53     private final ThingRegistry thingRegistry;
54
55     @Activate
56     public HDPowerViewCommandExtension(final @Reference ThingRegistry thingRegistry) {
57         super(HDPowerViewBindingConstants.BINDING_ID, "Interact with the Hunter Douglas PowerView binding.");
58         this.thingRegistry = thingRegistry;
59     }
60
61     @Override
62     public void execute(String[] args, Console console) {
63         if (args.length != 1 || !SHOW_IDS.equals(args[0])) {
64             printUsage(console);
65             return;
66         }
67
68         for (Thing thing : thingRegistry.getAll()) {
69             ThingHandler thingHandler = thing.getHandler();
70             if (thingHandler instanceof HDPowerViewHubHandler hubHandler) {
71                 console.println("Generation 1/2 API hub: " + thing.getLabel());
72                 HDPowerViewWebTargets webTargets = hubHandler.getWebTargets();
73
74                 try {
75                     List<ShadeData> shades = webTargets.getShades().shadeData;
76                     if (shades != null) {
77                         console.println(" - Shades:");
78                         for (ShadeData shade : shades) {
79                             console.println("    - ID: " + shade.id + " (" + shade.getName() + ")");
80                         }
81                     }
82
83                     List<RepeaterData> repeaters = webTargets.getRepeaters().repeaterData;
84                     if (repeaters != null) {
85                         console.println(" - Repeaters:");
86                         for (RepeaterData repeater : repeaters) {
87                             console.println("    - ID: " + repeater.id + " (" + repeater.getName() + ")");
88                         }
89                     }
90                 } catch (HubException e) {
91                     console.println("Error retrieving ID's: " + e.getMessage());
92                 }
93             } else if (thingHandler instanceof GatewayBridgeHandler gatewayHandler) {
94                 console.println("Generation 3 API gateway: " + thing.getLabel());
95                 GatewayWebTargets webTargets = gatewayHandler.getWebTargets();
96
97                 try {
98                     List<Shade> shades = webTargets.getShades();
99                     if (!shades.isEmpty()) {
100                         console.println(" - Shades:");
101                         for (Shade shade : shades) {
102                             console.println("    - ID: " + shade.getId() + " (" + shade.getName() + ")");
103                         }
104                     }
105                 } catch (HubException e) {
106                     console.println("Error retrieving ID's: " + e.getMessage());
107                 }
108             }
109         }
110     }
111
112     @Override
113     public List<String> getUsages() {
114         return Arrays.asList(buildCommandUsage(SHOW_IDS, "list all shades and repeaters"));
115     }
116
117     @Override
118     public @Nullable ConsoleCommandCompleter getCompleter() {
119         return this;
120     }
121
122     @Override
123     public boolean complete(String[] args, int cursorArgumentIndex, int cursorPosition, List<String> candidates) {
124         if (cursorArgumentIndex <= 0) {
125             return SUBCMD_COMPLETER.complete(args, cursorArgumentIndex, cursorPosition, candidates);
126         }
127         return false;
128     }
129 }