Skip to content

Commit

Permalink
[hue] Console command completion (openhab#13597)
Browse files Browse the repository at this point in the history
Signed-off-by: Laurent Garnier <lg.hc@free.fr>
  • Loading branch information
lolodomo authored and borazslo committed Jan 7, 2023
1 parent f41c610 commit bc4852f
Showing 1 changed file with 44 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,16 @@

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.hue.internal.HueBindingConstants;
import org.openhab.binding.hue.internal.handler.HueBridgeHandler;
import org.openhab.binding.hue.internal.handler.HueGroupHandler;
import org.openhab.core.io.console.Console;
import org.openhab.core.io.console.ConsoleCommandCompleter;
import org.openhab.core.io.console.StringsCompleter;
import org.openhab.core.io.console.extensions.AbstractConsoleCommandExtension;
import org.openhab.core.io.console.extensions.ConsoleCommandExtension;
import org.openhab.core.thing.Thing;
Expand All @@ -37,10 +42,12 @@

@NonNullByDefault
@Component(service = ConsoleCommandExtension.class)
public class HueCommandExtension extends AbstractConsoleCommandExtension {
public class HueCommandExtension extends AbstractConsoleCommandExtension implements ConsoleCommandCompleter {

private static final String USER_NAME = "username";
private static final String SCENES = "scenes";
private static final StringsCompleter SUBCMD_COMPLETER = new StringsCompleter(List.of(USER_NAME, SCENES), false);
private static final StringsCompleter SCENES_COMPLETER = new StringsCompleter(List.of(SCENES), false);

private final ThingRegistry thingRegistry;

Expand All @@ -53,13 +60,7 @@ public HueCommandExtension(final @Reference ThingRegistry thingRegistry) {
@Override
public void execute(String[] args, Console console) {
if (args.length == 2) {
Thing thing = null;
try {
ThingUID thingUID = new ThingUID(args[0]);
thing = thingRegistry.get(thingUID);
} catch (IllegalArgumentException e) {
thing = null;
}
Thing thing = getThing(args[0]);
ThingHandler thingHandler = null;
HueBridgeHandler bridgeHandler = null;
HueGroupHandler groupHandler = null;
Expand Down Expand Up @@ -114,4 +115,39 @@ public List<String> getUsages() {
buildCommandUsage("<bridgeUID> " + SCENES, "list all the scenes with their id"),
buildCommandUsage("<groupThingUID> " + SCENES, "list all the scenes from this group with their id") });
}

@Override
public @Nullable ConsoleCommandCompleter getCompleter() {
return this;
}

@Override
public boolean complete(String[] args, int cursorArgumentIndex, int cursorPosition, List<String> candidates) {
if (cursorArgumentIndex <= 0) {
return new StringsCompleter(thingRegistry.getAll().stream()
.filter(t -> HueBindingConstants.THING_TYPE_BRIDGE.equals(t.getThingTypeUID())
|| HueBindingConstants.THING_TYPE_GROUP.equals(t.getThingTypeUID()))
.map(t -> t.getUID().getAsString()).collect(Collectors.toList()), true).complete(args,
cursorArgumentIndex, cursorPosition, candidates);
} else if (cursorArgumentIndex == 1) {
Thing thing = getThing(args[0]);
if (thing != null && HueBindingConstants.THING_TYPE_BRIDGE.equals(thing.getThingTypeUID())) {
return SUBCMD_COMPLETER.complete(args, cursorArgumentIndex, cursorPosition, candidates);
} else if (thing != null && HueBindingConstants.THING_TYPE_GROUP.equals(thing.getThingTypeUID())) {
return SCENES_COMPLETER.complete(args, cursorArgumentIndex, cursorPosition, candidates);
}
}
return false;
}

private @Nullable Thing getThing(String uid) {
Thing thing = null;
try {
ThingUID thingUID = new ThingUID(uid);
thing = thingRegistry.get(thingUID);
} catch (IllegalArgumentException e) {
thing = null;
}
return thing;
}
}

0 comments on commit bc4852f

Please sign in to comment.