aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/cli
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-02 14:52:21 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-02 14:52:21 +0100
commit7fccda0f13f6f8b7f7a1f6e87a648fe1c3396656 (patch)
tree3b73a695446faaff9e50232584815e7ef50d9e9c /src/main/java/org/zwobble/couscous/cli
parentdef25b112080df902121b09a35c02d1fe7728386 (diff)
Use JSON to configure CLI
Diffstat (limited to 'src/main/java/org/zwobble/couscous/cli')
-rw-r--r--src/main/java/org/zwobble/couscous/cli/CouscousCli.java75
1 files changed, 27 insertions, 48 deletions
diff --git a/src/main/java/org/zwobble/couscous/cli/CouscousCli.java b/src/main/java/org/zwobble/couscous/cli/CouscousCli.java
index 8a9b6da..f363384 100644
--- a/src/main/java/org/zwobble/couscous/cli/CouscousCli.java
+++ b/src/main/java/org/zwobble/couscous/cli/CouscousCli.java
@@ -1,5 +1,8 @@
package org.zwobble.couscous.cli;
+import com.eclipsesource.json.Json;
+import com.eclipsesource.json.JsonObject;
+import com.eclipsesource.json.JsonValue;
import org.apache.commons.cli.*;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.TypeNode;
@@ -7,6 +10,7 @@ import org.zwobble.couscous.backends.csharp.CsharpBackend;
import org.zwobble.couscous.backends.python.PythonBackend;
import org.zwobble.couscous.frontends.java.JavaFrontend;
+import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
@@ -16,37 +20,32 @@ import static java.util.Arrays.asList;
import static org.zwobble.couscous.util.ExtraLists.*;
public class CouscousCli {
+ public static final String FILES = "files";
public static final String SOURCEPATH = "sourcepath";
public static final String BACKEND = "backend";
public static final String OUTPUT = "output";
public static void main(String[] rawArguments) throws Exception {
- CommandLine arguments = parseArguments(rawArguments);
+ JsonObject configuration = Json.parse(new FileReader("couscous.json")).asObject();
+ String backendName = configuration.get(BACKEND).asString();
+ String outputDirectory = configuration.get(OUTPUT).asString();
+ List<String> sourcePaths = eagerMap(
+ configuration.get(SOURCEPATH).asArray().values(),
+ JsonValue::asString);
+ List<String> files = eagerMap(
+ configuration.get(FILES).asArray().values(),
+ JsonValue::asString);
- JavaFrontend frontend = new JavaFrontend();
- List<TypeNode> classNodes = eagerFlatMap(
- arguments.getArgList(),
- path -> {
- try {
- return frontend.readSourceDirectory(
- eagerMap(sourcePath(arguments), sourcePath -> path(sourcePath)),
- path(path));
- } catch (IOException exception) {
- throw new RuntimeException(exception);
- }
- });
-
- Backend backend = backend(
- arguments.getOptionValue(BACKEND),
- arguments.getOptionValue(OUTPUT));
- backend.compile(classNodes);
- }
+ Backend backend = backend(backendName, outputDirectory);
- private static List<String> sourcePath(CommandLine arguments) {
- if (arguments.hasOption(SOURCEPATH)) {
- return asList(arguments.getOptionValues(SOURCEPATH));
- } else {
- return list();
+ JavaFrontend frontend = new JavaFrontend();
+ try {
+ List<TypeNode> classNodes = frontend.readSourceDirectory(
+ paths(sourcePaths),
+ paths(files));
+ backend.compile(classNodes);
+ } catch (IOException exception) {
+ throw new RuntimeException(exception);
}
}
@@ -61,31 +60,11 @@ public class CouscousCli {
}
}
- private static Path path(String output) {
- return FileSystems.getDefault().getPath(output);
+ private static List<Path> paths(List<String> paths) {
+ return eagerMap(paths, path -> path(path));
}
- private static CommandLine parseArguments(String[] rawArguments) throws ParseException {
- Options options = new Options();
- options.addOption(requiredOption(BACKEND));
- options.addOption(requiredOption(OUTPUT));
- options.addOption(multipleOption(SOURCEPATH));
-
- return new DefaultParser().parse(options, rawArguments);
- }
-
- private static Option requiredOption(String name) {
- return Option.builder()
- .longOpt(name)
- .required()
- .hasArg()
- .build();
- }
-
- private static Option multipleOption(String name) {
- return Option.builder()
- .longOpt(name)
- .hasArgs()
- .build();
+ private static Path path(String output) {
+ return FileSystems.getDefault().getPath(output);
}
}