Commit be520dc3 authored by Riegel's avatar Riegel
Browse files

Feat: Implement ZIP stream check in GUI

parent 2494bd64
...@@ -57,6 +57,7 @@ import de.hft.stuttgart.quality.model.properties.RequirementProperty; ...@@ -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.Checking;
import de.hft.stuttgart.quality.model.types.Parameter; import de.hft.stuttgart.quality.model.types.Parameter;
import de.hft.stuttgart.quality.model.types.ValidationPlan; 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.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
...@@ -78,6 +79,7 @@ import java.io.FileOutputStream; ...@@ -78,6 +79,7 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UncheckedIOException; import java.io.UncheckedIOException;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
...@@ -751,10 +753,23 @@ public class Checker { ...@@ -751,10 +753,23 @@ public class Checker {
for (CityGmlZipEntry entry : archive.getEntries()) { for (CityGmlZipEntry entry : archive.getEntries()) {
String xmlOutput = xmlDirectory == null ? null : xmlDirectory + entry.getFullFileName().replaceFirst("\\..+", ".xml"); String entryName = FilenameUtils.removeExtension(entry.getDisplayName());
String pdfOutput = pdfDirectory == null ? null : pdfDirectory + entry.getFullFileName().replaceFirst("\\..+", ".pdf"); String xmlOutput = null;
String outputFile = outputDirectory == null ? null : outputDirectory + entry.getFullFileName(); 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); streamCheck(entry, xmlOutput, pdfOutput, config, l, outputFile);
} }
if (outputDirectory != null) { if (outputDirectory != null) {
ArchivePacker.packAndDeleteDirectory(outputDirectory); ArchivePacker.packAndDeleteDirectory(outputDirectory);
......
...@@ -175,7 +175,18 @@ public class CheckerTest { ...@@ -175,7 +175,18 @@ public class CheckerTest {
for (CityGmlZipEntry entry : cgmlArch.getEntries()) { for (CityGmlZipEntry entry : cgmlArch.getEntries()) {
Checker.streamCheck(entry, null, null, config, l, null); 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);
} }
} }
...@@ -500,7 +500,7 @@ public class CheckDialog { ...@@ -500,7 +500,7 @@ public class CheckDialog {
return; return;
} }
outputPath = Path.of(outputPathTextField.getText()); outputPath = Path.of(outputPathTextField.getText());
progress.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS); Platform.runLater(() -> progress.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS));
} }
controller.startZipFileChecks(config, progress::setProgress, streamCheckOption.isSelected(), controller.startZipFileChecks(config, progress::setProgress, streamCheckOption.isSelected(),
outputPath, pdfReportsOption.isSelected(), outputPath, pdfReportsOption.isSelected(),
......
...@@ -31,10 +31,13 @@ import org.apache.logging.log4j.Logger; ...@@ -31,10 +31,13 @@ import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.core.CityModel; import org.citygml4j.core.model.core.CityModel;
import org.xml.sax.SAXParseException; import org.xml.sax.SAXParseException;
import java.awt.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.*; import java.util.*;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function; import java.util.function.Function;
...@@ -981,6 +984,7 @@ public class CityDoctorController { ...@@ -981,6 +984,7 @@ public class CityDoctorController {
String filename = FilenameUtils.removeExtension(zipArchive.getArchivePath().getFileName().toString()); String filename = FilenameUtils.removeExtension(zipArchive.getArchivePath().getFileName().toString());
filename = filename + "_validated"; filename = filename + "_validated";
outputZipDirectory = outputPath.resolve(filename); outputZipDirectory = outputPath.resolve(filename);
Files.createDirectories(outputZipDirectory);
} else { } else {
String filename = FilenameUtils.removeExtension(outputPath.toAbsolutePath().getFileName().toString()); String filename = FilenameUtils.removeExtension(outputPath.toAbsolutePath().getFileName().toString());
outputZipDirectory = Path.of(filename); outputZipDirectory = Path.of(filename);
...@@ -988,13 +992,17 @@ public class CityDoctorController { ...@@ -988,13 +992,17 @@ public class CityDoctorController {
String xmlReportsDirectory = null; String xmlReportsDirectory = null;
String pdfReportsDirectory = null; String pdfReportsDirectory = null;
if (pdfReports) {
pdfReportsDirectory = outputZipDirectory.resolve("pdf_reports").toAbsolutePath().toString();
}
if (xmlReports) { 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()); Checker.streamCheck(zipArchive, xmlReportsDirectory, pdfReportsDirectory, valConfig, outputZipDirectory.toString());
Desktop desktop = Desktop.getDesktop();
desktop.open(outputPath.toFile());
} catch (CityGmlParseException e) { } catch (CityGmlParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} catch (IOException e) { } catch (IOException e) {
......
...@@ -75,7 +75,8 @@ ...@@ -75,7 +75,8 @@
</Label> </Label>
</children> </children>
</HBox> </HBox>
<VBox fx:id="streamCheckParametersVBox" prefHeight="200.0" prefWidth="100.0"> <VBox fx:id="streamCheckParametersVBox" disable="true" prefHeight="200.0"
prefWidth="100.0">
<children> <children>
<Label fx:id="outputPathLabel" text="Output path:"> <Label fx:id="outputPathLabel" text="Output path:">
<font> <font>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment