Search in sources :

Example 1 with Command

use of org.apache.nifi.toolkit.cli.api.Command in project nifi by apache.

the class CLIMain method runInteractiveCLI.

/**
 * Runs the interactive CLI.
 *
 * @throws IOException if an error occurs
 */
private static void runInteractiveCLI() throws IOException {
    // Logger.getLogger("org.jline").setLevel(Level.FINE);
    try (final Terminal terminal = TerminalBuilder.builder().name(SHELL_NAME).system(true).nativeSignals(true).signalHandler(Terminal.SignalHandler.SIG_IGN).build();
        final PrintStream output = new PrintStream(terminal.output(), true)) {
        printHeader(BANNER_FILE, output);
        final Context context = createContext(output, true);
        final Map<String, Command> topLevelCommands = CommandFactory.createTopLevelCommands(context);
        final Map<String, CommandGroup> commandGroups = CommandFactory.createCommandGroups(context);
        final CommandProcessor commandProcessor = new CommandProcessor(topLevelCommands, commandGroups, context);
        final Completer completer = new CLICompleter(topLevelCommands.values(), commandGroups.values());
        final LineReader reader = LineReaderBuilder.builder().appName(SHELL_NAME).terminal(terminal).completer(completer).build();
        reader.setOpt(LineReader.Option.AUTO_FRESH_LINE);
        reader.unsetOpt(LineReader.Option.INSERT_TAB);
        while (true) {
            try {
                final String line = reader.readLine(PROMPT);
                if (StringUtils.isBlank(line)) {
                    continue;
                }
                final ParsedLine parsedLine = reader.getParsedLine();
                final String[] parsedArgs = parsedLine.words().toArray(new String[parsedLine.words().size()]);
                commandProcessor.process(parsedArgs);
            } catch (UserInterruptException e) {
            // Ignore
            } catch (EndOfFileException e) {
                return;
            }
        }
    }
}
Also used : StandardContext(org.apache.nifi.toolkit.cli.impl.context.StandardContext) Context(org.apache.nifi.toolkit.cli.api.Context) PrintStream(java.io.PrintStream) EndOfFileException(org.jline.reader.EndOfFileException) CommandGroup(org.apache.nifi.toolkit.cli.api.CommandGroup) Completer(org.jline.reader.Completer) UserInterruptException(org.jline.reader.UserInterruptException) Terminal(org.jline.terminal.Terminal) Command(org.apache.nifi.toolkit.cli.api.Command) LineReader(org.jline.reader.LineReader) ParsedLine(org.jline.reader.ParsedLine) CommandProcessor(org.apache.nifi.toolkit.cli.impl.command.CommandProcessor)

Example 2 with Command

use of org.apache.nifi.toolkit.cli.api.Command in project nifi by apache.

the class CommandFactory method createTopLevelCommands.

public static Map<String, Command> createTopLevelCommands(final Context context) {
    final List<Command> commandList = new ArrayList<>();
    commandList.add(new Help());
    commandList.add(new Exit());
    final Map<String, Command> commandMap = new TreeMap<>();
    commandList.stream().forEach(cmd -> {
        cmd.initialize(context);
        commandMap.put(cmd.getName(), cmd);
    });
    return Collections.unmodifiableMap(commandMap);
}
Also used : Help(org.apache.nifi.toolkit.cli.impl.command.misc.Help) Command(org.apache.nifi.toolkit.cli.api.Command) ArrayList(java.util.ArrayList) TreeMap(java.util.TreeMap) Exit(org.apache.nifi.toolkit.cli.impl.command.misc.Exit)

Example 3 with Command

use of org.apache.nifi.toolkit.cli.api.Command in project nifi by apache.

the class CommandProcessor method processGroupCommand.

private int processGroupCommand(final String commandGroupStr, final String[] args) {
    if (args.length <= 1) {
        printBasicUsage("No command provided to " + commandGroupStr);
        return -1;
    }
    final String commandStr = args[1];
    final CommandGroup commandGroup = commandGroups.get(commandGroupStr);
    final Command command = commandGroup.getCommands().stream().filter(c -> c.getName().equals(commandStr)).findFirst().orElse(null);
    if (command == null) {
        printBasicUsage("Unknown command '" + commandGroupStr + " " + commandStr + "'");
        return -1;
    }
    try {
        final String[] otherArgs = Arrays.copyOfRange(args, 2, args.length, String[].class);
        return processCommand(otherArgs, command);
    } catch (Exception e) {
        command.printUsage(e.getMessage());
        return -1;
    }
}
Also used : Command(org.apache.nifi.toolkit.cli.api.Command) CommandGroup(org.apache.nifi.toolkit.cli.api.CommandGroup) CommandException(org.apache.nifi.toolkit.cli.api.CommandException) ParseException(org.apache.commons.cli.ParseException)

Example 4 with Command

use of org.apache.nifi.toolkit.cli.api.Command in project nifi by apache.

the class NiFiCLIMainRunner method main.

public static void main(String[] args) {
    final String[] cmdArgs = ("registry list-buckets help " + "").split("[ ]");
    final Session session = new InMemorySession();
    final ClientFactory<NiFiClient> niFiClientFactory = new NiFiClientFactory();
    final ClientFactory<NiFiRegistryClient> nifiRegClientFactory = new NiFiRegistryClientFactory();
    final Context context = new StandardContext.Builder().output(System.out).session(session).nifiClientFactory(niFiClientFactory).nifiRegistryClientFactory(nifiRegClientFactory).build();
    final Map<String, Command> commands = CommandFactory.createTopLevelCommands(context);
    final Map<String, CommandGroup> commandGroups = CommandFactory.createCommandGroups(context);
    final CommandProcessor processor = new CommandProcessor(commands, commandGroups, context);
    processor.process(cmdArgs);
}
Also used : StandardContext(org.apache.nifi.toolkit.cli.impl.context.StandardContext) Context(org.apache.nifi.toolkit.cli.api.Context) NiFiClientFactory(org.apache.nifi.toolkit.cli.impl.client.NiFiClientFactory) NiFiClient(org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient) NiFiRegistryClientFactory(org.apache.nifi.toolkit.cli.impl.client.NiFiRegistryClientFactory) CommandGroup(org.apache.nifi.toolkit.cli.api.CommandGroup) NiFiRegistryClient(org.apache.nifi.registry.client.NiFiRegistryClient) Command(org.apache.nifi.toolkit.cli.api.Command) InMemorySession(org.apache.nifi.toolkit.cli.impl.session.InMemorySession) StandardContext(org.apache.nifi.toolkit.cli.impl.context.StandardContext) CommandProcessor(org.apache.nifi.toolkit.cli.impl.command.CommandProcessor) Session(org.apache.nifi.toolkit.cli.api.Session) InMemorySession(org.apache.nifi.toolkit.cli.impl.session.InMemorySession)

Example 5 with Command

use of org.apache.nifi.toolkit.cli.api.Command in project nifi by apache.

the class TestCLICompleter method setupCompleter.

@BeforeClass
public static void setupCompleter() {
    final Session session = new InMemorySession();
    final ClientFactory<NiFiClient> niFiClientFactory = new NiFiClientFactory();
    final ClientFactory<NiFiRegistryClient> nifiRegClientFactory = new NiFiRegistryClientFactory();
    final Context context = new StandardContext.Builder().output(System.out).session(session).nifiClientFactory(niFiClientFactory).nifiRegistryClientFactory(nifiRegClientFactory).build();
    final Map<String, Command> commands = CommandFactory.createTopLevelCommands(context);
    final Map<String, CommandGroup> commandGroups = CommandFactory.createCommandGroups(context);
    completer = new CLICompleter(commands.values(), commandGroups.values());
    lineReader = Mockito.mock(LineReader.class);
}
Also used : StandardContext(org.apache.nifi.toolkit.cli.impl.context.StandardContext) Context(org.apache.nifi.toolkit.cli.api.Context) NiFiClientFactory(org.apache.nifi.toolkit.cli.impl.client.NiFiClientFactory) NiFiClient(org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient) NiFiRegistryClientFactory(org.apache.nifi.toolkit.cli.impl.client.NiFiRegistryClientFactory) NiFiRegistryCommandGroup(org.apache.nifi.toolkit.cli.impl.command.registry.NiFiRegistryCommandGroup) CommandGroup(org.apache.nifi.toolkit.cli.api.CommandGroup) NiFiRegistryClient(org.apache.nifi.registry.client.NiFiRegistryClient) Command(org.apache.nifi.toolkit.cli.api.Command) InMemorySession(org.apache.nifi.toolkit.cli.impl.session.InMemorySession) StandardContext(org.apache.nifi.toolkit.cli.impl.context.StandardContext) LineReader(org.jline.reader.LineReader) Session(org.apache.nifi.toolkit.cli.api.Session) InMemorySession(org.apache.nifi.toolkit.cli.impl.session.InMemorySession) BeforeClass(org.junit.BeforeClass)

Aggregations

Command (org.apache.nifi.toolkit.cli.api.Command)6 CommandGroup (org.apache.nifi.toolkit.cli.api.CommandGroup)5 Context (org.apache.nifi.toolkit.cli.api.Context)4 StandardContext (org.apache.nifi.toolkit.cli.impl.context.StandardContext)4 CommandProcessor (org.apache.nifi.toolkit.cli.impl.command.CommandProcessor)3 NiFiRegistryClient (org.apache.nifi.registry.client.NiFiRegistryClient)2 Session (org.apache.nifi.toolkit.cli.api.Session)2 NiFiClientFactory (org.apache.nifi.toolkit.cli.impl.client.NiFiClientFactory)2 NiFiRegistryClientFactory (org.apache.nifi.toolkit.cli.impl.client.NiFiRegistryClientFactory)2 NiFiClient (org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient)2 InMemorySession (org.apache.nifi.toolkit.cli.impl.session.InMemorySession)2 LineReader (org.jline.reader.LineReader)2 PrintStream (java.io.PrintStream)1 ArrayList (java.util.ArrayList)1 TreeMap (java.util.TreeMap)1 ParseException (org.apache.commons.cli.ParseException)1 CommandException (org.apache.nifi.toolkit.cli.api.CommandException)1 Exit (org.apache.nifi.toolkit.cli.impl.command.misc.Exit)1 Help (org.apache.nifi.toolkit.cli.impl.command.misc.Help)1 NiFiRegistryCommandGroup (org.apache.nifi.toolkit.cli.impl.command.registry.NiFiRegistryCommandGroup)1