From 06c5f3f1f4e3eef010a97c250a35685e52e68cbc Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Mon, 20 Feb 2023 12:22:20 +0100 Subject: [PATCH] - refactoring, extracting embedded classes to own files --- .../plugin/SLUBXmlFormatValidationPlugin.java | 126 ------------------ .../plugin/ValidationCatalogResolver.java | 93 +++++++++++++ .../plugin/ValidationErrorHandler.java | 21 +++ .../repository/plugin/validationSchema.java | 19 +++ .../dps/repository/plugin/xmlInfoRecord.java | 17 +++ 5 files changed, 150 insertions(+), 126 deletions(-) create mode 100644 java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java create mode 100644 java/org/slub/rosetta/dps/repository/plugin/ValidationErrorHandler.java create mode 100644 java/org/slub/rosetta/dps/repository/plugin/validationSchema.java create mode 100644 java/org/slub/rosetta/dps/repository/plugin/xmlInfoRecord.java diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBXmlFormatValidationPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBXmlFormatValidationPlugin.java index 1ac1c15..3e27c89 100644 --- a/java/org/slub/rosetta/dps/repository/plugin/SLUBXmlFormatValidationPlugin.java +++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBXmlFormatValidationPlugin.java @@ -19,29 +19,17 @@ package org.slub.rosetta.dps.repository.plugin; import com.exlibris.core.infra.common.exceptions.logging.ExLogger; import com.exlibris.dps.sdk.techmd.FormatValidationPlugin; import org.w3c.dom.Document; -import org.w3c.dom.ls.LSInput; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; import javax.xml.XMLConstants; -import javax.xml.catalog.CatalogFeatures; -import javax.xml.catalog.CatalogManager; -import javax.xml.catalog.CatalogResolver; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.net.URI; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -51,120 +39,6 @@ import static org.slub.rosetta.dps.repository.plugin.validationSchemaType.schema enum validationSchemaType { schema, dtd, relaxng, schematron, nothing } -class validationSchema { - public final String nameSpace; - public final validationSchemaType schemaType; - public final String schemaURL; - public Schema schemaInst; - public InputStream schemaInputStream; - public String schemaLocalURL; - public validationSchema(String nameSpace, validationSchemaType schemaType, String schemaURL) { - this.nameSpace = nameSpace; - this.schemaURL = schemaURL; - this.schemaType = schemaType; - } -} - -class xmlInfoRecord { - public final String nameSpaceUri; - public final String documentUri; - public final String xmlVersion; - public final String systemID; - public final String publicID; - public xmlInfoRecord(String nameSpaceUri, String documentUri, String xmlVersion, String systemID, String publicID) { - this.documentUri = documentUri; - this.nameSpaceUri = nameSpaceUri; - this.xmlVersion = xmlVersion; - this.systemID = systemID; - this.publicID = publicID; - } -} - -class ValidationCatalogResolver implements CatalogResolver { - private final HashMap<String,String> public2res = new HashMap<>() { - // TODO: add support for catalog.xml files. - { - put("-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN", "/resources/dtd/JATS-journalpublishing1.dtd"); - put("-//Recordare//DTD MusicXML 4.0 Partwise//EN", "http://www.musicxml.org/dtds/partwise.dtd"); - put("-//OASIS//DTD DocBook XML V4.2//EN" , "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"); - put("-//OASIS//DTD DocBook XML V4.3//EN" , "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"); - put("-//OASIS//DTD DocBook XML V4.4//EN" , "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"); - - } - }; - private final HashSet<String> allowedDtds = new HashSet<>(Arrays.asList("-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN")); - - @Override - public InputSource resolveEntity(String publicId, String systemId) { - System.out.println("======"); - System.out.println("resolveEntity\n\tpublicId=" + publicId + "\n\tsystemId=" + systemId ); - /* TODO: only allow catalog calls to defined ressources */ - if (allowedDtds.contains(publicId)) { - System.out.println("fallback to CatalogResolver"); - //CatalogFeatures f = CatalogFeatures.builder().with(CatalogFeatures.Feature.RESOLVE, "continue").build(); - var strippedSystemId = systemId; - if (!systemId.startsWith("http://")) { - strippedSystemId = "file:/etc/xml/" + systemId.substring(systemId.lastIndexOf("/") + 1); - } - System.out.println("\tusing URI=" + strippedSystemId); - CatalogResolver cr = CatalogManager.catalogResolver(CatalogFeatures.defaults(), URI.create(strippedSystemId)); - return cr.resolveEntity(publicId, systemId); - } - if (public2res.containsKey(publicId)) { - System.out.println("\tressource=" + public2res.get(publicId)); - InputSource is = new InputSource(); - is.setByteStream(SLUBXmlFormatValidationPlugin.class.getResourceAsStream(public2res.get(publicId))); - is.setPublicId(publicId); - is.setSystemId(systemId); - return is; - } - System.out.println("\tnot implemented (no fallback, no mapping)"); - if (systemId.startsWith("http://")) { - CatalogResolver cr = CatalogManager.catalogResolver(CatalogFeatures.defaults(), URI.create(systemId)); - return cr.resolveEntity(publicId, systemId); - } - return null; - } - - @Override - public Source resolve(String href, String base) { - System.out.println("======"); - System.out.println("resolve href=" + href + " base=" + base); - - return null; - } - - @Override - public InputStream resolveEntity(String publicId, String systemId, String baseUri, String nameSpace) { - System.out.println("======"); - System.out.println("resolveEntity2 publicId=" + publicId + " systemId=" + systemId); - return null; - } - - @Override - public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseUri) { - System.out.println("======"); - System.out.println("resolveResource publicId=" + publicId + " systemId=" + systemId); - return null; - } -} - -class ValidationErrorHandler implements ErrorHandler { - @Override - public void warning(SAXParseException e) { - //System.out.println("WARN: " + e.getMessage()); - } - - @Override - public void error(SAXParseException e) { - //System.out.println("ERROR: " + e.getMessage()); - } - - @Override - public void fatalError(SAXParseException e) { - System.out.println("FATAL: " + e.getMessage()); - } -} /** * SLUBXmlFormatValidationPlugin diff --git a/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java b/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java new file mode 100644 index 0000000..98be53e --- /dev/null +++ b/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java @@ -0,0 +1,93 @@ +package org.slub.rosetta.dps.repository.plugin; + +import org.w3c.dom.ls.LSInput; +import org.xml.sax.InputSource; + +import javax.xml.catalog.CatalogException; +import javax.xml.catalog.CatalogFeatures; +import javax.xml.catalog.CatalogResolver; +import javax.xml.transform.Source; +import java.io.InputStream; +import java.net.URI; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; + +import static javax.xml.catalog.CatalogManager.catalogResolver; + +class ValidationCatalogResolver implements CatalogResolver { + private final HashMap<String, String> public2res = new HashMap<>() { + // TODO: add support for catalog.xml files. + { + put("-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN", "/resources/dtd/JATS-journalpublishing1.dtd"); + put("-//Recordare//DTD MusicXML 4.0 Partwise//EN", "http://www.musicxml.org/dtds/partwise.dtd"); + put("-//OASIS//DTD DocBook XML V4.2//EN", "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"); + put("-//OASIS//DTD DocBook XML V4.3//EN", "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"); + put("-//OASIS//DTD DocBook XML V4.4//EN", "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"); + + } + }; + private final HashSet<String> allowedDtds = new HashSet<>(Arrays.asList("-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN")); + + @Override + public InputSource resolveEntity(String publicId, String systemId) { + System.out.println("======"); + System.out.println("resolveEntity\n\tpublicId=" + publicId + "\n\tsystemId=" + systemId); + /* TODO: only allow catalog calls to defined ressources */ + if (allowedDtds.contains(publicId)) { + System.out.println("fallback to CatalogResolver"); + //CatalogFeatures f = CatalogFeatures.builder().with(CatalogFeatures.Feature.RESOLVE, "continue").build(); + var strippedSystemId = systemId; + if (!systemId.startsWith("http://")) { + strippedSystemId = "file:/etc/xml/" + systemId.substring(systemId.lastIndexOf("/") + 1); + } + System.out.println("\tusing URI=" + strippedSystemId); + try { + CatalogResolver cr = catalogResolver(CatalogFeatures.defaults(), URI.create(strippedSystemId)); + return cr.resolveEntity(publicId, systemId); + } catch (CatalogException e) { + System.out.println("No local mapping found for publicId=" + publicId + ", systemId=" + systemId + ", " + e.getMessage()); + } + } + if (public2res.containsKey(publicId)) { + System.out.println("\tressource=" + public2res.get(publicId)); + InputSource is = new InputSource(); + is.setByteStream(SLUBXmlFormatValidationPlugin.class.getResourceAsStream(public2res.get(publicId))); + is.setPublicId(publicId); + is.setSystemId(systemId); + return is; + } + System.out.println("\tnot implemented (no fallback, no mapping)"); + if (systemId.startsWith("http://")) { + try { + CatalogResolver cr = catalogResolver(CatalogFeatures.defaults(), URI.create(systemId)); + return cr.resolveEntity(publicId, systemId); + } catch (CatalogException e) { + System.out.println("No mapping found for publicId=" + publicId + ", systemId=" + systemId + ", " + e.getMessage()); + } + } + return null; + } + + @Override + public Source resolve(String href, String base) { + System.out.println("======"); + System.out.println("resolve href=" + href + " base=" + base); + + return null; + } + + @Override + public InputStream resolveEntity(String publicId, String systemId, String baseUri, String nameSpace) { + System.out.println("======"); + System.out.println("resolveEntity2 publicId=" + publicId + " systemId=" + systemId); + return null; + } + + @Override + public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseUri) { + System.out.println("======"); + System.out.println("resolveResource publicId=" + publicId + " systemId=" + systemId); + return null; + } +} diff --git a/java/org/slub/rosetta/dps/repository/plugin/ValidationErrorHandler.java b/java/org/slub/rosetta/dps/repository/plugin/ValidationErrorHandler.java new file mode 100644 index 0000000..f6952e6 --- /dev/null +++ b/java/org/slub/rosetta/dps/repository/plugin/ValidationErrorHandler.java @@ -0,0 +1,21 @@ +package org.slub.rosetta.dps.repository.plugin; + +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXParseException; + +class ValidationErrorHandler implements ErrorHandler { + @Override + public void warning(SAXParseException e) { + //System.out.println("WARN: " + e.getMessage()); + } + + @Override + public void error(SAXParseException e) { + //System.out.println("ERROR: " + e.getMessage()); + } + + @Override + public void fatalError(SAXParseException e) { + System.out.println("FATAL: " + e.getMessage()); + } +} diff --git a/java/org/slub/rosetta/dps/repository/plugin/validationSchema.java b/java/org/slub/rosetta/dps/repository/plugin/validationSchema.java new file mode 100644 index 0000000..8ecd9f5 --- /dev/null +++ b/java/org/slub/rosetta/dps/repository/plugin/validationSchema.java @@ -0,0 +1,19 @@ +package org.slub.rosetta.dps.repository.plugin; + +import javax.xml.validation.Schema; +import java.io.InputStream; + +class validationSchema { + public final String nameSpace; + public final validationSchemaType schemaType; + public final String schemaURL; + public Schema schemaInst; + public InputStream schemaInputStream; + public String schemaLocalURL; + + public validationSchema(String nameSpace, validationSchemaType schemaType, String schemaURL) { + this.nameSpace = nameSpace; + this.schemaURL = schemaURL; + this.schemaType = schemaType; + } +} diff --git a/java/org/slub/rosetta/dps/repository/plugin/xmlInfoRecord.java b/java/org/slub/rosetta/dps/repository/plugin/xmlInfoRecord.java new file mode 100644 index 0000000..0ee478b --- /dev/null +++ b/java/org/slub/rosetta/dps/repository/plugin/xmlInfoRecord.java @@ -0,0 +1,17 @@ +package org.slub.rosetta.dps.repository.plugin; + +class xmlInfoRecord { + public final String nameSpaceUri; + public final String documentUri; + public final String xmlVersion; + public final String systemID; + public final String publicID; + + public xmlInfoRecord(String nameSpaceUri, String documentUri, String xmlVersion, String systemID, String publicID) { + this.documentUri = documentUri; + this.nameSpaceUri = nameSpaceUri; + this.xmlVersion = xmlVersion; + this.systemID = systemID; + this.publicID = publicID; + } +} -- GitLab