From 7efff5b3748bb1961cb3bd4078ba533d7c052d21 Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Thu, 23 Oct 2025 16:21:41 -0600 Subject: [PATCH] Send source for console commands to items (#5079) Signed-off-by: Cody Cutrer --- .../org/openhab/core/io/console/karaf/OSGiConsole.java | 6 ++++++ .../main/java/org/openhab/core/io/console/Console.java | 9 +++++++++ .../extensions/AbstractConsoleCommandExtension.java | 1 - .../internal/extension/ItemConsoleCommandExtension.java | 1 - .../internal/extension/SendConsoleCommandExtension.java | 5 ++++- .../extension/UpdateConsoleCommandExtension.java | 5 ++++- 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.core.io.console.karaf/src/main/java/org/openhab/core/io/console/karaf/OSGiConsole.java b/bundles/org.openhab.core.io.console.karaf/src/main/java/org/openhab/core/io/console/karaf/OSGiConsole.java index 808786526..2c75d8e1b 100644 --- a/bundles/org.openhab.core.io.console.karaf/src/main/java/org/openhab/core/io/console/karaf/OSGiConsole.java +++ b/bundles/org.openhab.core.io.console.karaf/src/main/java/org/openhab/core/io/console/karaf/OSGiConsole.java @@ -76,6 +76,12 @@ public class OSGiConsole implements Console { } } + @Override + public @Nullable String getUser() { + Object result = session.get("USER"); + return result != null ? result.toString() : null; + } + public Session getSession() { return session; } diff --git a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/Console.java b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/Console.java index 870e78188..d775d67cf 100644 --- a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/Console.java +++ b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/Console.java @@ -53,4 +53,13 @@ public interface Console { default String readLine(String prompt, final @Nullable Character mask) throws IOException { throw new UnsupportedOperationException("readLine not supported"); } + + /** + * Returns the user name associated with the console, or null if no user is associated. + * + * @return the user name, or null if no user is associated + */ + default @Nullable String getUser() { + return null; + } } diff --git a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/extensions/AbstractConsoleCommandExtension.java b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/extensions/AbstractConsoleCommandExtension.java index f13568e74..bba38d72d 100644 --- a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/extensions/AbstractConsoleCommandExtension.java +++ b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/extensions/AbstractConsoleCommandExtension.java @@ -22,7 +22,6 @@ import org.openhab.core.io.console.Console; */ @NonNullByDefault public abstract class AbstractConsoleCommandExtension implements ConsoleCommandExtension { - private final String cmd; private final String desc; diff --git a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/ItemConsoleCommandExtension.java b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/ItemConsoleCommandExtension.java index 8921a6f97..bdbb09247 100644 --- a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/ItemConsoleCommandExtension.java +++ b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/ItemConsoleCommandExtension.java @@ -44,7 +44,6 @@ import org.osgi.service.component.annotations.Reference; @Component(service = ConsoleCommandExtension.class) @NonNullByDefault public class ItemConsoleCommandExtension extends AbstractConsoleCommandExtension { - private static final String SUBCMD_LIST = "list"; private static final String SUBCMD_CLEAR = "clear"; private static final String SUBCMD_REMOVE = "remove"; diff --git a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/SendConsoleCommandExtension.java b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/SendConsoleCommandExtension.java index c9b368497..d3472f0cd 100644 --- a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/SendConsoleCommandExtension.java +++ b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/SendConsoleCommandExtension.java @@ -17,6 +17,7 @@ import java.util.Objects; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.events.AbstractEvent; import org.openhab.core.events.EventPublisher; import org.openhab.core.io.console.Console; import org.openhab.core.io.console.ConsoleCommandCompleter; @@ -44,6 +45,7 @@ import org.osgi.service.component.annotations.Reference; @Component(service = ConsoleCommandExtension.class) @NonNullByDefault public class SendConsoleCommandExtension extends AbstractConsoleCommandExtension { + private static final String CONSOLE_SOURCE = "org.openhab.core.io.console"; private final ItemRegistry itemRegistry; private final EventPublisher eventPublisher; @@ -71,7 +73,8 @@ public class SendConsoleCommandExtension extends AbstractConsoleCommandExtension String commandName = args[1]; Command command = TypeParser.parseCommand(item.getAcceptedCommandTypes(), commandName); if (command != null) { - eventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command)); + eventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command, + AbstractEvent.buildSource(CONSOLE_SOURCE, console.getUser()))); console.println("Command has been sent successfully."); } else { console.println( diff --git a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/UpdateConsoleCommandExtension.java b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/UpdateConsoleCommandExtension.java index 82e954769..87405ceb2 100644 --- a/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/UpdateConsoleCommandExtension.java +++ b/bundles/org.openhab.core.io.console/src/main/java/org/openhab/core/io/console/internal/extension/UpdateConsoleCommandExtension.java @@ -16,6 +16,7 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.events.AbstractEvent; import org.openhab.core.events.EventPublisher; import org.openhab.core.io.console.Console; import org.openhab.core.io.console.ConsoleCommandCompleter; @@ -43,6 +44,7 @@ import org.osgi.service.component.annotations.Reference; @Component(service = ConsoleCommandExtension.class) @NonNullByDefault public class UpdateConsoleCommandExtension extends AbstractConsoleCommandExtension { + private static final String CONSOLE_SOURCE = "org.openhab.core.io.console"; private final ItemRegistry itemRegistry; private final EventPublisher eventPublisher; @@ -70,7 +72,8 @@ public class UpdateConsoleCommandExtension extends AbstractConsoleCommandExtensi String stateName = args[1]; State state = TypeParser.parseState(item.getAcceptedDataTypes(), stateName); if (state != null) { - eventPublisher.post(ItemEventFactory.createStateEvent(item.getName(), state)); + eventPublisher.post(ItemEventFactory.createStateEvent(item.getName(), state, + AbstractEvent.buildSource(CONSOLE_SOURCE, console.getUser()))); console.println("Update has been sent successfully."); } else { console.println("Error: State '" + stateName + "' is not valid for item '" + itemName + "'");