org.infinispan.cli.commands.ProcessedCommand Maven / Gradle / Ivy
package org.infinispan.cli.commands;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProcessedCommand {
final String command;
final String line;
final List arguments;
final boolean commandComplete;
final int cursorPosition;
final int currentArgument;
public ProcessedCommand(String raw) {
this(raw, raw.length());
}
public ProcessedCommand(String raw, int cursorPosition) {
this.cursorPosition = cursorPosition;
this.commandComplete = ltrim(raw).indexOf(' ') > 0;
raw = raw.trim();
this.line = raw.endsWith(";") ? raw.substring(0, raw.length()-1) : raw;
int sep = this.line.indexOf(' ');
command = sep > 0 ? this.line.substring(0, sep) : this.line;
arguments = new ArrayList();
splitArguments(sep > 0 ? this.line.substring(sep + 1) : "", sep + 1);
int c = -1;
for (Argument arg : arguments) {
if (cursorPosition>arg.getOffset()) {
c++;
} else {
break;
}
}
this.currentArgument = c;
}
private String ltrim(String s) {
int len = s.length();
int st = 0;
while ((st < len) && (s.charAt(st) <= ' ')) {
st++;
}
return st > 0 ? s.substring(st) : s;
}
private void splitArguments(String s, int offset) {
Pattern regex = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(s);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
arguments.add(new Parameter(regexMatcher.group(1), offset + regexMatcher.start(1)));
} else if (regexMatcher.group(2) != null) {
arguments.add(new Parameter(regexMatcher.group(2), offset + regexMatcher.start(2)));
} else {
arguments.add(new Parameter(regexMatcher.group(), offset + regexMatcher.start()));
}
}
}
public String getCommand() {
return command;
}
public String getCommandLine() {
return line;
}
public List getArguments() {
return arguments;
}
public Argument getArgument(int n) {
return (n >=0 && n < arguments.size()) ? arguments.get(n) : null;
}
public Argument getCurrentArgument() {
return getArgument(currentArgument);
}
public boolean isCommandComplete() {
return commandComplete;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy