Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/main/java/AeshExample.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.jboss.aesh.cl.GroupCommandDefinition;
import org.jboss.aesh.cl.Option;
import org.jboss.aesh.cl.OptionList;
import org.jboss.aesh.cl.activation.CommandActivator;
import org.jboss.aesh.cl.activation.OptionActivator;
import org.jboss.aesh.cl.builder.CommandBuilder;
import org.jboss.aesh.cl.internal.ProcessedOptionBuilder;
Expand Down Expand Up @@ -139,6 +140,7 @@ public void handleInterrupt(Console console) {
CommandRegistry registry = new AeshCommandRegistryBuilder()
.command(ExitCommand.class)
.command(fooCommand.create())
.command(HiddenCommand.class)
.command(LsCommand.class)
.command(TestConsoleCommand.class)
.command(PromptCommand.class)
Expand Down Expand Up @@ -176,6 +178,22 @@ public CommandResult execute(CommandInvocation commandInvocation) throws Command
return CommandResult.SUCCESS;
}
}

private static class HideActivator implements CommandActivator {
public boolean isActivated() {
return false;
}
}

@CommandDefinition(name = "hidden", description = "hidden command", activator = HideActivator.class)
public static class HiddenCommand implements Command {

@Override
public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
commandInvocation.print("Command exists but is not shown");
return CommandResult.SUCCESS;
}
}

@CommandDefinition(name = "run", description = "")
public static class RunCommand implements Command {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/org/jboss/aesh/cl/CommandDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import org.jboss.aesh.cl.activation.CommandActivator;
import org.jboss.aesh.cl.activation.NullCommandActivator;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
Expand All @@ -46,4 +48,6 @@
Class<? extends CommandValidator> validator() default NullCommandValidator.class;

Class<? extends ResultHandler> resultHandler() default NullResultHandler.class;

Class<? extends CommandActivator> activator() default NullCommandActivator.class;
}
5 changes: 4 additions & 1 deletion src/main/java/org/jboss/aesh/cl/GroupCommandDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import org.jboss.aesh.cl.activation.CommandActivator;
import org.jboss.aesh.cl.activation.NullCommandActivator;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
Expand All @@ -49,5 +51,6 @@
Class<? extends ResultHandler> resultHandler() default NullResultHandler.class;

Class<? extends Command>[] groupCommands() default {};


Class<? extends CommandActivator> activator() default NullCommandActivator.class;
}
35 changes: 35 additions & 0 deletions src/main/java/org/jboss/aesh/cl/activation/CommandActivator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aesh.cl.activation;

import org.jboss.aesh.cl.internal.ProcessedCommand;

/**
* @author jdenise@redhat.com
*/
public interface CommandActivator {

/**
* Activates the current command to be "visible".
*
* @return
*/
boolean isActivated();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
* as indicated by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aesh.cl.activation;

/**
* @author jdenise@redhat.com
*/
public class NullCommandActivator implements CommandActivator {
@Override
public boolean isActivated() {
return true;
}
}
17 changes: 15 additions & 2 deletions src/main/java/org/jboss/aesh/cl/internal/ProcessedCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.aesh.cl.activation.CommandActivator;
import org.jboss.aesh.cl.activation.NullCommandActivator;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
Expand All @@ -45,13 +47,18 @@ public class ProcessedCommand<C extends Command> {
private CommandValidator validator;
private ResultHandler resultHandler = new NullResultHandler();
private CommandPopulator populator;

private CommandActivator activator;

private List<ProcessedOption> options;
private ProcessedOption argument;
private C command;
private final List<String> aliases;

public ProcessedCommand(String name, List<String> aliases, C command, String description, CommandValidator validator, ResultHandler resultHandler, ProcessedOption argument, List<ProcessedOption> options, CommandPopulator populator) throws OptionParserException {
public ProcessedCommand(String name, List<String> aliases, C command,
String description, CommandValidator validator,
ResultHandler resultHandler,
ProcessedOption argument, List<ProcessedOption> options,
CommandPopulator populator, CommandActivator activator) throws OptionParserException {
setName(name);
setDescription(description);
this.aliases = aliases == null ? Collections.<String>emptyList() : aliases;
Expand All @@ -60,6 +67,7 @@ public ProcessedCommand(String name, List<String> aliases, C command, String des
this.argument = argument;
this.options = new ArrayList<>();
this.command = command;
this.activator = activator == null ? new NullCommandActivator() : activator;
if(populator == null)
this.populator = new AeshCommandPopulator(this.command);
else
Expand All @@ -71,6 +79,10 @@ public List<ProcessedOption> getOptions() {
return options;
}

public CommandActivator getActivator() {
return activator;
}

public List<String> getAliases() {
return aliases;
}
Expand Down Expand Up @@ -341,6 +353,7 @@ public boolean hasUniqueLongOption(String optionName) {
public void updateInvocationProviders(InvocationProviders invocationProviders) {
for (ProcessedOption option : getOptions())
option.updateInvocationProviders(invocationProviders);
activator = invocationProviders.getCommandActivatorProvider().enhanceCommandActivator(activator);
}

public void updateSettings(Settings settings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.aesh.cl.activation.CommandActivator;
import org.jboss.aesh.cl.activation.NullCommandActivator;

/**
* Build a {@link org.jboss.aesh.cl.internal.ProcessedCommand} object using the Builder pattern.
Expand All @@ -49,7 +51,8 @@ public class ProcessedCommandBuilder {
private CommandPopulator populator;
private Command command;
private List<String> aliases;

private CommandActivator activator;

public ProcessedCommandBuilder() {
options = new ArrayList<>();
}
Expand Down Expand Up @@ -113,6 +116,23 @@ public ProcessedCommandBuilder populator(CommandPopulator populator) {
this.populator = populator;
return this;
}

public ProcessedCommandBuilder activator(CommandActivator activator) {
this.activator = activator;
return this;
}

public ProcessedCommandBuilder activator(Class<? extends CommandActivator> activator) {
this.activator = initActivator(activator);
return this;
}

private CommandActivator initActivator(Class<? extends CommandActivator> activator) {
if(activator != null && activator != NullCommandActivator.class)
return ReflectionUtil.newInstance(activator);
else
return new NullCommandActivator();
}

public ProcessedCommandBuilder command(Command command) {
this.command = command;
Expand Down Expand Up @@ -145,6 +165,7 @@ public ProcessedCommand create() throws CommandLineParserException {
if(resultHandler == null)
resultHandler = new NullResultHandler();

return new ProcessedCommand(name, aliases, command, description, validator, resultHandler, argument, options, populator);
return new ProcessedCommand(name, aliases, command, description, validator,
resultHandler, argument, options, populator, activator);
}
}
6 changes: 5 additions & 1 deletion src/main/java/org/jboss/aesh/cl/parser/ParserGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import org.jboss.aesh.console.command.activator.AeshCommandActivatorProvider;

/**
* Generates a {@link AeshCommandLineParser} based on annotations defined in
Expand All @@ -68,6 +69,7 @@ private static AeshCommandContainer doGenerateCommandLineParser(Command commandO
if(command != null) {
ProcessedCommand processedCommand = new ProcessedCommandBuilder()
.name(command.name())
.activator(command.activator())
.aliases(Arrays.asList(command.aliases()))
.description(command.description())
.validator(command.validator())
Expand All @@ -87,6 +89,7 @@ private static AeshCommandContainer doGenerateCommandLineParser(Command commandO
if(groupCommand != null) {
ProcessedCommand processedGroupCommand = new ProcessedCommandBuilder()
.name(groupCommand.name())
.activator(groupCommand.activator())
.aliases(Arrays.asList(groupCommand.aliases()))
.description(groupCommand.description())
.validator(groupCommand.validator())
Expand Down Expand Up @@ -310,7 +313,8 @@ public static void parseAndPopulate(Command instance, String input) throws Comma
new AeshConverterInvocationProvider(),
new AeshCompleterInvocationProvider(),
new AeshValidatorInvocationProvider(),
new AeshOptionActivatorProvider());
new AeshOptionActivatorProvider(),
new AeshCommandActivatorProvider());
cl.getCommandPopulator().populateObject( cl.parse(input), invocationProviders, null, true);
}

Expand Down
13 changes: 12 additions & 1 deletion src/main/java/org/jboss/aesh/console/AeshConsoleBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@

import java.util.ArrayList;
import java.util.List;
import org.jboss.aesh.console.command.activator.AeshCommandActivatorProvider;
import org.jboss.aesh.console.command.activator.CommandActivatorProvider;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
Expand All @@ -54,6 +56,7 @@ public class AeshConsoleBuilder {
private ConverterInvocationProvider converterInvocationProvider;
private ValidatorInvocationProvider validatorInvocationProvider;
private OptionActivatorProvider optionActivatorProvider;
private CommandActivatorProvider commandActivatorProvider;
private List<Command> commands;
private String execute;

Expand Down Expand Up @@ -105,6 +108,11 @@ public AeshConsoleBuilder optionActivatorProvider(OptionActivatorProvider option
this.optionActivatorProvider = optionActivatorProvider;
return this;
}

public AeshConsoleBuilder commandActivatorProvider(CommandActivatorProvider commandActivatorProvider) {
this.commandActivatorProvider = commandActivatorProvider;
return this;
}

public AeshConsoleBuilder manProvider(ManProvider manProvider) {
this.manProvider = manProvider;
Expand Down Expand Up @@ -145,11 +153,14 @@ public AeshConsole create() {

if(optionActivatorProvider == null)
optionActivatorProvider = new AeshOptionActivatorProvider();

if(commandActivatorProvider == null)
commandActivatorProvider = new AeshCommandActivatorProvider();

AeshConsoleImpl aeshConsole =
new AeshConsoleImpl(settings, registry, commandInvocationServices,
commandNotFoundHandler, completerInvocationProvider, converterInvocationProvider,
validatorInvocationProvider, optionActivatorProvider, manProvider);
validatorInvocationProvider, optionActivatorProvider, manProvider, commandActivatorProvider);

if(prompt != null)
aeshConsole.setPrompt(prompt);
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/jboss/aesh/console/AeshConsoleImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.jboss.aesh.console.command.CommandNotFoundException;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.console.command.activator.AeshOptionActivatorProvider;
import org.jboss.aesh.console.command.activator.CommandActivatorProvider;
import org.jboss.aesh.console.command.activator.OptionActivatorProvider;
import org.jboss.aesh.console.command.completer.CompleterInvocationProvider;
import org.jboss.aesh.console.command.container.CommandContainer;
Expand Down Expand Up @@ -80,14 +81,15 @@ public class AeshConsoleImpl implements AeshConsole {
ConverterInvocationProvider converterInvocationProvider,
ValidatorInvocationProvider validatorInvocationProvider,
OptionActivatorProvider optionActivatorProvider,
ManProvider manProvider) {
ManProvider manProvider,
CommandActivatorProvider commandActivatorProvider) {
this.registry = registry;
this.commandInvocationServices = commandInvocationServices;
this.commandNotFoundHandler = commandNotFoundHandler;
this.manProvider = manProvider;
this.invocationProviders =
new AeshInvocationProviders(converterInvocationProvider, completerInvocationProvider,
validatorInvocationProvider, optionActivatorProvider);
validatorInvocationProvider, optionActivatorProvider, commandActivatorProvider);

console = new Console(settings);
console.setConsoleCallback(new AeshConsoleCallbackImpl(this));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/
package org.jboss.aesh.console;

import org.jboss.aesh.console.command.activator.CommandActivatorProvider;
import org.jboss.aesh.console.command.activator.OptionActivatorProvider;
import org.jboss.aesh.console.command.completer.CompleterInvocationProvider;
import org.jboss.aesh.console.command.converter.ConverterInvocationProvider;
Expand All @@ -33,21 +34,29 @@ public class AeshInvocationProviders implements InvocationProviders {
private final CompleterInvocationProvider completerInvocationProvider;
private final ValidatorInvocationProvider validatorInvocationProvider;
private final OptionActivatorProvider optionActivatorProvider;
private final CommandActivatorProvider commandActivatorProvider;

public AeshInvocationProviders(ConverterInvocationProvider converterInvocationProvider,
CompleterInvocationProvider completerInvocationProvider,
ValidatorInvocationProvider validatorInvocationProvider,
OptionActivatorProvider optionActivatorProvider) {
OptionActivatorProvider optionActivatorProvider,
CommandActivatorProvider commandActivatorProvider) {
this.converterInvocationProvider = converterInvocationProvider;
this.completerInvocationProvider = completerInvocationProvider;
this.validatorInvocationProvider = validatorInvocationProvider;
this.optionActivatorProvider = optionActivatorProvider;
this.commandActivatorProvider = commandActivatorProvider;
}

@Override
public ConverterInvocationProvider getConverterProvider() {
return converterInvocationProvider;
}

@Override
public CommandActivatorProvider getCommandActivatorProvider() {
return commandActivatorProvider;
}

@Override
public CompleterInvocationProvider getCompleterProvider() {
Expand Down
Loading