From be520dc3f6991f253ebc2385162feb44e715b8d6 Mon Sep 17 00:00:00 2001 From: Riegel Date: Wed, 15 Jan 2025 10:42:07 +0100 Subject: [PATCH] Feat: Implement ZIP stream check in GUI --- .../stuttgart/citydoctor2/check/Checker.java | 21 ++++++++++++++++--- .../citydoctor2/check/CheckerTest.java | 11 ++++++++++ .../citydoctor2/gui/CheckDialog.java | 2 +- .../citydoctor2/gui/CityDoctorController.java | 16 ++++++++++---- .../citydoctor2/gui/CheckDialog.fxml | 3 ++- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java index 8a51d1b0..200ac1c7 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java @@ -57,6 +57,7 @@ import de.hft.stuttgart.quality.model.properties.RequirementProperty; import de.hft.stuttgart.quality.model.types.Checking; import de.hft.stuttgart.quality.model.types.Parameter; import de.hft.stuttgart.quality.model.types.ValidationPlan; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -78,6 +79,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -751,10 +753,23 @@ public class Checker { for (CityGmlZipEntry entry : archive.getEntries()) { - String xmlOutput = xmlDirectory == null ? null : xmlDirectory + entry.getFullFileName().replaceFirst("\\..+", ".xml"); - String pdfOutput = pdfDirectory == null ? null : pdfDirectory + entry.getFullFileName().replaceFirst("\\..+", ".pdf"); - String outputFile = outputDirectory == null ? null : outputDirectory + entry.getFullFileName(); + String entryName = FilenameUtils.removeExtension(entry.getDisplayName()); + String xmlOutput = null; + String pdfOutput = null; + String outputFile = null; + if (xmlDirectory != null) { + xmlOutput = Path.of(xmlDirectory).resolve(entryName + "_report.xml").toString(); + } + if (pdfDirectory != null) { + pdfOutput = Path.of(pdfDirectory).resolve(entryName + "_report.pdf").toString(); + } + if (outputDirectory != null) { + outputFile = Path.of(outputDirectory).resolve(entryName + "_validated.gml").toString(); + } + streamCheck(entry, xmlOutput, pdfOutput, config, l, outputFile); + + } if (outputDirectory != null) { ArchivePacker.packAndDeleteDirectory(outputDirectory); diff --git a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckerTest.java b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckerTest.java index 84606183..33686366 100644 --- a/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckerTest.java +++ b/CityDoctorParent/CityDoctorValidation/src/test/java/de/hft/stuttgart/citydoctor2/check/CheckerTest.java @@ -175,7 +175,18 @@ public class CheckerTest { for (CityGmlZipEntry entry : cgmlArch.getEntries()) { Checker.streamCheck(entry, null, null, config, l, null); } + } + @Test + public void testZipArchiveChecking() throws CityGmlParseException, IOException { + CityGmlZipArchive cgmlArch = CityGmlZipArchive.register("src/test/resources/zipArchive.zip"); + assertNotNull(cgmlArch); + cgmlArch.mountArchive(new ParserConfiguration(8, false)); + ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); + FeatureCheckedListener l = co -> { + assertTrue(co.isValidated()); + }; + Checker.streamCheck(cgmlArch, null, null, config, l, null); } } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CheckDialog.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CheckDialog.java index 2cc5f7af..576b7820 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CheckDialog.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CheckDialog.java @@ -500,7 +500,7 @@ public class CheckDialog { return; } outputPath = Path.of(outputPathTextField.getText()); - progress.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS); + Platform.runLater(() -> progress.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS)); } controller.startZipFileChecks(config, progress::setProgress, streamCheckOption.isSelected(), outputPath, pdfReportsOption.isSelected(), diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java index 8d4990e7..9b503af3 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java @@ -31,10 +31,13 @@ import org.apache.logging.log4j.Logger; import org.citygml4j.core.model.core.CityModel; import org.xml.sax.SAXParseException; +import java.awt.*; import java.io.File; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.*; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -981,6 +984,7 @@ public class CityDoctorController { String filename = FilenameUtils.removeExtension(zipArchive.getArchivePath().getFileName().toString()); filename = filename + "_validated"; outputZipDirectory = outputPath.resolve(filename); + Files.createDirectories(outputZipDirectory); } else { String filename = FilenameUtils.removeExtension(outputPath.toAbsolutePath().getFileName().toString()); outputZipDirectory = Path.of(filename); @@ -988,13 +992,17 @@ public class CityDoctorController { String xmlReportsDirectory = null; String pdfReportsDirectory = null; - if (pdfReports) { - pdfReportsDirectory = outputZipDirectory.resolve("pdf_reports").toAbsolutePath().toString(); - } if (xmlReports) { - xmlReportsDirectory = outputZipDirectory.resolve("xml_reports").toAbsolutePath().toString(); + xmlReportsDirectory = Files.createDirectories( + outputZipDirectory.resolve("xml_reports/")).toAbsolutePath().toString(); + } + if (pdfReports) { + pdfReportsDirectory = Files.createDirectories( + outputZipDirectory.resolve("pdf_reports/")).toAbsolutePath().toString(); } Checker.streamCheck(zipArchive, xmlReportsDirectory, pdfReportsDirectory, valConfig, outputZipDirectory.toString()); + Desktop desktop = Desktop.getDesktop(); + desktop.open(outputPath.toFile()); } catch (CityGmlParseException e) { throw new RuntimeException(e); } catch (IOException e) { diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CheckDialog.fxml b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CheckDialog.fxml index db0874df..5261641c 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CheckDialog.fxml +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/resources/de/hft/stuttgart/citydoctor2/gui/CheckDialog.fxml @@ -75,7 +75,8 @@ - +