diff --git a/src/main/java/net/knarcraft/ffmpegconverter/utility/Parser.java b/src/main/java/net/knarcraft/ffmpegconverter/utility/Parser.java
index d00179a..e13c6f2 100644
--- a/src/main/java/net/knarcraft/ffmpegconverter/utility/Parser.java
+++ b/src/main/java/net/knarcraft/ffmpegconverter/utility/Parser.java
@@ -5,7 +5,9 @@ import net.knarcraft.ffmpegconverter.parser.ConverterArgumentValue;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* A class to help with command parsing
@@ -17,10 +19,10 @@ public final class Parser {
/**
* This function parses command inputs into understandable converter instructions
- *
* @param tokens
A list of tokens containing all arguments
+ * @return A map with all parsed arguments.
*/
- private static void parse(List tokens) {
+ private static Map parse(List tokens) {
String[] types = {"animeconverter", "audioconverter", "videoconverter"};
ConverterArgument[] commonArgs = {
new ConverterArgument("recursions", 'r', true, ConverterArgumentValue.INT),
@@ -55,6 +57,11 @@ public final class Parser {
default:
throw new IllegalArgumentException("Unknown converter type chosen.");
}
+
+ Map parsedArguments = new HashMap<>();
+
+ //TODO: Refactor and test this function
+
while (!tokens.isEmpty()) {
String currentToken = tokens.remove(0);
List foundArguments;
@@ -62,8 +69,8 @@ public final class Parser {
String argumentName = currentToken.substring(2);
foundArguments = ListUtil.getMatching(converterArguments, (item) -> item.getName().equals(argumentName));
} else if (currentToken.startsWith("-")) {
- String argumentShorthand = currentToken.substring(1);
- foundArguments = ListUtil.getMatching(converterArguments, (item) -> item.getName().equals(argumentShorthand));
+ char argumentShorthand = currentToken.substring(1).charAt(0);
+ foundArguments = ListUtil.getMatching(converterArguments, (item) -> item.getShorthand() == argumentShorthand);
} else {
throw new IllegalArgumentException("Unexpected value when not given an argument.");
}
@@ -72,10 +79,23 @@ public final class Parser {
}
ConverterArgument foundArgument = foundArguments.get(0);
String argumentValue = tokens.get(0);
- //TODO: Check if the value is an argument, and if not consume the value
- //TODO: If the value is an argument, but a value is necessary, throw an error
- //TODO: Store the found parameter values into a hashmap and send it to the converter as input
+ boolean valueIsArgument = argumentValue.startsWith("-");
+
+ if (valueIsArgument) {
+ if (foundArgument.isValueRequired()) {
+ throw new IllegalArgumentException(String.format("Argument %s requires a value, but no value was given.", foundArgument.getName()));
+ } else {
+ parsedArguments.put(foundArgument.getName(), "true");
+ }
+ } else {
+ String value = tokens.remove(0);
+ if (!foundArgument.testArgumentValue(value)) {
+ throw new IllegalArgumentException(String.format("Invalid value %s for argument %s.", value, foundArgument.getName()));
+ }
+ parsedArguments.put(foundArgument.getName(), value);
+ }
}
+ return parsedArguments;
}
/**