From 0711c3e9e1b6c5ad917d6b7e6079d90e3e8cffd6 Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Tue, 11 Oct 2022 15:14:31 +0200 Subject: [PATCH] Try stdout anyway. Not sure it works. --- .../regionchooser/RegionChooserCLI.java | 17 ++++++++++++++--- .../regionchooser/RegionChooserCLITests.java | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserCLI.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserCLI.java index c3d88e2..5bee332 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserCLI.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserCLI.java @@ -1,6 +1,7 @@ package eu.simstadt.regionchooser; import java.io.BufferedWriter; +import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -102,11 +103,21 @@ public Integer call() throws Exception { logInfo("WKT Polygon expressed in local coordinates: " + wktPolygon); - try (BufferedWriter gmlWriter = Files.newBufferedWriter(outputCityGML)) { - int count = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, localCRS.toString(), gmlWriter, citygmls); - logInfo("Found buildings : " + count); + int count; + + if (outputCityGML.toString().equals("-")) { + logInfo("CityGML written to stdout."); + PrintWriter stdOut = spec.commandLine().getOut(); + count = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, localCRS.toString(), stdOut, citygmls); + } else { + try (BufferedWriter gmlWriter = Files.newBufferedWriter(outputCityGML)) { + count = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, localCRS.toString(), gmlWriter, + citygmls); + } } + logInfo("Found buildings : " + count); + return 0; } diff --git a/src/test/java/eu/simstadt/regionchooser/RegionChooserCLITests.java b/src/test/java/eu/simstadt/regionchooser/RegionChooserCLITests.java index 415eec4..8172264 100644 --- a/src/test/java/eu/simstadt/regionchooser/RegionChooserCLITests.java +++ b/src/test/java/eu/simstadt/regionchooser/RegionChooserCLITests.java @@ -109,6 +109,24 @@ void testExtractRegionWithStandardInput() throws IOException { assertEquals(2, countBuildings(outGML)); } + @Test + void testExtractRegionWithStandardInputAndStandardOutput() throws IOException { + String wktPolygon = "POLYGON((-73.99325421344473 40.730897087489666, -73.99359753619864 40.7304702545556, -73.99287870418264 40.7300800049056, -73.99244955074026 40.730592207101864, -73.99325421344473 40.730897087489666))"; + Path citygml = TEST_REPOSITORY.resolve("NewYork.proj/ManhattanSmall.gml"); + InputStream stdin = new ByteArrayInputStream(wktPolygon.getBytes(StandardCharsets.UTF_8)); + System.setIn(stdin); + Path noOutput = Paths.get("-"); + Files.deleteIfExists(noOutput); + assertFalse(Files.exists(noOutput)); + new CommandLine(new RegionChooserCLI()).execute("--input=" + citygml, "--output=-", "--wkt=-"); + String expectedLog = "EPSG:32118"; + assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog); + String expectedBuilding = "uuid_0547df65-ae80-459e-bb15-c839c1a2e566"; + assertTrue(out.toString().contains(expectedBuilding), out.toString() + " should contain " + expectedBuilding); + //TODO: Check if footer is here too + assertFalse(Files.exists(noOutput)); + } + @Test void testExtractRegionWithMissingInput() throws IOException { String wktPolygon = "POLYGON((-73.9959209576448 40.73286384885367, -73.996317924579 40.732359794090684, -73.9947515145143 40.7315061442504, -73.99422580154739 40.73214841515045, -73.9959209576448 40.73286384885367))"; -- GitLab