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 8a51d1b0c7c47fd74e72d94c554837db94fbc801..200ac1c7ad2cf9ec5b41085d1ad0dcf746a3553b 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 846061832515be19e4d3e7cd125d6f6ce1da18ac..33686366b890124e438f6f987feda3fc330e1fa1 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 2cc5f7af70587688b4c86b14eb72c38db6d40ac0..576b7820e4a653bb8fb104beb389d987b6eaaafb 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 8d4990e7c7e76cffdf05513108c7aaa5b8410fd1..9b503af36b9da6b04673f3105a8e170b61e31ffb 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 db0874df694e9021c50849570e39f63de8d6b94f..5261641c5b6ca6e3f143e4d0e754e1802438ea45 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 @@ </Label> </children> </HBox> - <VBox fx:id="streamCheckParametersVBox" prefHeight="200.0" prefWidth="100.0"> + <VBox fx:id="streamCheckParametersVBox" disable="true" prefHeight="200.0" + prefWidth="100.0"> <children> <Label fx:id="outputPathLabel" text="Output path:"> <font>