Skip to content

Commit

Permalink
FORGE-2113: Fixed handling of UICommands
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Oct 31, 2014
1 parent 7bcd2dd commit 9dab361
Showing 1 changed file with 14 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.inject.Inject;

Expand All @@ -21,38 +19,27 @@
import org.jboss.aesh.terminal.TerminalString;
import org.jboss.forge.addon.shell.Shell;
import org.jboss.forge.addon.shell.ui.AbstractShellCommand;
import org.jboss.forge.addon.shell.util.CommandControllerComparator;
import org.jboss.forge.addon.ui.UIRuntime;
import org.jboss.forge.addon.ui.command.CommandFactory;
import org.jboss.forge.addon.ui.command.UICommand;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.controller.CommandController;
import org.jboss.forge.addon.ui.controller.CommandControllerFactory;
import org.jboss.forge.addon.ui.input.UIPrompt;
import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
import org.jboss.forge.addon.ui.output.UIOutput;
import org.jboss.forge.addon.ui.progress.DefaultUIProgressMonitor;
import org.jboss.forge.addon.ui.progress.UIProgressMonitor;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.util.Metadata;

/**
* Lists all the available commands
*
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public class CommandListCommand extends AbstractShellCommand
{
private final CommandFactory commandFactory;
private final CommandControllerFactory factory;

@Inject
public CommandListCommand(CommandFactory commandFactory, CommandControllerFactory factory)
{
this.commandFactory = commandFactory;
this.factory = factory;
}
private CommandFactory commandFactory;

@Override
public UICommandMetadata getMetadata(UIContext context)
Expand All @@ -63,54 +50,33 @@ public UICommandMetadata getMetadata(UIContext context)
@Override
public void initializeUI(UIBuilder builder) throws Exception
{
// No inputs needed
}

@Override
public Result execute(UIExecutionContext context) throws Exception
{
Shell shell = (Shell) context.getUIContext().getProvider();
UIContext uiContext = context.getUIContext();
Shell shell = (Shell) uiContext.getProvider();
TerminalSize terminalSize = shell.getConsole().getShell().getSize();
List<String> display = new ArrayList<>();

Set<CommandController> controllers = new TreeSet<>(new CommandControllerComparator());
for (UICommand command : commandFactory.getCommands())
{
controllers.add(getCommandController(context, command));
}

for (CommandController controller : controllers)
Iterable<UICommand> commands = commandFactory.getCommands();
for (UICommand command : commands)
{
String name = commandFactory.getCommandName(context.getUIContext(), controller.getCommand());
UICommandMetadata metadata = controller.getMetadata();
UICommandMetadata metadata = command.getMetadata(uiContext);
String name = commandFactory.getCommandName(uiContext, command);
boolean enabled = command.isEnabled(uiContext);
display.add(metadata.getCategory()
+ " > "
+ new TerminalString(name, new TerminalColor(controller.isEnabled() ? Color.CYAN : Color.RED,
+ new TerminalString(name, new TerminalColor(enabled ? Color.CYAN : Color.RED,
Color.DEFAULT)).toString() + " - " + metadata.getDescription());
}

UIOutput output = context.getUIContext().getProvider().getOutput();
UIOutput output = uiContext.getProvider().getOutput();
PrintStream out = output.out();
out.println(Parser.formatDisplayList(display.toArray(new String[display.size()]),
terminalSize.getHeight(), terminalSize.getWidth()));

return Results.success();
}

private CommandController getCommandController(UIExecutionContext context, UICommand command)
{
return factory.createController(context.getUIContext(), new UIRuntime()
{
@Override
public UIProgressMonitor createProgressMonitor(UIContext context)
{
return new DefaultUIProgressMonitor();
}

@Override
public UIPrompt createPrompt(UIContext context)
{
return null;
}
}, command);
}
}

0 comments on commit 9dab361

Please sign in to comment.