From 2fd1f4096911e9843b63a1a13c10175e604f74e3 Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Fri, 7 Oct 2022 13:00:14 +0200
Subject: [PATCH] Starting commandline interface

---
 .../RegionChooserCommandLineInterface.java    | 48 +++++++++++++++++++
 .../regionchooser/RegionChooserFX.java        | 17 +------
 .../regionchooser/RegionChooserUtils.java     | 13 +++++
 3 files changed, 63 insertions(+), 15 deletions(-)
 create mode 100644 src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java

diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java
new file mode 100644
index 0000000..3d6c73a
--- /dev/null
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java
@@ -0,0 +1,48 @@
+package eu.simstadt.regionchooser;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.logging.Logger;
+import java.util.stream.Stream;
+
+
+/*
+ * Utility class to launch RegionChooser without GUI.
+ */
+public class RegionChooserCommandLineInterface
+{
+	private static final Logger LOGGER = Logger.getLogger(RegionChooserCommandLineInterface.class.getName());
+
+	public static void main(String[] args) throws IOException {
+		LOGGER.info(String.format("Launching RegionChooser %s", RegionChooserUtils.getApplicationVersion()));
+		if (args.length == 0) {
+			displayInfoAndQuit();
+		}
+
+		Path[] paths = Stream.of(args).map(Paths::get).toArray(Path[]::new);
+		for (Path path : paths) {
+			System.out.println(path);
+		}
+		//TODO: Also get output file
+		//TODO: Also get EPSG
+		//TODO: Also get WKT polygon
+
+		//		StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, paths);
+		//
+		//		File buildingIdsFile = selectSaveFileWithDialog(project,
+		//				csvCitygmls.replace(";", "_").replace(".gml", ""), "selected_region");
+		//		RegionChooserUtils.writeStringBuilderToFile(sb, buildingIdsFile.toPath());
+	}
+
+	private static void displayInfoAndQuit() {
+		LOGGER.info(
+				"Please add one directory path as argument. Either a repository path in order to list the available projects:\n"
+						+ "  java -d64 -classpath lib/*;workflows/* eu.simstadt.desktop.SimStadtCommandLineInterface ..\\TestRepository\n"
+						+ "Or a project path in order to list the available workflows:\n"
+						+ "  java -d64 -classpath lib/*;workflows/* eu.simstadt.desktop.SimStadtCommandLineInterface ..\\TestRepository\\Gruenbuehl.proj\n"
+						+ "Or a workflow path in order to launch the workflow:\n"
+						+ "  java -d64 -classpath lib/*;workflows/* eu.simstadt.desktop.SimStadtCommandLineInterface ..\\TestRepository\\Gruenbuehl.proj\\a.step");
+		System.exit(0);
+	}
+}
diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserFX.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserFX.java
index c2f2af7..f3910e7 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserFX.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserFX.java
@@ -1,7 +1,5 @@
 package eu.simstadt.regionchooser;
 
-import java.time.LocalDate;
-import java.util.Objects;
 import javafx.application.Application;
 import javafx.scene.Scene;
 import javafx.scene.image.Image;
@@ -16,14 +14,14 @@ public class RegionChooserFX extends Application
 	/**
 	 * Starting point of RegionChooser application. Either "Run as Java" from Eclipse or run
 	 * "RegionChooser.bat/.sh/.command" from deployed SimStadt folder.
-	 * 
+	 *
 	 * This application is basically just a scene and a browser for the RegionChooser website (HTML + Javascript frontend
 	 * + Java backend). The Java part is written in RegionChooserBrowser.
 	 */
 
 	@Override
 	public void start(Stage stage) {
-		stage.setTitle("RegionChooser " + getApplicationVersion());
+		stage.setTitle("RegionChooser " + RegionChooserUtils.getApplicationVersion());
 		Scene scene = new Scene(new RegionChooserBrowser(), 1024, 720, Color.web("#666970"));
 		stage.getIcons().addAll(APP_ICON_48);
 		stage.setScene(scene);
@@ -33,16 +31,5 @@ public void start(Stage stage) {
 	public static void main(String[] args) {
 		launch(args);
 	}
-
-	/**
-	 * Returns application version, if it has been written in the JAR file during deployment.
-	 * 
-	 * e.g. "0.9.1-SNAPSHOT (rev. 73cbe48e, 2018-07-20)"
-	 */
-	private String getApplicationVersion() {
-		Package regionChooserJar = RegionChooserFX.class.getPackage();
-		return Objects.toString(regionChooserJar.getImplementationVersion(),
-				String.format("development version (%s)", LocalDate.now()));
-	}
 }
 
diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java
index 5c9f85f..54c54bf 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java
@@ -4,6 +4,8 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.time.LocalDate;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -161,4 +163,15 @@ public static void writeStringBuilderToFile(StringBuilder sb, Path outputFile) t
 			}
 		}
 	}
+
+	/**
+	 * Returns application version, if it has been written in the JAR file during deployment.
+	 *
+	 * e.g. "0.9.1-SNAPSHOT (rev. 73cbe48e, 2018-07-20)"
+	 */
+	public static String getApplicationVersion() {
+		Package regionChooserJar = RegionChooserFX.class.getPackage();
+		return Objects.toString(regionChooserJar.getImplementationVersion(),
+				String.format("development version (%s)", LocalDate.now()));
+	}
 }
-- 
GitLab