From 51841bfb6049a923966acc618c11093f60f92f93 Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Wed, 5 Oct 2022 15:16:19 +0200
Subject: [PATCH] Now possible to choose repository from RegionChooser.

---
 .../regionchooser/RegionChooserBrowser.java   | 29 +++++++++++++++++--
 .../website/script/simstadt_openlayers.js     | 13 +++++++--
 2 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
index 0e9d8ef..006ddf2 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
@@ -22,6 +22,7 @@
 import javafx.scene.layout.Region;
 import javafx.scene.web.WebEngine;
 import javafx.scene.web.WebView;
+import javafx.stage.DirectoryChooser;
 import javafx.stage.FileChooser;
 import javafx.stage.Stage;
 import netscape.javascript.JSObject;
@@ -30,6 +31,7 @@
 public class RegionChooserBrowser extends Region
 {
 	private static final Logger LOGGER = Logger.getLogger(RegionChooserBrowser.class.getName());
+	private static final String PREF_RECENT_REPOSITORY = "RECENT_REPOSITORY";
 	private static final int BUFFER = 1024;
 
 	/**
@@ -41,7 +43,7 @@ public class RegionChooserBrowser extends Region
 
 		public JavaScriptFXBridge() {
 			Preferences userPrefs = Preferences.userRoot().node("/eu/simstadt/desktop");
-			String repoString = userPrefs.get("RECENT_REPOSITORY", "../TestRepository");
+			String repoString = userPrefs.get(PREF_RECENT_REPOSITORY, "../TestRepository");
 			repo = Paths.get(repoString);
 		}
 
@@ -63,7 +65,10 @@ public Void call() throws IOException {
 				}
 			};
 
-			task.setOnRunning(e -> jsApp.call("display", "Importing citgyml. Please wait."));
+			task.setOnRunning(e -> {
+				jsApp.call("display", "Importing citgyml. Please wait.");
+				jsApp.call("init");
+			});
 
 			task.setOnSucceeded(e -> jsApp.call("ready"));
 
@@ -91,6 +96,26 @@ public void downloadRegionFromCityGMLs(String wktPolygon, String project, String
 			}
 		}
 
+		public void selectRepository() {
+			Preferences userPrefs = Preferences.userRoot().node("/eu/simstadt/desktop");
+			String currentRepo = userPrefs.get(PREF_RECENT_REPOSITORY, "../TestRepository");
+
+			DirectoryChooser fileChooser = new DirectoryChooser();
+			Stage mainStage = (Stage) RegionChooserBrowser.this.getScene().getWindow();
+			fileChooser.setTitle("Select Repository");
+			fileChooser.setInitialDirectory(new File(currentRepo));
+			File repoLocation = fileChooser.showDialog(mainStage);
+
+			if (repoLocation != null) {
+				repo = repoLocation.toPath();
+				userPrefs.put(PREF_RECENT_REPOSITORY, repo.toAbsolutePath().toString());
+				LOGGER.info("Repository was set to " + repo);
+				refreshHulls();
+			} else {
+				LOGGER.warning("No repository chosen.");
+			}
+		}
+
 		private File selectSaveFileWithDialog(String project, String citygml, String suffix) {
 			Stage mainStage = (Stage) RegionChooserBrowser.this.getScene().getWindow();
 			FileChooser fileChooser = new FileChooser();
diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
index dfbd58a..a1d671c 100644
--- a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
+++ b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
@@ -4,7 +4,13 @@ var regionChooser = (function(){
 	//NOTE: Could do without jQuery
 	var dataPanel = $('#dataPanel');
 	var wgs84Sphere = new ol.Sphere(6378137);
-	var gmlId = 0;
+	var gmlId;
+	
+	publicScope.init = function(){
+		//NOTE: Only called from JavaFX. At startup, or when Repo has been changed.
+		gmlId = 0;
+		kml_source.clear();
+	}
 	
 	if (fromJavaFX){
 		$("html").addClass("wait");
@@ -248,7 +254,7 @@ var regionChooser = (function(){
 					fxapp.downloadRegionFromCityGMLs(sketchAsWKT(srsName), project, citygmlNames.join(";"), srsName);
 					dataPanel.append("<h2 class='ok'>Done!</h2><br/>\n");
 				} catch (e) {
-					console.log("ERROR : " + e);
+					console.warning("ERROR : " + e);
 					dataPanel.append("<h2 class='error'>Some problem occured!</h2><br/>\n");
 				}
 				var end = new Date().getTime();
@@ -382,7 +388,8 @@ var regionChooser = (function(){
 	}
 	
 	publicScope.selectRepository = function() {
-		console.log("Should probably do something");
+		console.log("Should probably do select repository.");
+		fxapp.selectRepository();
 	}
 
 	focusOnMap();
-- 
GitLab