Skip to content

Commit

Permalink
Fixed ManCommand
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Aug 27, 2013
1 parent 4dbf9ae commit 0238c95
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 85 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package org.jboss.forge.addon.shell;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;

import javax.inject.Inject;

import org.jboss.forge.addon.convert.ConverterFactory;
import org.jboss.forge.addon.shell.aesh.AbstractShellInteraction;
import org.jboss.forge.addon.shell.aesh.CommandLineUtil;
import org.jboss.forge.addon.shell.aesh.ForgeConsoleCallback;
import org.jboss.forge.addon.shell.aesh.ShellSingleCommand;
import org.jboss.forge.addon.shell.aesh.ShellWizard;
import org.jboss.forge.addon.shell.aesh.completion.ForgeCompletion;
import org.jboss.forge.addon.shell.ui.ShellContext;
import org.jboss.forge.addon.ui.UICommand;
import org.jboss.forge.addon.ui.util.Commands;
Expand Down Expand Up @@ -89,4 +95,35 @@ ConverterFactory getConverterFactory()
return converterFactory;
}

/**
* Used in {@link ForgeCompletion} and {@link ForgeConsoleCallback}
*/
public AbstractShellInteraction findCommand(ShellContext shellContext, String line)
{
String[] tokens = line.split(" ");
if (tokens.length >= 1)
{
return getEnabledShellCommands(shellContext).get(tokens[0]);
}
return null;
}

public Collection<AbstractShellInteraction> findMatchingCommands(ShellContext shellContext, String line)
{
Set<AbstractShellInteraction> result = new TreeSet<AbstractShellInteraction>();

String[] tokens = line == null ? new String[0] : line.split(" ");
if (tokens.length <= 1)
{
Map<String, AbstractShellInteraction> commandMap = getEnabledShellCommands(shellContext);
String token = (tokens.length == 1) ? tokens[0] : null;
for (Entry<String, AbstractShellInteraction> entry : commandMap.entrySet())
{
if (token == null || entry.getKey().startsWith(token))
result.add(entry.getValue());
}
}
return result;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import java.util.logging.Level;
import java.util.logging.Logger;

Expand Down Expand Up @@ -154,30 +150,12 @@ private Prompt createPrompt()
*/
public AbstractShellInteraction findCommand(ShellContext shellContext, String line)
{
String[] tokens = line.split(" ");
if (tokens.length >= 1)
{
return commandManager.getEnabledShellCommands(shellContext).get(tokens[0]);
}
return null;
return commandManager.findCommand(shellContext, line);
}

public Collection<AbstractShellInteraction> findMatchingCommands(ShellContext shellContext, String line)
{
Set<AbstractShellInteraction> result = new TreeSet<AbstractShellInteraction>();

String[] tokens = line == null ? new String[0] : line.split(" ");
if (tokens.length <= 1)
{
Map<String, AbstractShellInteraction> commandMap = commandManager.getEnabledShellCommands(shellContext);
String token = (tokens.length == 1) ? tokens[0] : null;
for (Entry<String, AbstractShellInteraction> entry : commandMap.entrySet())
{
if (token == null || entry.getKey().startsWith(token))
result.add(entry.getValue());
}
}
return result;
return commandManager.findMatchingCommands(shellContext, line);
}

public Result execute(AbstractShellInteraction shellCommand)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,19 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.jboss.aesh.complete.CompleteOperation;
import org.jboss.aesh.complete.Completion;
import org.jboss.aesh.console.Console;
import org.jboss.aesh.extensions.manual.Man;
import org.jboss.aesh.parser.Parser;
import org.jboss.forge.addon.shell.CommandManager;
import org.jboss.forge.addon.shell.aesh.AbstractShellInteraction;
import org.jboss.forge.addon.shell.ui.AbstractShellCommand;
import org.jboss.forge.addon.shell.ui.ShellContext;
import org.jboss.forge.addon.ui.UICommand;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.input.InputComponent;
Expand All @@ -29,22 +30,21 @@
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.furnace.addons.AddonRegistry;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
public class ManCommand extends AbstractShellCommand implements Completion
public class ManCommand extends AbstractShellCommand
{
private AddonRegistry registry;
private CommandManager commandManager;

@Inject
private UIInputMany<String> arguments;

@Inject
public ManCommand(AddonRegistry registry)
public ManCommand(CommandManager commandManager)
{
this.registry = registry;
this.commandManager = commandManager;
}

@Override
Expand All @@ -70,21 +70,19 @@ public Iterable<String> getCompletionProposals(UIContext context, InputComponent
// list all commands
if (value == null || value.trim().length() < 1)
{
for (UICommand instance : registry.getServices(UICommand.class))
{
manCommands.add(instance.getMetadata().getName());
}
Map<String, AbstractShellInteraction> enabledShellCommands = commandManager
.getEnabledShellCommands((ShellContext) context);
manCommands.addAll(enabledShellCommands.keySet());
}
// find the last
else
{
String item = Parser.findEscapedSpaceWordCloseToEnd(value.trim());
// completeOperation.setOffset(completeOperation.getCursor() -
// item.length());
for (UICommand instance : registry.getServices(UICommand.class))
Collection<AbstractShellInteraction> matchingCommands = commandManager.findMatchingCommands(
(ShellContext) context, item);
for (AbstractShellInteraction cmd : matchingCommands)
{
if (instance.getMetadata().getName().startsWith(item))
manCommands.add(instance.getMetadata().getName());
manCommands.add(cmd.getName());
}
}

Expand All @@ -103,7 +101,8 @@ public Result execute(ShellContext context) throws Exception
Man man = new Man(console);
// for now we only try to display the first
String commandName = arguments.getValue().iterator().next();
URL docUrl = getCommand(commandName);
AbstractShellInteraction shellCommand = commandManager.findCommand(context, commandName);
URL docUrl = shellCommand.getSourceCommand().getMetadata().getDocLocation();
if (docUrl != null)
{
man.setFile(docUrl.openStream(), docUrl.getPath());
Expand All @@ -117,48 +116,6 @@ public Result execute(ShellContext context) throws Exception
{
return Results.fail(ioe.getMessage());
}
return null;
}

@Override
public void complete(CompleteOperation completeOperation)
{
try
{
// list all commands
if (completeOperation.getBuffer().trim().equals("man"))
{
for (UICommand instance : registry.getServices(UICommand.class))
{
completeOperation.addCompletionCandidate(instance.getMetadata().getName());
}
}
// find the last
else
{
String item = Parser.findEscapedSpaceWordCloseToEnd(completeOperation.getBuffer().trim());
completeOperation.setOffset(completeOperation.getCursor() -
item.length());
for (UICommand instance : registry.getServices(UICommand.class))
{
if (instance.getMetadata().getName().startsWith(item))
completeOperation.addCompletionCandidate(instance.getMetadata().getName());
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

private URL getCommand(String name)
{
for (UICommand instance : registry.getServices(UICommand.class))
{
if (instance.getMetadata().getName().equals(name))
return instance.getMetadata().getDocLocation();
}
return null;
return Results.success();
}
}

0 comments on commit 0238c95

Please sign in to comment.