Skip to content

Commit

Permalink
added uiinput parsing, only string,boolean and integer for now.
Browse files Browse the repository at this point in the history
  • Loading branch information
stalep committed Jan 18, 2013
1 parent 2bb1644 commit 5f638ff
Show file tree
Hide file tree
Showing 10 changed files with 256 additions and 66 deletions.
15 changes: 7 additions & 8 deletions aesh/src/main/java/org/jboss/forge/aesh/AeshShell.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,6 @@
*/
package org.jboss.forge.aesh;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Singleton;

import org.jboss.aesh.cl.CommandLine;
import org.jboss.aesh.console.Console;
import org.jboss.aesh.console.ConsoleOutput;
Expand All @@ -26,6 +18,13 @@
import org.jboss.forge.container.event.Perform;
import org.jboss.forge.container.services.Exported;

import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
Expand Down
18 changes: 5 additions & 13 deletions aesh/src/main/java/org/jboss/forge/aesh/ShellCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,18 @@
*/
package org.jboss.forge.aesh;

import java.util.List;

import org.jboss.aesh.cl.CommandLine;
import org.jboss.aesh.cl.CommandLineParser;
import org.jboss.aesh.cl.ParserBuilder;
import org.jboss.aesh.cl.internal.ParameterInt;
import org.jboss.aesh.complete.CompleteOperation;
import org.jboss.aesh.complete.Completion;
import org.jboss.aesh.console.Console;
import org.jboss.aesh.console.ConsoleOutput;
import org.jboss.forge.aesh.util.CommandLineUtil;
import org.jboss.forge.ui.Result;
import org.jboss.forge.ui.UICommand;
import org.jboss.forge.ui.UIInput;

import java.util.List;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
Expand Down Expand Up @@ -50,22 +49,15 @@ public ShellContext getContext() {
}

public void generateParser(UICommand command) {
ParserBuilder builder = new ParserBuilder();
ParameterInt parameter =
new ParameterInt(command.getId().getName(), command.getId().getDescription());
for(UIInput<?> input : context.getInputs()) {
//TODO: add inputs as parameter options
}
builder.addParameter(parameter);
parser = builder.generateParser();
parser = CommandLineUtil.generateParser(command, context);
}

public CommandLine parse(String line) throws IllegalArgumentException {
return parser.parse(line);
}

public void run(ConsoleOutput consoleOutput, CommandLine commandLine) throws Exception {
context.setCommandLine(commandLine);
CommandLineUtil.populateUIInputs(commandLine, context);
Result result = command.execute(context);
if(result != null &&
result.getMessage() != null && result.getMessage().length() > 0)
Expand Down
24 changes: 11 additions & 13 deletions aesh/src/main/java/org/jboss/forge/aesh/ShellContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,25 @@
*/
package org.jboss.forge.aesh;

import java.util.ArrayList;
import java.util.List;

import org.jboss.aesh.cl.CommandLine;
import org.jboss.forge.ui.UIBuilder;
import org.jboss.forge.ui.UIContext;
import org.jboss.forge.ui.UIInput;
import org.jboss.forge.ui.UIValidationContext;

import java.util.ArrayList;
import java.util.List;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
public class ShellContext implements UIValidationContext, UIContext, UIBuilder {

private CommandLine commandLine;
private boolean standalone = false;
private List<UIInput<?>> inputs = new ArrayList<UIInput<?>>();

public ShellContext() {
}

public CommandLine getCommandLine() {
return commandLine;
}

public void setCommandLine(CommandLine cl) {
commandLine = cl;
}

public boolean isStandalone() {
return standalone;
}
Expand All @@ -53,6 +43,14 @@ public List<UIInput<?>> getInputs() {
return inputs;
}

public UIInput<?> findInput(String name) {
for(UIInput<?> input : inputs) {
if(input.getName().equals(name))
return input;
}
return null;
}

@Override
public void addValidationError(UIInput<?> input, String errorMessage) {
//TODO: ignoring errorMessage for now
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
*/
package org.jboss.forge.aesh.commands;

import javax.inject.Inject;

import org.jboss.aesh.console.Console;
import org.jboss.forge.ui.Result;
import org.jboss.forge.ui.UICommand;
Expand All @@ -17,6 +15,8 @@
import org.jboss.forge.ui.UIValidationContext;
import org.jboss.forge.ui.base.SimpleUICommandID;

import javax.inject.Inject;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
*/
package org.jboss.forge.aesh.commands;

import javax.inject.Inject;

import org.jboss.aesh.console.Console;
import org.jboss.forge.aesh.ShellContext;
import org.jboss.forge.ui.Result;
Expand All @@ -18,6 +16,8 @@
import org.jboss.forge.ui.UIValidationContext;
import org.jboss.forge.ui.base.SimpleUICommandID;

import javax.inject.Inject;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,6 @@
*/
package org.jboss.forge.aesh.commands;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.inject.Inject;

import org.jboss.forge.container.Addon;
import org.jboss.forge.container.AddonRegistry;
import org.jboss.forge.ui.Result;
Expand All @@ -25,14 +16,19 @@
import org.jboss.forge.ui.UIValidationContext;
import org.jboss.forge.ui.base.SimpleUICommandID;

import javax.inject.Inject;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
public class ListServicesCommand implements UICommand
{
@Inject
private UIInput<String> name;

@Inject
private AddonRegistry registry;

Expand All @@ -50,10 +46,6 @@ public UICommandID getId()
@Override
public void initializeUI(UIContext context) throws Exception
{
name.setLabel("list-services");
name.setRequired(true);

context.getUIBuilder().add(name);
}

@Override
Expand Down
81 changes: 81 additions & 0 deletions aesh/src/main/java/org/jboss/forge/aesh/util/CommandLineUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.aesh.util;

import org.jboss.aesh.cl.CommandLine;
import org.jboss.aesh.cl.CommandLineParser;
import org.jboss.aesh.cl.OptionBuilder;
import org.jboss.aesh.cl.ParserBuilder;
import org.jboss.aesh.cl.internal.ParameterInt;
import org.jboss.forge.aesh.ShellContext;
import org.jboss.forge.ui.UICommand;
import org.jboss.forge.ui.UIInput;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
public class CommandLineUtil {


public static CommandLineParser generateParser(UICommand command, ShellContext context) {
ParserBuilder builder = new ParserBuilder();

ParameterInt parameter =
new ParameterInt(command.getId().getName(), command.getId().getDescription());
for(UIInput<?> input : context.getInputs()) {
if(input.getValueType() == Boolean.class) {
parameter.addOption(
new OptionBuilder().name(input.getName().charAt(0)).
longName(input.getName()).hasValue(false).description(input.getLabel()).create());
}
else {
parameter.addOption(
new OptionBuilder().name(input.getName().charAt(0)).
longName(input.getName()).description(input.getLabel()).create());
}
}
builder.addParameter(parameter);
return builder.generateParser();
}

public static void populateUIInputs(CommandLine commandLine, ShellContext context) {
for(UIInput<?> input : context.getInputs()) {
//String value;
//if((value = commandLine.getOptionValue(input.getName())) != null)
if(commandLine.hasOption(input.getName())) {
String value = commandLine.getOptionValue(input.getName());
if(value == null) {
//if its a boolean we have the option and set it to true
if(input.getValueType() == Boolean.class)
value = "true";
else
value = "";
}
setInputValue(input, value);
}
else
input.setValue(null);
}
}

@SuppressWarnings({ "unchecked", "rawtypes" })
private static void setInputValue(UIInput<?> input, String value) {

if(input.getValueType() == String.class) {
((UIInput<String>) input).setValue(value);

}
else if(input.getValueType() == Boolean.class) {
((UIInput<Boolean>) input).setValue(Boolean.parseBoolean(value));
}
else if(input.getValueType() == Integer.class) {
((UIInput<Integer>) input).setValue(Integer.parseInt(value));
}
else
input.setValue(null);
}
}
20 changes: 10 additions & 10 deletions aesh/src/test/java/org/jboss/forge/aesh/AeshAddonTest.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
package org.jboss.forge.aesh;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

import javax.inject.Inject;

import junit.framework.TestCase;

import org.jboss.aesh.console.Config;
import org.jboss.aesh.console.settings.Settings;
import org.jboss.aesh.edit.KeyOperation;
import org.jboss.aesh.edit.actions.Operation;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.aesh.commands.ClearCommand;
import org.jboss.forge.aesh.commands.ExitCommand;
import org.jboss.forge.aesh.commands.ListServicesCommand;
import org.jboss.forge.aesh.commands.StopCommand;
import org.jboss.forge.arquillian.Addon;
Expand All @@ -32,6 +24,13 @@
import org.junit.Test;
import org.junit.runner.RunWith;

import javax.inject.Inject;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
Expand All @@ -53,11 +52,12 @@ public static ForgeArchive getDeployment()
.addClass(ShellCommand.class)
.addClass(ShellContext.class)
.addClass(StopCommand.class)
.addClass(ExitCommand.class)
.addClass(ClearCommand.class)
.addClass(FooCommand.class)
.addClass(ListServicesCommand.class)
.addAsLibraries(Maven.resolver().loadPomFromFile("pom.xml")
.resolve("org.jboss.aesh:aesh:0.29").withTransitivity().asFile())
.resolve("org.jboss.aesh:aesh:0.29").withTransitivity().asFile())
.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"))
.addAsAddonDependencies(AddonDependency.create(AddonId.from("org.jboss.forge:ui", "2.0.0-SNAPSHOT")));

Expand Down
4 changes: 2 additions & 2 deletions aesh/src/test/java/org/jboss/forge/aesh/FooCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
*/
package org.jboss.forge.aesh;

import javax.inject.Inject;

import org.jboss.forge.container.services.Exported;
import org.jboss.forge.ui.Result;
import org.jboss.forge.ui.UICommand;
Expand All @@ -17,6 +15,8 @@
import org.jboss.forge.ui.UIValidationContext;
import org.jboss.forge.ui.base.SimpleUICommandID;

import javax.inject.Inject;

/**
* @author <a href="mailto:stale.pedersen@jboss.org">Ståle W. Pedersen</a>
*/
Expand Down
Loading

0 comments on commit 5f638ff

Please sign in to comment.