diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java index 8e59d50aea9bdf9e0bf0810509b896b0a1cc18fa..20d4767206529c7b9fc08d77e380a62d87d40414 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java @@ -42,8 +42,8 @@ public class RegionChooserBrowser extends Region public JavaScriptFXBridge() { Preferences userPrefs = Preferences.userRoot().node("/eu/simstadt/desktop"); - String repoString = userPrefs.get(PREF_RECENT_REPOSITORY, "../TestRepository"); - repo = Paths.get(repoString); + String repoString = userPrefs.get(PREF_RECENT_REPOSITORY, null); + repo = repoString == null? null : Paths.get(repoString); } /** @@ -51,6 +51,9 @@ public JavaScriptFXBridge() { * to the JS app in order to be displayed. */ public void refreshHulls() { + if (repo == null || !Files.exists(repo)) { + selectRepository(); + } Task<Void> task = new Task<Void>() { @Override public Void call() throws IOException { @@ -62,7 +65,9 @@ public Void call() throws IOException { task.setOnRunning(e -> { jsApp.call("display", "Importing citgyml. Please wait."); - jsApp.call("showRepositoryName", repo.getFileName().toString()); + if (repo != null) { + jsApp.call("showRepositoryName", repo.getFileName().toString()); + } jsApp.call("init"); }); @@ -105,13 +110,15 @@ public Integer call() throws IOException, XPathParseException, NavException, Par public void selectRepository() { + //TODO: Check if it's really a repository, and not just a project 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)); + if (repo != null && Files.exists(repo)) { + fileChooser.setInitialDirectory(repo.toFile()); + } File repoLocation = fileChooser.showDialog(mainStage); if (repoLocation != null) { diff --git a/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java b/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java index 850bf385e2e9d811e6c32317c1e9f50df7e3f505..155ea05bbf7f32816d6a112da4186b60bc2e061b 100644 --- a/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java +++ b/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java @@ -89,6 +89,10 @@ public static Geometry calculateFromCityGML(Path citygmlPath) throws XPathParseE * @throws IOException */ public static void extractHullsForEveryCityGML(Path repository, Consumer<String> callback) throws IOException { + if (!Files.exists(repository)) { + LOGGER.warning(repository + " does not appear to exist."); + return; + } LOGGER.info("Parsing " + repository); RegionChooserUtils.everyCityGML(repository) .map(gmlPath -> { diff --git a/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculatorTests.java b/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculatorTests.java index bca9d3f99d409892692bf29636fa005d35c9042a..5bd0d0d836d2d4dd998c0ca72e614f25bafe85f5 100644 --- a/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculatorTests.java +++ b/src/test/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculatorTests.java @@ -1,7 +1,10 @@ package eu.simstadt.regionchooser.fast_xml_parser; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -22,6 +25,7 @@ { private static final GeometryFactory gf = new GeometryFactory(); private static final Path repository = Paths.get("src/test/resources/testdata"); + private static final Path notExistingRepository = Paths.get("src/test/resources/surely_not_here"); @Test public void testExtractConvexHullFromOneBuilding() throws IOException, XPathParseException { @@ -72,4 +76,12 @@ public void testExtractConvexHullFromEveryCitygmlInRepository() throws IOExcepti assertTrue(gmlCount >= minHullCount, "At least " + minHullCount + " citygmls should be present in repository"); assertTrue(hullCount.get() >= minHullCount, "At least " + minHullCount + " hulls should have been calculated"); } + + @Test + public void testDontDoMuchWithBrokenRepo() throws IOException { + ConvexHullCalculator.extractHullsForEveryCityGML(notExistingRepository, kmlHull -> { + fail("I really shouldn't be called for any gml."); + }); + assertFalse(Files.exists(notExistingRepository)); + } }