From 874a01fa2202cf6560b0075928a54615afa3d31f Mon Sep 17 00:00:00 2001 From: Andreas Penski <18-andreas.penski@users.noreply.projekte.kosit.org> Date: Mon, 28 Nov 2022 08:34:42 +0000 Subject: [PATCH] https://github.com/itplr-kosit/validator/issues/100 Make createReport optional --- CHANGELOG.md | 2 +- .../config/ConfigurationLoader.java | 63 ++++++++++--------- .../impl/ContentRepository.java | 15 +++++ src/main/model/xsd/scenarios.xsd | 2 +- src/main/resources/transform/identity.xsl | 28 +++++++++ 5 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/transform/identity.xsl diff --git a/CHANGELOG.md b/CHANGELOG.md index e7753b5..fd7b759 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - (API) Possibility to use preconfigured Saxon `Processor` instance for validation ### Changed - +- (CORE) [#100](https://github.com/itplr-kosit/validator/issues/100) Make createReport optional - (DAEMON) UI rewrite based on [Docusaurs](https://docusaurus.io) - ( API) [ResolvingConfigurationStrategy.java#getProcessor()](de/kosit/validationtool/api/ResolvingConfigurationStrategy) diff --git a/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java b/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java index 4e1c491..bf1f2b8 100644 --- a/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java +++ b/src/main/java/de/kosit/validationtool/config/ConfigurationLoader.java @@ -69,6 +69,8 @@ public class ConfigurationLoader { private static final String SUPPORTED_MAJOR_VERSION_SCHEMA = "http://www.xoev.de/de/validator/framework/1/scenarios"; + protected final Map parameters = new HashMap<>(); + /** * URL, die auf die scenerio.xml Datei zeigt. */ @@ -84,16 +86,6 @@ public class ConfigurationLoader { protected ResolvingConfigurationStrategy resolvingConfigurationStrategy; - protected final Map parameters = new HashMap<>(); - - URI getScenarioRepository() { - if (this.scenarioRepository == null) { - log.info("Creating default scenario repository (alongside scenario definition)"); - return RelativeUriResolver.resolve(URI.create("."), this.scenarioDefinition); - } - return this.scenarioRepository; - } - private static void checkVersion(final URI scenarioDefinition, final Processor processor) { try { final Result result = new DocumentParseAction(processor) @@ -132,6 +124,38 @@ public class ConfigurationLoader { } + private static List initializeScenarios(final Scenarios def, final ContentRepository contentRepository) { + return def.getScenario().stream().map(s -> initialize(s, contentRepository)).collect(Collectors.toList()); + } + + private static Scenario initialize(final ScenarioType def, final ContentRepository repository) { + final Scenario s = new Scenario(def); + s.setMatchExecutable(repository.createMatchExecutable(def)); + s.setSchema(repository.createSchema(def)); + s.setSchematronValidations(repository.createSchematronTransformations(def)); + if (def.getCreateReport() != null) { + s.setReportTransformation(repository.createReportTransformation(def)); + } else { + log.warn("No report configured. Will provide an internal format as report!"); + s.setReportTransformation(repository.createIdentityTransformation()); + } + s.setFactory(repository.getResolvingConfigurationStrategy()); + s.setUriResolver(repository.getResolver()); + s.setUnparsedTextURIResolver(repository.getUnparsedTextURIResolver()); + if (def.getAcceptMatch() != null) { + s.setAcceptExecutable(repository.createAccepptExecutable(def)); + } + return s; + } + + URI getScenarioRepository() { + if (this.scenarioRepository == null) { + log.info("Creating default scenario repository (alongside scenario definition)"); + return RelativeUriResolver.resolve(URI.create("."), this.scenarioDefinition); + } + return this.scenarioRepository; + } + public Configuration build(final Processor processor) { final ResolvingConfigurationStrategy resolving = getResolvingConfigurationStrategy(); final ContentRepository contentRepository = new ContentRepository(processor, resolving, getScenarioRepository()); @@ -150,10 +174,6 @@ public class ConfigurationLoader { return (configuration); } - private static List initializeScenarios(final Scenarios def, final ContentRepository contentRepository) { - return def.getScenario().stream().map(s -> initialize(s, contentRepository)).collect(Collectors.toList()); - } - private ResolvingConfigurationStrategy getResolvingConfigurationStrategy() { if (this.resolvingConfigurationStrategy != null) { log.info("Custom resolving strategy supplied. Please take care of xml security!"); @@ -179,21 +199,6 @@ public class ConfigurationLoader { } - private static Scenario initialize(final ScenarioType def, final ContentRepository repository) { - final Scenario s = new Scenario(def); - s.setMatchExecutable(repository.createMatchExecutable(def)); - s.setSchema(repository.createSchema(def)); - s.setSchematronValidations(repository.createSchematronTransformations(def)); - s.setReportTransformation(repository.createReportTransformation(def)); - s.setFactory(repository.getResolvingConfigurationStrategy()); - s.setUriResolver(repository.getResolver()); - s.setUnparsedTextURIResolver(repository.getUnparsedTextURIResolver()); - if (def.getAcceptMatch() != null) { - s.setAcceptExecutable(repository.createAccepptExecutable(def)); - } - return s; - } - /** * Sets actual {@link ResolvingMode}, when the validator needs to resolve stuff on startup. * diff --git a/src/main/java/de/kosit/validationtool/impl/ContentRepository.java b/src/main/java/de/kosit/validationtool/impl/ContentRepository.java index 707f455..521e3fc 100644 --- a/src/main/java/de/kosit/validationtool/impl/ContentRepository.java +++ b/src/main/java/de/kosit/validationtool/impl/ContentRepository.java @@ -17,6 +17,7 @@ package de.kosit.validationtool.impl; import java.io.IOException; +import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -265,4 +266,18 @@ public class ContentRepository { public Transformation createSchematronTransformation(final ValidateWithSchematron validateWithSchematron) { return createTransformation(validateWithSchematron.getResource()); } + + public Transformation createIdentityTransformation() { + final URL url = ContentRepository.class.getClassLoader().getResource("transform/identity.xsl"); + try ( final InputStream input = url.openStream() ) { + final XsltCompiler xsltCompiler = getProcessor().newXsltCompiler(); + final XsltExecutable executable = xsltCompiler.compile(new StreamSource(input)); + final ResourceType resource = new ResourceType(); + resource.setName("identity"); + resource.setLocation(url.toString()); + return new Transformation(executable, resource); + } catch (final IOException | SaxonApiException e) { + throw new IllegalStateException("Error creating identity transformation", e); + } + } } diff --git a/src/main/model/xsd/scenarios.xsd b/src/main/model/xsd/scenarios.xsd index bf030df..fd6d9e3 100644 --- a/src/main/model/xsd/scenarios.xsd +++ b/src/main/model/xsd/scenarios.xsd @@ -81,7 +81,7 @@ - + diff --git a/src/main/resources/transform/identity.xsl b/src/main/resources/transform/identity.xsl new file mode 100644 index 0000000..fc4ff01 --- /dev/null +++ b/src/main/resources/transform/identity.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file