use of org.aesh.command.Command in project wildfly-core by wildfly.
the class DeployArchiveCommand method buildRequest.
/**
* null attachments means that the command is in a batch, non null means
* command executed.
*
* Inside a batch, the attachments must be added to the existing batch and
* NOT to the temporary batch created to build the composite request.
* Outside of a batch, the attachments MUST be added to the passed non null
* attachments.
*
* @param context
* @param attachments
* @return
* @throws CommandFormatException
*/
@Override
public ModelNode buildRequest(CommandContext context, Attachments attachments) throws CommandFormatException {
CommandContext ctx = context;
TempFileProvider tempFileProvider;
MountHandle root;
try {
String name = "cli-" + System.currentTimeMillis();
tempFileProvider = TempFileProvider.create(name, Executors.newSingleThreadScheduledExecutor((r) -> new Thread(r, "CLI (un)deploy archive tempFile")), true);
root = extractArchive(file, tempFileProvider, name);
} catch (IOException e) {
e.printStackTrace();
throw new OperationFormatException("Unable to extract archive '" + file.getAbsolutePath() + "' to temporary location");
}
Consumer<Attachments> cl = (a) -> {
VFSUtils.safeClose(root, tempFileProvider);
};
if (attachments != null) {
attachments.addConsumer(cl);
}
final File currentDir = ctx.getCurrentDir();
ctx.setCurrentDir(root.getMountSource());
String holdbackBatch = activateNewBatch(ctx);
try {
if (script == null) {
script = getDefaultScript();
}
File scriptFile = new File(ctx.getCurrentDir(), script);
if (!scriptFile.exists()) {
throw new CommandFormatException("ERROR: script '" + script + "' not found.");
}
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(scriptFile));
String line = reader.readLine();
while (!ctx.isTerminated() && line != null) {
context.handle(line);
line = reader.readLine();
}
} catch (FileNotFoundException e) {
throw new CommandFormatException("ERROR: script '" + script + "' not found.");
} catch (IOException e) {
throw new CommandFormatException("Failed to read the next command from " + scriptFile.getName() + ": " + e.getMessage(), e);
} catch (CommandLineException ex) {
throw new CommandFormatException(ex);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
return ctx.getBatchManager().getActiveBatch().toRequest();
} catch (CommandFormatException cfex) {
cl.accept(attachments);
throw cfex;
} finally {
// reset current dir in context
ctx.setCurrentDir(currentDir);
discardBatch(ctx, holdbackBatch, attachments, cl);
}
}
use of org.aesh.command.Command in project wildfly-core by wildfly.
the class ExtensionsLoader method loadHandlers.
/**
* Using the client, iterates through the available domain management model extensions
* and tries to load CLI command handlers from their modules.
*
* @param registry
* @param address
* @param client
*/
void loadHandlers(ControllerAddress address) throws CommandLineException, CommandLineParserException {
ModelControllerClient client = ctx.getModelControllerClient();
assert client != null : "client is null";
if (moduleLoader == null) {
ctx.printLine("Warning! The CLI is running in a non-modular environment and cannot load commands from management extensions.");
return;
}
if (address != null && currentAddress != null && address.equals(currentAddress)) {
return;
}
// remove previously loaded commands
resetHandlers();
currentAddress = address;
final ModelNode req = new ModelNode();
req.get(Util.ADDRESS).setEmptyList();
req.get(Util.OPERATION).set(Util.READ_CHILDREN_RESOURCES);
req.get(Util.CHILD_TYPE).set(Util.EXTENSION);
final ModelNode response;
try {
response = client.execute(req);
} catch (IOException e) {
throw new CommandLineException("Extensions loader failed to read extensions", e);
}
if (!Util.isSuccess(response)) {
throw new CommandLineException("Extensions loader failed to read extensions: " + Util.getFailureDescription(response));
}
final ModelNode result = response.get(Util.RESULT);
if (!result.isDefined()) {
throw new CommandLineException("Extensions loader failed to read extensions: " + result.asString());
}
for (Property ext : result.asPropertyList()) {
ModelNode module = ext.getValue().get(Util.MODULE);
if (!module.isDefined()) {
addError("Extension " + ext.getName() + " is missing module attribute");
} else {
final ModuleIdentifier moduleId = ModuleIdentifier.fromString(module.asString());
ModuleClassLoader cl;
try {
cl = moduleLoader.loadModule(moduleId).getClassLoader();
ServiceLoader<CommandHandlerProvider> loader = ServiceLoader.load(CommandHandlerProvider.class, cl);
for (CommandHandlerProvider provider : loader) {
try {
registry.registerHandler(provider.createCommandHandler(ctx), provider.isTabComplete(), provider.getNames());
addHandlers(Arrays.asList(provider.getNames()));
} catch (CommandRegistry.RegisterHandlerException e) {
addError(e.getLocalizedMessage());
final List<String> addedCommands = new ArrayList<String>(Arrays.asList(provider.getNames()));
addedCommands.removeAll(e.getNotAddedNames());
addHandlers(addedCommands);
}
}
ServiceLoader<Command> loader2 = ServiceLoader.load(Command.class, cl);
for (Command provider : loader2) {
try {
CommandContainer container = aeshRegistry.addCommand(provider);
addCommand(container.getParser().getProcessedCommand().name());
} catch (CommandLineException e) {
addError(e.getLocalizedMessage());
}
}
} catch (ModuleLoadException e) {
addError("Module " + module.asString() + " from extension " + ext.getName() + " available on the server couldn't be loaded locally: " + e.getLocalizedMessage());
}
}
}
if (!errors.isEmpty()) {
ctx.printLine("Warning! There were errors trying to load extensions. For more details, please, execute 'extension-commands --errors'");
}
}
use of org.aesh.command.Command in project wildfly-core by wildfly.
the class AeshCommands method addExtraCommands.
private void addExtraCommands(Iterable<Command> loader, List<String> filter, Set<String> skip, Map<String, String> renaming) throws CommandLineException, CommandLineParserException {
for (Command command : loader) {
if (filter != null && !filter.isEmpty()) {
String name = getRegistry().getCommandName(command);
if (!filter.contains(name) || skip.contains(name)) {
continue;
}
}
CommandContainer c = getRegistry().addCommand(command, renaming, false);
plugins.add(c.getParser().getProcessedCommand().name());
}
}
use of org.aesh.command.Command in project infinispan by infinispan.
the class SiteCompleter method getAvailableItems.
@Override
protected Collection<String> getAvailableItems(ContextAwareCompleterInvocation invocation) throws IOException {
Context context = invocation.context;
Command<?> cmd = invocation.getCommand();
Connection connection = context.getConnection();
Optional<String> cacheName = getCacheName(context, cmd);
return cacheName.map(name -> getAvailableSites(connection, name)).orElseGet(connection::getSitesView);
}
use of org.aesh.command.Command in project wildfly-core by wildfly.
the class HelpSupportTestCase method testStandaloneOnly.
private static void testStandaloneOnly(Class<? extends Command> clazz) throws Exception {
Command c = clazz.newInstance();
String synopsis = getStandaloneOnlySynopsis(c);
Assert.assertEquals(clazz.getName() + ". EXPECTED [" + ((TestCommand) c).getSynopsis() + "]. FOUND [" + synopsis + "]", ((TestCommand) c).getSynopsis(), synopsis);
}
Aggregations