summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2017-11-15 02:31:05 +0100
committerJ08nY2017-11-15 02:31:05 +0100
commit9da5f6ee8db4138b13af6d1d7bef279ed107288d (patch)
tree733c9ceae908d2a05d4c6794ccc4dd2771125bc6
parent398e1f6ec20d17b0358694d5d3de9e22b791aa5a (diff)
downloadECTester-9da5f6ee8db4138b13af6d1d7bef279ed107288d.tar.gz
ECTester-9da5f6ee8db4138b13af6d1d7bef279ed107288d.tar.zst
ECTester-9da5f6ee8db4138b13af6d1d7bef279ed107288d.zip
-rw-r--r--src/cz/crcs/ectester/common/cli/TreeParser.java25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/cz/crcs/ectester/common/cli/TreeParser.java b/src/cz/crcs/ectester/common/cli/TreeParser.java
index 079760e..8e7edb4 100644
--- a/src/cz/crcs/ectester/common/cli/TreeParser.java
+++ b/src/cz/crcs/ectester/common/cli/TreeParser.java
@@ -2,10 +2,7 @@ package cz.crcs.ectester.common.cli;
import org.apache.commons.cli.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
/**
* @author Jan Jancar johny@neuromancer.sk
@@ -50,11 +47,27 @@ public class TreeParser implements CommandLineParser {
String sub = null;
if (args.length != 0) {
sub = args[0];
- ParserOptions subparser = parsers.get(sub);
- if (subparser != null) {
+
+ List<String> matches = new LinkedList<>();
+ String finalSub = sub;
+ for (Map.Entry<String, ParserOptions> entry : parsers.entrySet()) {
+ if (entry.getKey().equalsIgnoreCase(finalSub)) {
+ matches.clear();
+ matches.add(finalSub);
+ break;
+ } else if (entry.getKey().startsWith(finalSub)) {
+ matches.add(entry.getKey());
+ }
+ }
+
+ if (matches.size() == 1) {
+ sub = matches.get(0);
+ ParserOptions subparser = parsers.get(sub);
String[] remainingArgs = new String[args.length - 1];
System.arraycopy(args, 1, remainingArgs, 0, args.length - 1);
subCli = subparser.getParser().parse(subparser.getOptions(), remainingArgs, true);
+ } else if (matches.size() > 1) {
+ throw new UnrecognizedOptionException("Ambiguous option: " + sub + ", couldn't match. Partially matches: " + String.join(",", matches.toArray(new String[0])) + ".", sub);
}
} else {
if (required) {