
org.snapscript.studio.agent.cli.CommandLineBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snap-agent Show documentation
Show all versions of snap-agent Show documentation
Dynamic scripting for the JVM
The newest version!
package org.snapscript.studio.agent.cli;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CommandLineBuilder {
private final List extends CommandOption> options;
private final CommandOptionParser parser;
public CommandLineBuilder(List extends CommandOption> options) {
this.parser = new CommandOptionParser(options);
this.options = options;
}
public CommandLine build(String[] arguments) {
Map map = new LinkedHashMap();
List values = new ArrayList();
Set done = new HashSet();
for(CommandOption option : options){
String name = option.getName();
String code = option.getCode();
if(!done.add(name)) {
throw new IllegalStateException("Option '" + name + "' declared twice");
}
if(!done.add(code)) {
throw new IllegalStateException("Option '" + code + "' declared twice");
}
}
for(String argument: arguments) {
if(argument.startsWith("--")) {
CommandValue value = parser.parse(argument);
Object object = value.getValue();
String name = value.getName();
map.put(name, object);
} else {
values.add(argument);
}
}
for(CommandOption option : options){
String name = option.getName();
if(!map.containsKey(name)) {
Object token = option.getDefault();
if(token != null) {
Class type = option.getType();
Object value = parser.convert(token, type);
map.put(name, value);
}
}
}
String[] remainder = values.toArray(new String[]{});
return new CommandLine(options, map, remainder);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy