From e6e7fe28f7f44967a2fe463d958fe730de1fafe1 Mon Sep 17 00:00:00 2001
From: Eric Duminil <eric.duminil@gmail.com>
Date: Wed, 5 Oct 2022 13:28:37 +0200
Subject: [PATCH] Proof-of-concept : extract from multiple citygmls.

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

diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
index 2089403..2df3e29 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
@@ -8,6 +8,7 @@
 import java.nio.file.Paths;
 import java.util.logging.Logger;
 import java.util.prefs.Preferences;
+import java.util.stream.Stream;
 import org.locationtech.jts.io.ParseException;
 import com.ximpleware.NavException;
 import com.ximpleware.XPathParseException;
@@ -69,12 +70,16 @@ public Void call() throws IOException {
 			new Thread(task).start();
 		}
 
-		public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, String srsName)
+		public void downloadRegionFromCityGML(String wktPolygon, String project, String csvCitygmls, String srsName)
 				throws IOException, ParseException, XPathParseException, NavException {
-			StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName,
-					citygmlPath(project, citygml));
 
-			File buildingIdsFile = selectSaveFileWithDialog(project, citygml, "selected_region");
+			System.out.println("BEEN HERE?");
+
+			Path[] paths = Stream.of(csvCitygmls.split(";")).map(s -> citygmlPath(project, s)).toArray(Path[]::new);
+
+			StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, paths);
+
+			File buildingIdsFile = selectSaveFileWithDialog(project, csvCitygmls.replace(";", "_"), "selected_region");
 			if (buildingIdsFile != null) {
 				try (BufferedWriter writer = Files.newBufferedWriter(buildingIdsFile.toPath())) {
 					char[] chars = new char[BUFFER];
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 99fbfba..e269c4d 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
@@ -177,10 +177,10 @@ var regionChooser = (function(){
         console.log("Feature name : "+ feature["name"]);
         console.log("Feature ID : "+ feature.getId());
 		if (fromJavaFX) {
-			link += '<input type="checkbox" id="check_' + feature.getId() + '" class="select_citygml"><label for="check_' + feature.getId() + '">' +  feature['name'] + '</label>';
+			link += '<input type="checkbox" id="citygml_' + feature.getId() + '" class="select_citygml"><label for="citygml_' + feature.getId() + '">' +  feature['name'] + '</label>';
 		} else {
             h = cyrb53(feature['name']);
-			link += '<input type="checkbox" id="check_' + h+ '" class="select_citygml"><label for="check_' + h + '">' +  feature['name'] + '</label>';
+			link += '<input type="checkbox" id="citygml_' + h+ '" class="select_citygml"><label for="citygml_' + h + '">' +  feature['name'] + '</label>';
 		}
 
 		link += " (" + citygml_percentage + "%";
@@ -229,21 +229,30 @@ var regionChooser = (function(){
 		dataPanel.append(text + "<br/>\n");
 	}
 	
-	publicScope.downloadRegionFromCityGML = function(i) {
+	publicScope.downloadRegionFromCityGML = function(checkbox_ids) {
 		// TODO: Disable all links
 		// TODO: DRY
-		var feature = kml_source.getFeatureById(i);
+		var features = checkbox_ids.map(checkbox_id => {
+			var i = Number(checkbox_id.replace("citygml_", ""));
+			return kml_source.getFeatureById(i);
+		})
+		
+		var project = features[0].get("project"); //TODO: Check all the same
+		var srsName = features[0].get("srsName") || "EPSG:31467"; //TODO: Check all the same
+		var citygmlNames = features.map(f => f.get("name"));
 		// Waiting 100ms in order to let the cursor change
 		setTimeout(function() {
 			var start = new Date().getTime();
-			var srsName = feature.get("srsName") || "EPSG:31467";
 			if (proj4.defs(srsName)){
 				$("html").addClass("wait");
 				console.log("Selected region is written in " + srsName + " coordinate system.");
 				try {
-					fxapp.downloadRegionFromCityGML(sketchAsWKT(srsName), feature.get("project"), feature.get("name"), srsName);
+					console.log("Before JAVA");
+					fxapp.downloadRegionFromCityGML(sketchAsWKT(srsName), project, citygmlNames.join(";"), srsName);
+					console.log("After JAVA");
 					dataPanel.append("<h2 class='ok'>Done!</h2><br/>\n");
 				} catch (e) {
+					console.log("ERROR " + e);
 					dataPanel.append("<h2 class='error'>Some problem occured!</h2><br/>\n");
 				}
 				var end = new Date().getTime();
@@ -364,13 +373,14 @@ var regionChooser = (function(){
 	
 	publicScope.clickety_click = function() {
 		console.log("You clicked pretty well");
-		var checkedBoxes = Array.from(document.querySelectorAll("input.select_citygml")).filter(x => x.checked);
+		var checkedBoxes = Array.from(document.querySelectorAll("input.select_citygml")).filter(c => c.checked);
 		if (checkedBoxes.length === 0){
 			console.log("You should select at least one citygml, though.");
 		} else{
-			checkedBoxes.forEach(x => {
-				console.log("Nice! You checked Citygml " + x.id)
+			checkedBoxes.forEach(c => {
+				console.log("Nice! You checked Citygml " + c.id)
 			});
+				publicScope.downloadRegionFromCityGML(checkedBoxes.map(c => c.id));
 		}
 	}
 
-- 
GitLab