[linky] Console command completion (#13589)

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
This commit is contained in:
lolodomo 2022-10-25 09:29:58 +02:00 committed by GitHub
parent 6a76a596b4
commit 1d5eb58619
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 39 additions and 8 deletions

View File

@ -17,11 +17,15 @@ import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException; import java.time.format.DateTimeParseException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.linky.internal.LinkyBindingConstants; import org.openhab.binding.linky.internal.LinkyBindingConstants;
import org.openhab.binding.linky.internal.handler.LinkyHandler; import org.openhab.binding.linky.internal.handler.LinkyHandler;
import org.openhab.core.io.console.Console; 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.AbstractConsoleCommandExtension;
import org.openhab.core.io.console.extensions.ConsoleCommandExtension; import org.openhab.core.io.console.extensions.ConsoleCommandExtension;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
@ -40,9 +44,10 @@ import org.osgi.service.component.annotations.Reference;
@NonNullByDefault @NonNullByDefault
@Component(service = ConsoleCommandExtension.class) @Component(service = ConsoleCommandExtension.class)
public class LinkyCommandExtension extends AbstractConsoleCommandExtension { public class LinkyCommandExtension extends AbstractConsoleCommandExtension implements ConsoleCommandCompleter {
private static final String REPORT = "report"; private static final String REPORT = "report";
private static final StringsCompleter SUBCMD_COMPLETER = new StringsCompleter(List.of(REPORT), false);
private final ThingRegistry thingRegistry; private final ThingRegistry thingRegistry;
@ -55,13 +60,7 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension {
@Override @Override
public void execute(String[] args, Console console) { public void execute(String[] args, Console console) {
if (args.length >= 2) { if (args.length >= 2) {
Thing thing = null; Thing thing = getThing(args[0]);
try {
ThingUID thingUID = new ThingUID(args[0]);
thing = thingRegistry.get(thingUID);
} catch (IllegalArgumentException e) {
thing = null;
}
ThingHandler thingHandler = null; ThingHandler thingHandler = null;
LinkyHandler handler = null; LinkyHandler handler = null;
if (thing != null) { if (thing != null) {
@ -130,4 +129,36 @@ public class LinkyCommandExtension extends AbstractConsoleCommandExtension {
.asList(buildCommandUsage(String.format("<thingUID> %s <start day> <end day> [<separator>]", REPORT), .asList(buildCommandUsage(String.format("<thingUID> %s <start day> <end day> [<separator>]", REPORT),
"report daily consumptions between two dates")); "report daily consumptions between two dates"));
} }
@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 -> LinkyBindingConstants.THING_TYPE_LINKY.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 && LinkyBindingConstants.THING_TYPE_LINKY.equals(thing.getThingTypeUID())) {
return SUBCMD_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;
}
} }