diff --git a/README.adoc b/README.adoc index 228f8ce..f81970d 100644 --- a/README.adoc +++ b/README.adoc @@ -40,7 +40,7 @@ Update version in `pom.xml`, e.g.: [source,xml] ---- -com.metanorma +org.metanorma mn2sts 1.9 Metanorma MN XML to NISO STS XML converter diff --git a/pom.xml b/pom.xml index c37d9f3..80d388b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,18 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.metanorma + org.metanorma mn2sts 1.9 Metanorma XML to NISO STS XML converter jar - https://www.metanorma.com + https://www.metanorma.org UTF-8 1.8 1.8 ${project.artifactId}-${project.version}.jar - com.metanorma.mn2sts + org.metanorma.mn2sts 5.4.2 @@ -55,7 +55,7 @@ - com.metanorma.mn2sts + org.metanorma.mn2sts ${project.version} diff --git a/src/main/java/com/metanorma/Constants.java b/src/main/java/org/metanorma/Constants.java similarity index 96% rename from src/main/java/com/metanorma/Constants.java rename to src/main/java/org/metanorma/Constants.java index 8064518..46050f8 100644 --- a/src/main/java/com/metanorma/Constants.java +++ b/src/main/java/org/metanorma/Constants.java @@ -1,4 +1,4 @@ -package com.metanorma; +package org.metanorma; /** * diff --git a/src/main/java/com/metanorma/LSInputImpl.java b/src/main/java/org/metanorma/LSInputImpl.java similarity index 93% rename from src/main/java/com/metanorma/LSInputImpl.java rename to src/main/java/org/metanorma/LSInputImpl.java index 92403ca..3067acf 100644 --- a/src/main/java/com/metanorma/LSInputImpl.java +++ b/src/main/java/org/metanorma/LSInputImpl.java @@ -1,106 +1,106 @@ -package com.metanorma; - -import com.metanorma.utils.LoggerHelper; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.w3c.dom.ls.LSInput; - - -public class LSInputImpl implements LSInput { - - private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); - - private String publicId; - - private String systemId; - - public String getPublicId() { - return publicId; - } - - public void setPublicId(String publicId) { - this.publicId = publicId; - } - - public String getBaseURI() { - return null; - } - - public InputStream getByteStream() { - return null; - } - - public boolean getCertifiedText() { - return false; - } - - public Reader getCharacterStream() { - return null; - } - - public String getEncoding() { - return null; - } - - public String getStringData() { - synchronized (inputStream) { - try { - byte[] input = new byte[inputStream.available()]; - inputStream.read(input); - String contents = new String(input); - return contents; - } catch (IOException e) { - //e.printStackTrace(); - //System.out.println("Exception " + e); - logger.log(Level.INFO, "Exception {0}", e); - return null; - } - } - } - - public void setBaseURI(String baseURI) { - } - - public void setByteStream(InputStream byteStream) { - } - - public void setCertifiedText(boolean certifiedText) { - } - - public void setCharacterStream(Reader characterStream) { - } - - public void setEncoding(String encoding) { - } - - public void setStringData(String stringData) { - } - - public String getSystemId() { - return systemId; - } - - public void setSystemId(String systemId) { - this.systemId = systemId; - } - - public BufferedInputStream getInputStream() { - return inputStream; - } - - public void setInputStream(BufferedInputStream inputStream) { - this.inputStream = inputStream; - } - - private BufferedInputStream inputStream; - - public LSInputImpl(String publicId, String sysId, InputStream input) { - this.publicId = publicId; - this.systemId = sysId; - this.inputStream = new BufferedInputStream(input); - } +package org.metanorma; + +import org.metanorma.utils.LoggerHelper; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.w3c.dom.ls.LSInput; + + +public class LSInputImpl implements LSInput { + + private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); + + private String publicId; + + private String systemId; + + public String getPublicId() { + return publicId; + } + + public void setPublicId(String publicId) { + this.publicId = publicId; + } + + public String getBaseURI() { + return null; + } + + public InputStream getByteStream() { + return null; + } + + public boolean getCertifiedText() { + return false; + } + + public Reader getCharacterStream() { + return null; + } + + public String getEncoding() { + return null; + } + + public String getStringData() { + synchronized (inputStream) { + try { + byte[] input = new byte[inputStream.available()]; + inputStream.read(input); + String contents = new String(input); + return contents; + } catch (IOException e) { + //e.printStackTrace(); + //System.out.println("Exception " + e); + logger.log(Level.INFO, "Exception {0}", e); + return null; + } + } + } + + public void setBaseURI(String baseURI) { + } + + public void setByteStream(InputStream byteStream) { + } + + public void setCertifiedText(boolean certifiedText) { + } + + public void setCharacterStream(Reader characterStream) { + } + + public void setEncoding(String encoding) { + } + + public void setStringData(String stringData) { + } + + public String getSystemId() { + return systemId; + } + + public void setSystemId(String systemId) { + this.systemId = systemId; + } + + public BufferedInputStream getInputStream() { + return inputStream; + } + + public void setInputStream(BufferedInputStream inputStream) { + this.inputStream = inputStream; + } + + private BufferedInputStream inputStream; + + public LSInputImpl(String publicId, String sysId, InputStream input) { + this.publicId = publicId; + this.systemId = sysId; + this.inputStream = new BufferedInputStream(input); + } } \ No newline at end of file diff --git a/src/main/java/com/metanorma/OutputFormatEnum.java b/src/main/java/org/metanorma/OutputFormatEnum.java similarity index 62% rename from src/main/java/com/metanorma/OutputFormatEnum.java rename to src/main/java/org/metanorma/OutputFormatEnum.java index 967185d..2c3764c 100644 --- a/src/main/java/com/metanorma/OutputFormatEnum.java +++ b/src/main/java/org/metanorma/OutputFormatEnum.java @@ -1,6 +1,6 @@ -package com.metanorma; - - -public enum OutputFormatEnum { - NISO, ISO -} +package org.metanorma; + + +public enum OutputFormatEnum { + NISO, ISO +} diff --git a/src/main/java/com/metanorma/RegExHelper.java b/src/main/java/org/metanorma/RegExHelper.java similarity index 92% rename from src/main/java/com/metanorma/RegExHelper.java rename to src/main/java/org/metanorma/RegExHelper.java index a8db801..1ed8efa 100644 --- a/src/main/java/com/metanorma/RegExHelper.java +++ b/src/main/java/org/metanorma/RegExHelper.java @@ -1,4 +1,4 @@ -package com.metanorma; +package org.metanorma; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/com/metanorma/ResourceResolver.java b/src/main/java/org/metanorma/ResourceResolver.java similarity index 97% rename from src/main/java/com/metanorma/ResourceResolver.java rename to src/main/java/org/metanorma/ResourceResolver.java index a7d4a80..68be6bd 100644 --- a/src/main/java/com/metanorma/ResourceResolver.java +++ b/src/main/java/org/metanorma/ResourceResolver.java @@ -1,119 +1,119 @@ -package com.metanorma; - -// https://stackoverflow.com/questions/2342808/how-to-validate-an-xml-file-using-java-with-an-xsd-having-an-include - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -import org.w3c.dom.ls.LSInput; -import org.w3c.dom.ls.LSResourceResolver; - -/** - * The Class ResourceResolver. - */ -public class ResourceResolver implements LSResourceResolver { - - /** The schema base path. */ - private final String schemaBasePath; - - /** The path map. */ - private Map pathMap = new HashMap(); - - /** - * Instantiates a new resource resolver. - * - * @param schemaBasePath the schema base path - */ - public ResourceResolver(String schemaBasePath) { - this.schemaBasePath = schemaBasePath; - } - - /* (non-Javadoc) - * @see org.w3c.dom.ls.LSResourceResolver#resolveResource(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public LSInput resolveResource(String type, String namespaceURI, - String publicId, String systemId, String baseURI) { - // The base resource that includes this current resource - String baseResourceName = null; - String baseResourcePath = null; - // Extract the current resource name - if (systemId == null) { // skip empty - return null; // - } - String currentResourceName = systemId.substring(systemId.lastIndexOf("/") + 1); - - // If this resource hasn't been added yet - if (!pathMap.containsKey(currentResourceName)) { - if (baseURI != null) { - baseResourceName = baseURI - .substring(baseURI.lastIndexOf("/") + 1); - } - - // we dont need "./" since getResourceAsStream cannot understand it - if (systemId.startsWith("./")) { - systemId = systemId.substring(2, systemId.length()); - } - - // If the baseResourcePath has already been discovered, get that - // from pathMap - if (pathMap.containsKey(baseResourceName)) { - baseResourcePath = pathMap.get(baseResourceName); - } else { - // The baseResourcePath should be the schemaBasePath - baseResourcePath = schemaBasePath; - } - - // Read the resource as input stream - String normalizedPath = getNormalizedPath(baseResourcePath, systemId); - InputStream resourceAsStream = this.getClass().getClassLoader() - .getResourceAsStream(normalizedPath); - - // if the current resource is not in the same path with base - // resource, add current resource's path to pathMap - if (systemId.contains("/")) { - pathMap.put(currentResourceName, normalizedPath.substring(0,normalizedPath.lastIndexOf("/")+1)); - } else { - // The current resource should be at the same path as the base - // resource - pathMap.put(systemId, baseResourcePath); - } - Scanner s = new Scanner(resourceAsStream).useDelimiter("\\A"); - String s1 = s.next().replaceAll("\\n", " ") // the parser cannot understand elements broken down multiple lines e.g. () - .replace("\\t", " ") // these two about whitespaces is only for decoration - .replaceAll("\\s+", " ").replaceAll("[^\\x20-\\x7e]", ""); // some files has a special character as a first character indicating utf-8 file - InputStream is = new ByteArrayInputStream(s1.getBytes()); - - return new LSInputImpl(publicId, systemId, is); // same as Input class - } - - // If this resource has already been added, do not add the same resource again. It throws - // "org.xml.sax.SAXParseException: sch-props-correct.2: A schema cannot contain two global components with the same name; this schema contains two occurrences of ..." - // return null instead. - return null; - } - - /** - * Gets the normalized path. - * - * @param basePath the base path - * @param relativePath the relative path - * @return the normalized path - */ - private String getNormalizedPath(String basePath, String relativePath){ - if(!relativePath.startsWith("../")){ - return basePath + relativePath; - } - else{ - while(relativePath.startsWith("../")){ - basePath = basePath.substring(0,basePath.substring(0, basePath.length()-1).lastIndexOf("/")+1); - relativePath = relativePath.substring(3); - } - return basePath+relativePath; - } - } -} - +package org.metanorma; + +// https://stackoverflow.com/questions/2342808/how-to-validate-an-xml-file-using-java-with-an-xsd-having-an-include + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSResourceResolver; + +/** + * The Class ResourceResolver. + */ +public class ResourceResolver implements LSResourceResolver { + + /** The schema base path. */ + private final String schemaBasePath; + + /** The path map. */ + private Map pathMap = new HashMap(); + + /** + * Instantiates a new resource resolver. + * + * @param schemaBasePath the schema base path + */ + public ResourceResolver(String schemaBasePath) { + this.schemaBasePath = schemaBasePath; + } + + /* (non-Javadoc) + * @see org.w3c.dom.ls.LSResourceResolver#resolveResource(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public LSInput resolveResource(String type, String namespaceURI, + String publicId, String systemId, String baseURI) { + // The base resource that includes this current resource + String baseResourceName = null; + String baseResourcePath = null; + // Extract the current resource name + if (systemId == null) { // skip empty + return null; // + } + String currentResourceName = systemId.substring(systemId.lastIndexOf("/") + 1); + + // If this resource hasn't been added yet + if (!pathMap.containsKey(currentResourceName)) { + if (baseURI != null) { + baseResourceName = baseURI + .substring(baseURI.lastIndexOf("/") + 1); + } + + // we dont need "./" since getResourceAsStream cannot understand it + if (systemId.startsWith("./")) { + systemId = systemId.substring(2, systemId.length()); + } + + // If the baseResourcePath has already been discovered, get that + // from pathMap + if (pathMap.containsKey(baseResourceName)) { + baseResourcePath = pathMap.get(baseResourceName); + } else { + // The baseResourcePath should be the schemaBasePath + baseResourcePath = schemaBasePath; + } + + // Read the resource as input stream + String normalizedPath = getNormalizedPath(baseResourcePath, systemId); + InputStream resourceAsStream = this.getClass().getClassLoader() + .getResourceAsStream(normalizedPath); + + // if the current resource is not in the same path with base + // resource, add current resource's path to pathMap + if (systemId.contains("/")) { + pathMap.put(currentResourceName, normalizedPath.substring(0,normalizedPath.lastIndexOf("/")+1)); + } else { + // The current resource should be at the same path as the base + // resource + pathMap.put(systemId, baseResourcePath); + } + Scanner s = new Scanner(resourceAsStream).useDelimiter("\\A"); + String s1 = s.next().replaceAll("\\n", " ") // the parser cannot understand elements broken down multiple lines e.g. () + .replace("\\t", " ") // these two about whitespaces is only for decoration + .replaceAll("\\s+", " ").replaceAll("[^\\x20-\\x7e]", ""); // some files has a special character as a first character indicating utf-8 file + InputStream is = new ByteArrayInputStream(s1.getBytes()); + + return new LSInputImpl(publicId, systemId, is); // same as Input class + } + + // If this resource has already been added, do not add the same resource again. It throws + // "org.xml.sax.SAXParseException: sch-props-correct.2: A schema cannot contain two global components with the same name; this schema contains two occurrences of ..." + // return null instead. + return null; + } + + /** + * Gets the normalized path. + * + * @param basePath the base path + * @param relativePath the relative path + * @return the normalized path + */ + private String getNormalizedPath(String basePath, String relativePath){ + if(!relativePath.startsWith("../")){ + return basePath + relativePath; + } + else{ + while(relativePath.startsWith("../")){ + basePath = basePath.substring(0,basePath.substring(0, basePath.length()-1).lastIndexOf("/")+1); + relativePath = relativePath.substring(3); + } + return basePath+relativePath; + } + } +} + diff --git a/src/main/java/com/metanorma/ResourcesUtils.java b/src/main/java/org/metanorma/ResourcesUtils.java similarity index 97% rename from src/main/java/com/metanorma/ResourcesUtils.java rename to src/main/java/org/metanorma/ResourcesUtils.java index 77f855b..3b6ec50 100644 --- a/src/main/java/com/metanorma/ResourcesUtils.java +++ b/src/main/java/org/metanorma/ResourcesUtils.java @@ -1,106 +1,106 @@ -package com.metanorma; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.JarURLConnection; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.util.Enumeration; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; - -public class ResourcesUtils { - - // https://github.com/nguyenq/tess4j/blob/master/src/main/java/net/sourceforge/tess4j/util/LoadLibs.java - /** - * Copies resources to target folder. - * - * @param resourceUrl - * @param targetPath - */ - public static void copyResources(URL resourceUrl, String basePath, File targetPath) throws IOException, URISyntaxException { - - if (resourceUrl == null) { - return; - } - - //System.out.println("resourceUrl=" + resourceUrl.toString()); - URLConnection urlConnection = resourceUrl.openConnection(); - - /** - * Copy resources either from inside jar or from project folder. - */ - if (urlConnection instanceof JarURLConnection) { - copyJarResourceToPath((JarURLConnection) urlConnection, targetPath); - } else { - File file = new File(resourceUrl.getPath()); - if (file.isDirectory()) { - for (File resourceFile : FileUtils.listFiles(file, null, true)) { - String resourceFilePath = resourceFile.getPath().replaceAll("\\\\", "/"); - //int index = resourceFile.getPath().lastIndexOf(targetPath.getName()) + targetPath.getName().length(); - int index = resourceFilePath.lastIndexOf(basePath); - File targetFile = new File(targetPath, resourceFile.getPath().substring(index)); - if (!targetFile.exists() || targetFile.length() != resourceFile.length() || targetFile.lastModified() != resourceFile.lastModified()) { - if (resourceFile.isFile()) { - FileUtils.copyFile(resourceFile, targetFile, true); - } - } - } - } else { - if (!targetPath.exists() || targetPath.length() != file.length() || targetPath.lastModified() != file.lastModified()) { - FileUtils.copyFile(file, targetPath, true); - } - } - } - } - - /** - * Copies resources from the jar file of the current thread and extract it - * to the destination path. - * - * @param jarConnection - * @param destPath destination file or directory - */ - static void copyJarResourceToPath(JarURLConnection jarConnection, File destPath) { - try (JarFile jarFile = jarConnection.getJarFile()) { - String jarConnectionEntryName = jarConnection.getEntryName(); - if (!jarConnectionEntryName.endsWith("/")) { - jarConnectionEntryName += "/"; - } - - /** - * Iterate all entries in the jar file. - */ - for (Enumeration e = jarFile.entries(); e.hasMoreElements();) { - JarEntry jarEntry = e.nextElement(); - String jarEntryName = jarEntry.getName(); - - /** - * Extract files only if they match the path. - */ - if (jarEntryName.startsWith(jarConnectionEntryName)) { - String filename = jarConnectionEntryName + jarEntryName.substring(jarConnectionEntryName.length()); - File targetFile = new File(destPath, filename); - - if (jarEntry.isDirectory()) { - targetFile.mkdirs(); - } else { - if (!targetFile.exists() || targetFile.length() != jarEntry.getSize()) { - try (InputStream is = jarFile.getInputStream(jarEntry); - OutputStream out = FileUtils.openOutputStream(targetFile)) { - IOUtils.copy(is, out); - } - } - } - } - } - } catch (IOException e) { - System.err.println(e.getMessage()); - } - } +package org.metanorma; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.JarURLConnection; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; +import java.util.Enumeration; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; + +public class ResourcesUtils { + + // https://github.com/nguyenq/tess4j/blob/master/src/main/java/net/sourceforge/tess4j/util/LoadLibs.java + /** + * Copies resources to target folder. + * + * @param resourceUrl + * @param targetPath + */ + public static void copyResources(URL resourceUrl, String basePath, File targetPath) throws IOException, URISyntaxException { + + if (resourceUrl == null) { + return; + } + + //System.out.println("resourceUrl=" + resourceUrl.toString()); + URLConnection urlConnection = resourceUrl.openConnection(); + + /** + * Copy resources either from inside jar or from project folder. + */ + if (urlConnection instanceof JarURLConnection) { + copyJarResourceToPath((JarURLConnection) urlConnection, targetPath); + } else { + File file = new File(resourceUrl.getPath()); + if (file.isDirectory()) { + for (File resourceFile : FileUtils.listFiles(file, null, true)) { + String resourceFilePath = resourceFile.getPath().replaceAll("\\\\", "/"); + //int index = resourceFile.getPath().lastIndexOf(targetPath.getName()) + targetPath.getName().length(); + int index = resourceFilePath.lastIndexOf(basePath); + File targetFile = new File(targetPath, resourceFile.getPath().substring(index)); + if (!targetFile.exists() || targetFile.length() != resourceFile.length() || targetFile.lastModified() != resourceFile.lastModified()) { + if (resourceFile.isFile()) { + FileUtils.copyFile(resourceFile, targetFile, true); + } + } + } + } else { + if (!targetPath.exists() || targetPath.length() != file.length() || targetPath.lastModified() != file.lastModified()) { + FileUtils.copyFile(file, targetPath, true); + } + } + } + } + + /** + * Copies resources from the jar file of the current thread and extract it + * to the destination path. + * + * @param jarConnection + * @param destPath destination file or directory + */ + static void copyJarResourceToPath(JarURLConnection jarConnection, File destPath) { + try (JarFile jarFile = jarConnection.getJarFile()) { + String jarConnectionEntryName = jarConnection.getEntryName(); + if (!jarConnectionEntryName.endsWith("/")) { + jarConnectionEntryName += "/"; + } + + /** + * Iterate all entries in the jar file. + */ + for (Enumeration e = jarFile.entries(); e.hasMoreElements();) { + JarEntry jarEntry = e.nextElement(); + String jarEntryName = jarEntry.getName(); + + /** + * Extract files only if they match the path. + */ + if (jarEntryName.startsWith(jarConnectionEntryName)) { + String filename = jarConnectionEntryName + jarEntryName.substring(jarConnectionEntryName.length()); + File targetFile = new File(destPath, filename); + + if (jarEntry.isDirectory()) { + targetFile.mkdirs(); + } else { + if (!targetFile.exists() || targetFile.length() != jarEntry.getSize()) { + try (InputStream is = jarFile.getInputStream(jarEntry); + OutputStream out = FileUtils.openOutputStream(targetFile)) { + IOUtils.copy(is, out); + } + } + } + } + } + } catch (IOException e) { + System.err.println(e.getMessage()); + } + } } \ No newline at end of file diff --git a/src/main/java/com/metanorma/STSValidator.java b/src/main/java/org/metanorma/STSValidator.java similarity index 91% rename from src/main/java/com/metanorma/STSValidator.java rename to src/main/java/org/metanorma/STSValidator.java index 154f555..eb84481 100644 --- a/src/main/java/com/metanorma/STSValidator.java +++ b/src/main/java/org/metanorma/STSValidator.java @@ -1,11 +1,11 @@ -package com.metanorma; +package org.metanorma; -import static com.metanorma.Constants.*; -import com.metanorma.utils.LoggerHelper; -import com.metanorma.validator.CheckAgainstEnum; -import com.metanorma.validator.CheckAgainstMap; -import com.metanorma.validator.DTDValidator; -import com.metanorma.validator.XSDValidator; +import static org.metanorma.Constants.*; +import org.metanorma.utils.LoggerHelper; +import org.metanorma.validator.CheckAgainstEnum; +import org.metanorma.validator.CheckAgainstMap; +import org.metanorma.validator.DTDValidator; +import org.metanorma.validator.XSDValidator; import java.io.File; import java.util.List; diff --git a/src/main/java/com/metanorma/Util.java b/src/main/java/org/metanorma/Util.java similarity index 93% rename from src/main/java/com/metanorma/Util.java rename to src/main/java/org/metanorma/Util.java index 619603d..f3be944 100644 --- a/src/main/java/com/metanorma/Util.java +++ b/src/main/java/org/metanorma/Util.java @@ -1,66 +1,66 @@ -package com.metanorma; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -/** - * - * @author Alexander Dyuzhev - */ -public class Util { - - public static String getAppVersion() { - String version = ""; - try { - Enumeration resources = mn2sts.class.getClassLoader().getResources("META-INF/MANIFEST.MF"); - while (resources.hasMoreElements()) { - Manifest manifest = new Manifest(resources.nextElement().openStream()); - // check that this is your manifest and do what you need or get the next one - Attributes attr = manifest.getMainAttributes(); - String mainClass = attr.getValue("Main-Class"); - if(mainClass != null && mainClass.contains("com.metanorma.mn2sts")) { - version = manifest.getMainAttributes().getValue("Implementation-Version"); - } - } - } catch (IOException ex) { - version = ""; - } - - return version; - } - - // get file from classpath, resources folder - public static InputStream getStreamFromResources(ClassLoader classLoader, String fileName) throws Exception { - InputStream stream = classLoader.getResourceAsStream(fileName); - if (stream == null) { - throw new Exception("Cannot get resource \"" + fileName + "\" from Jar file."); - } - return stream; - } - - public static void FlushTempFolder(Path tmpfilepath) { - if (Files.exists(tmpfilepath)) { - //Files.deleteIfExists(tmpfilepath); - try { - Files.walk(tmpfilepath) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - - public static String getJavaTempDir() { - return System.getProperty("java.io.tmpdir"); - } -} +package org.metanorma; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + +/** + * + * @author Alexander Dyuzhev + */ +public class Util { + + public static String getAppVersion() { + String version = ""; + try { + Enumeration resources = mn2sts.class.getClassLoader().getResources("META-INF/MANIFEST.MF"); + while (resources.hasMoreElements()) { + Manifest manifest = new Manifest(resources.nextElement().openStream()); + // check that this is your manifest and do what you need or get the next one + Attributes attr = manifest.getMainAttributes(); + String mainClass = attr.getValue("Main-Class"); + if(mainClass != null && mainClass.contains("org.metanorma.mn2sts")) { + version = manifest.getMainAttributes().getValue("Implementation-Version"); + } + } + } catch (IOException ex) { + version = ""; + } + + return version; + } + + // get file from classpath, resources folder + public static InputStream getStreamFromResources(ClassLoader classLoader, String fileName) throws Exception { + InputStream stream = classLoader.getResourceAsStream(fileName); + if (stream == null) { + throw new Exception("Cannot get resource \"" + fileName + "\" from Jar file."); + } + return stream; + } + + public static void FlushTempFolder(Path tmpfilepath) { + if (Files.exists(tmpfilepath)) { + //Files.deleteIfExists(tmpfilepath); + try { + Files.walk(tmpfilepath) + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + public static String getJavaTempDir() { + return System.getProperty("java.io.tmpdir"); + } +} diff --git a/src/main/java/com/metanorma/XsltConverter.java b/src/main/java/org/metanorma/XsltConverter.java similarity index 97% rename from src/main/java/com/metanorma/XsltConverter.java rename to src/main/java/org/metanorma/XsltConverter.java index 35cca51..c19d70d 100644 --- a/src/main/java/com/metanorma/XsltConverter.java +++ b/src/main/java/org/metanorma/XsltConverter.java @@ -1,8 +1,8 @@ -package com.metanorma; +package org.metanorma; -import static com.metanorma.Constants.*; -import com.metanorma.utils.LoggerHelper; -import com.metanorma.validator.CheckAgainstEnum; +import static org.metanorma.Constants.*; +import org.metanorma.utils.LoggerHelper; +import org.metanorma.validator.CheckAgainstEnum; import java.io.BufferedWriter; import java.io.File; diff --git a/src/main/java/com/metanorma/mn2sts.java b/src/main/java/org/metanorma/mn2sts.java similarity index 95% rename from src/main/java/com/metanorma/mn2sts.java rename to src/main/java/org/metanorma/mn2sts.java index 7540f1b..42bc000 100644 --- a/src/main/java/com/metanorma/mn2sts.java +++ b/src/main/java/org/metanorma/mn2sts.java @@ -1,201 +1,201 @@ -package com.metanorma; - -import static com.metanorma.Constants.*; -import com.metanorma.utils.LoggerHelper; -import java.io.PrintWriter; -import java.io.StringWriter; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; - -/** - * This application for the conversion of an XML file from Metanorma to NISO/ISO STS format - */ -public class mn2sts { - - static String VER = Util.getAppVersion(); - - static final Options optionsInfo = new Options() { - { - addOption(Option.builder("v") - .longOpt("version") - .desc("display application version") - .required(true) - .build()); - } - }; - - static final Options optionsCheckOnly = new Options() { - { - addOption(Option.builder("v") - .longOpt("version") - .desc("display application version") - .required(false) - .build()); - addOption(Option.builder("x") - .longOpt("xml-file-in") - .desc("path to source XML file") - .hasArg() - .argName("file") - .required(true) - .build()); - addOption(Option.builder("t") - .longOpt("check-type") - .desc("Check against XSD NISO (value xsd-niso), DTD ISO (dtd-iso), DTD NISO (dtd-niso) (Default: xsd-niso)") - .hasArg() - .argName("xsd-niso|dtd-iso|dtd-niso") - .required(false) - .build()); - } - }; - - static final Options options = new Options() { - { - addOption(Option.builder("x") - .longOpt("xml-file-in") - .desc("path to source XML file") - .hasArg() - .argName("file") - .required(true) - .build()); - addOption(Option.builder("s") - .longOpt("xsl-file") - .desc("path to XSL file (optional)") - .hasArg() - .argName("file") - .required(false) - .build()); - addOption(Option.builder("o") - .longOpt("xml-file-out") - .desc("path to output XML file") - .hasArg() - .argName("file") - .required(true) - .build()); - addOption(Option.builder("d") - .longOpt("debug") - .desc("print additional debug information into output XML file") - .required(false) - .build()); - addOption(Option.builder("v") - .longOpt("version") - .desc("display application version") - .required(false) - .build()); - addOption(Option.builder("t") - .longOpt("check-type") - .desc("Check against XSD NISO (value 'xsd-niso'), DTD ISO (value 'dtd-iso'), DTD NISO (value 'dtd-niso') (Default: xsd-niso)") - .hasArg() - .argName("xsd-niso|dtd-iso|dtd-niso") - .required(false) - .build()); - addOption(Option.builder("f") - .longOpt("output-format") - .desc("Output format: NISO STS (value 'niso') or ISO STS (value 'iso') (Default: niso)") - .hasArg() - .argName("niso|iso") - .required(false) - .build()); - } - }; - - static final String USAGE = getUsage(); - - - /** - * Main method. - * - * @param args command-line arguments - * @throws org.apache.commons.cli.ParseException - */ - public static void main(String[] args) throws ParseException { - - LoggerHelper.setupLogger(); - - CommandLineParser parser = new DefaultParser(); - - boolean cmdFail = false; - - try { - CommandLine cmdInfo = parser.parse(optionsInfo, args); - printVersion(cmdInfo.hasOption("version")); - } catch (ParseException exp) { - cmdFail = true; - } - - if(cmdFail) { - try { - CommandLine cmdCheckOnly = parser.parse(optionsCheckOnly, args); - System.out.print("mn2sts "); - printVersion(cmdCheckOnly.hasOption("version")); - System.out.println("\n"); - - STSValidator validator = new STSValidator(cmdCheckOnly.getOptionValue("xml-file-in"), cmdCheckOnly.getOptionValue("check-type")); - - if (!validator.check()) { - System.exit(ERROR_EXIT_CODE); - } - - cmdFail = false; - } catch (ParseException exp) { - cmdFail = true; - } - } - - if(cmdFail) { - try { - CommandLine cmd = parser.parse(options, args); - - System.out.print("mn2sts "); - printVersion(cmd.hasOption("version")); - System.out.println("\n"); - - XsltConverter converter = new XsltConverter(); - converter.setInputFilePath(cmd.getOptionValue("xml-file-in")); - converter.setInputXslPath(cmd.getOptionValue("xsl-file")); - converter.setOutputFilePath(cmd.getOptionValue("xml-file-out")); - converter.setDebugMode(cmd.hasOption("debug")); - converter.setCheckType(cmd.getOptionValue("check-type")); - converter.setOutputFormat(cmd.getOptionValue("output-format")); - - boolean result = converter.process(); - - if (!result) { - System.exit(ERROR_EXIT_CODE); - } - cmdFail = false; - - - } catch (ParseException exp) { - cmdFail = true; - } - } - - if (cmdFail) { - System.out.println(USAGE); - System.exit(ERROR_EXIT_CODE); - } - } - - private static String getUsage() { - StringWriter stringWriter = new StringWriter(); - PrintWriter pw = new PrintWriter(stringWriter); - HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp(pw, 80, CMD, "", options, 0, 0, ""); - pw.flush(); - return stringWriter.toString(); - } - - - private static void printVersion(boolean print) { - if (print) { - System.out.println(VER); - } - } - +package org.metanorma; + +import static org.metanorma.Constants.*; +import org.metanorma.utils.LoggerHelper; +import java.io.PrintWriter; +import java.io.StringWriter; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; + +/** + * This application for the conversion of an XML file from Metanorma to NISO/ISO STS format + */ +public class mn2sts { + + static String VER = Util.getAppVersion(); + + static final Options optionsInfo = new Options() { + { + addOption(Option.builder("v") + .longOpt("version") + .desc("display application version") + .required(true) + .build()); + } + }; + + static final Options optionsCheckOnly = new Options() { + { + addOption(Option.builder("v") + .longOpt("version") + .desc("display application version") + .required(false) + .build()); + addOption(Option.builder("x") + .longOpt("xml-file-in") + .desc("path to source XML file") + .hasArg() + .argName("file") + .required(true) + .build()); + addOption(Option.builder("t") + .longOpt("check-type") + .desc("Check against XSD NISO (value xsd-niso), DTD ISO (dtd-iso), DTD NISO (dtd-niso) (Default: xsd-niso)") + .hasArg() + .argName("xsd-niso|dtd-iso|dtd-niso") + .required(false) + .build()); + } + }; + + static final Options options = new Options() { + { + addOption(Option.builder("x") + .longOpt("xml-file-in") + .desc("path to source XML file") + .hasArg() + .argName("file") + .required(true) + .build()); + addOption(Option.builder("s") + .longOpt("xsl-file") + .desc("path to XSL file (optional)") + .hasArg() + .argName("file") + .required(false) + .build()); + addOption(Option.builder("o") + .longOpt("xml-file-out") + .desc("path to output XML file") + .hasArg() + .argName("file") + .required(true) + .build()); + addOption(Option.builder("d") + .longOpt("debug") + .desc("print additional debug information into output XML file") + .required(false) + .build()); + addOption(Option.builder("v") + .longOpt("version") + .desc("display application version") + .required(false) + .build()); + addOption(Option.builder("t") + .longOpt("check-type") + .desc("Check against XSD NISO (value 'xsd-niso'), DTD ISO (value 'dtd-iso'), DTD NISO (value 'dtd-niso') (Default: xsd-niso)") + .hasArg() + .argName("xsd-niso|dtd-iso|dtd-niso") + .required(false) + .build()); + addOption(Option.builder("f") + .longOpt("output-format") + .desc("Output format: NISO STS (value 'niso') or ISO STS (value 'iso') (Default: niso)") + .hasArg() + .argName("niso|iso") + .required(false) + .build()); + } + }; + + static final String USAGE = getUsage(); + + + /** + * Main method. + * + * @param args command-line arguments + * @throws org.apache.commons.cli.ParseException + */ + public static void main(String[] args) throws ParseException { + + LoggerHelper.setupLogger(); + + CommandLineParser parser = new DefaultParser(); + + boolean cmdFail = false; + + try { + CommandLine cmdInfo = parser.parse(optionsInfo, args); + printVersion(cmdInfo.hasOption("version")); + } catch (ParseException exp) { + cmdFail = true; + } + + if(cmdFail) { + try { + CommandLine cmdCheckOnly = parser.parse(optionsCheckOnly, args); + System.out.print("mn2sts "); + printVersion(cmdCheckOnly.hasOption("version")); + System.out.println("\n"); + + STSValidator validator = new STSValidator(cmdCheckOnly.getOptionValue("xml-file-in"), cmdCheckOnly.getOptionValue("check-type")); + + if (!validator.check()) { + System.exit(ERROR_EXIT_CODE); + } + + cmdFail = false; + } catch (ParseException exp) { + cmdFail = true; + } + } + + if(cmdFail) { + try { + CommandLine cmd = parser.parse(options, args); + + System.out.print("mn2sts "); + printVersion(cmd.hasOption("version")); + System.out.println("\n"); + + XsltConverter converter = new XsltConverter(); + converter.setInputFilePath(cmd.getOptionValue("xml-file-in")); + converter.setInputXslPath(cmd.getOptionValue("xsl-file")); + converter.setOutputFilePath(cmd.getOptionValue("xml-file-out")); + converter.setDebugMode(cmd.hasOption("debug")); + converter.setCheckType(cmd.getOptionValue("check-type")); + converter.setOutputFormat(cmd.getOptionValue("output-format")); + + boolean result = converter.process(); + + if (!result) { + System.exit(ERROR_EXIT_CODE); + } + cmdFail = false; + + + } catch (ParseException exp) { + cmdFail = true; + } + } + + if (cmdFail) { + System.out.println(USAGE); + System.exit(ERROR_EXIT_CODE); + } + } + + private static String getUsage() { + StringWriter stringWriter = new StringWriter(); + PrintWriter pw = new PrintWriter(stringWriter); + HelpFormatter formatter = new HelpFormatter(); + formatter.printHelp(pw, 80, CMD, "", options, 0, 0, ""); + pw.flush(); + return stringWriter.toString(); + } + + + private static void printVersion(boolean print) { + if (print) { + System.out.println(VER); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/metanorma/utils/LoggerHelper.java b/src/main/java/org/metanorma/utils/LoggerHelper.java similarity index 90% rename from src/main/java/com/metanorma/utils/LoggerHelper.java rename to src/main/java/org/metanorma/utils/LoggerHelper.java index 9b1c3dd..dd0642c 100644 --- a/src/main/java/com/metanorma/utils/LoggerHelper.java +++ b/src/main/java/org/metanorma/utils/LoggerHelper.java @@ -1,6 +1,6 @@ -package com.metanorma.utils; +package org.metanorma.utils; -import com.metanorma.mn2sts; +import org.metanorma.mn2sts; /** * diff --git a/src/main/java/com/metanorma/validator/CheckAgainstEnum.java b/src/main/java/org/metanorma/validator/CheckAgainstEnum.java similarity index 64% rename from src/main/java/com/metanorma/validator/CheckAgainstEnum.java rename to src/main/java/org/metanorma/validator/CheckAgainstEnum.java index 33febe2..18089b7 100644 --- a/src/main/java/com/metanorma/validator/CheckAgainstEnum.java +++ b/src/main/java/org/metanorma/validator/CheckAgainstEnum.java @@ -1,6 +1,6 @@ -package com.metanorma.validator; - - -public enum CheckAgainstEnum { - XSD_NISO, DTD_ISO, DTD_NISO -} +package org.metanorma.validator; + + +public enum CheckAgainstEnum { + XSD_NISO, DTD_ISO, DTD_NISO +} diff --git a/src/main/java/com/metanorma/validator/CheckAgainstMap.java b/src/main/java/org/metanorma/validator/CheckAgainstMap.java similarity index 92% rename from src/main/java/com/metanorma/validator/CheckAgainstMap.java rename to src/main/java/org/metanorma/validator/CheckAgainstMap.java index ae50624..edda248 100644 --- a/src/main/java/com/metanorma/validator/CheckAgainstMap.java +++ b/src/main/java/org/metanorma/validator/CheckAgainstMap.java @@ -1,21 +1,21 @@ -package com.metanorma.validator; - -import java.io.File; -import java.util.EnumMap; - - -public class CheckAgainstMap { - - static final EnumMap checkAgainstMap = new EnumMap(CheckAgainstEnum.class) { - { - put(CheckAgainstEnum.XSD_NISO, "NISO-STS-extended-1-MathML3-XSD" + File.separator + "NISO-STS-extended-1-mathml3.xsd"); - put(CheckAgainstEnum.DTD_ISO, "ISO-STS-DTD_v1.1" + File.separator + "ISOSTS.dtd"); - put(CheckAgainstEnum.DTD_NISO, "NISO-STS-extended-1-MathML3-DTD" + File.separator + "NISO-STS-extended-1-mathml3.dtd"); - } - }; - - public static EnumMap getMap() { - return checkAgainstMap; - } - -} +package org.metanorma.validator; + +import java.io.File; +import java.util.EnumMap; + + +public class CheckAgainstMap { + + static final EnumMap checkAgainstMap = new EnumMap(CheckAgainstEnum.class) { + { + put(CheckAgainstEnum.XSD_NISO, "NISO-STS-extended-1-MathML3-XSD" + File.separator + "NISO-STS-extended-1-mathml3.xsd"); + put(CheckAgainstEnum.DTD_ISO, "ISO-STS-DTD_v1.1" + File.separator + "ISOSTS.dtd"); + put(CheckAgainstEnum.DTD_NISO, "NISO-STS-extended-1-MathML3-DTD" + File.separator + "NISO-STS-extended-1-mathml3.dtd"); + } + }; + + public static EnumMap getMap() { + return checkAgainstMap; + } + +} diff --git a/src/main/java/com/metanorma/validator/DTDValidator.java b/src/main/java/org/metanorma/validator/DTDValidator.java similarity index 94% rename from src/main/java/com/metanorma/validator/DTDValidator.java rename to src/main/java/org/metanorma/validator/DTDValidator.java index 528ff83..d3e3718 100644 --- a/src/main/java/com/metanorma/validator/DTDValidator.java +++ b/src/main/java/org/metanorma/validator/DTDValidator.java @@ -1,106 +1,106 @@ -package com.metanorma.validator; - -import com.metanorma.ResourcesUtils; -import com.metanorma.Util; -import com.metanorma.utils.LoggerHelper; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.xml.sax.InputSource; - -public class DTDValidator extends Validator { - - private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); - boolean DEBUG = false; - - public DTDValidator (File xml) { - super(xml); - } - - @Override - public List validate(CheckAgainstEnum checkAgainst) { - this.checkAgainst = checkAgainst; - - String checkSrc = CheckAgainstMap.getMap().get(checkAgainst); - String checkSrcPath = "/" + new File(checkSrc).getParentFile(); - //System.out.println("Validate XML againts DTD " + checkSrc + "..."); - logger.log(Level.INFO, "Validate XML againts DTD {0}...", checkSrc); - - try { - DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = dbfactory.newDocumentBuilder(); - - // copy dtd folder and xml file into the temp folder - final Path tmpfilepath = Paths.get(Util.getJavaTempDir(), UUID.randomUUID().toString()); - - Files.createDirectories(tmpfilepath); - - ResourcesUtils.copyResources(getClass().getResource(checkSrcPath), checkSrcPath, tmpfilepath.toFile()); - // to debug jar - //jar:file:/C:/Metanorma/mn2sts/target/mn2sts-1.1.jar!/NISO-STS-extended-1-MathML3-DTD - //java.net.URL url = new java.net.URL("jar:file:/C:\\Metanorma\\mn2sts\\mn2sts-1.1.jar!/NISO-STS-extended-1-MathML3-DTD"); - //ResourcesUtils.copyResources(url , checkSrcPath, tmpfilepath.toFile()); - - //add - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - - Document document = builder.parse(xml); - DOMImplementation domImpl = document.getImplementation(); - DocumentType doctype = domImpl.createDocumentType("doctype", - "", - tmpfilepath + File.separator + checkSrc); - //transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId()); - transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId()); - DOMSource source = new DOMSource(document); - File xmlWithDTD = Paths.get(tmpfilepath.toString(), xml.getName()).toFile();//xmlout.getAbsolutePath() + ".tmp"; - StreamResult result = new StreamResult(xmlWithDTD); - - transformer.transform(source, result); - - InputStream inputStream = new FileInputStream(xmlWithDTD); - Reader reader = new InputStreamReader(inputStream,"UTF-8"); - dbfactory = DocumentBuilderFactory.newInstance(); - dbfactory.setValidating(true); - builder = dbfactory.newDocumentBuilder(); - builder.setErrorHandler(errorHandler); - builder.parse(new InputSource(reader)); - - // flush temporary folder - if (!DEBUG) { - Util.FlushTempFolder(tmpfilepath); - } - - } catch (Exception ex) { - exceptions.add("Validation error: " + ex.toString()); - } - return exceptions; - } - - public void setDebug (boolean debug) - { - this.DEBUG = debug; - } -} +package org.metanorma.validator; + +import org.metanorma.ResourcesUtils; +import org.metanorma.Util; +import org.metanorma.utils.LoggerHelper; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; +import org.xml.sax.InputSource; + +public class DTDValidator extends Validator { + + private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); + boolean DEBUG = false; + + public DTDValidator (File xml) { + super(xml); + } + + @Override + public List validate(CheckAgainstEnum checkAgainst) { + this.checkAgainst = checkAgainst; + + String checkSrc = CheckAgainstMap.getMap().get(checkAgainst); + String checkSrcPath = "/" + new File(checkSrc).getParentFile(); + //System.out.println("Validate XML againts DTD " + checkSrc + "..."); + logger.log(Level.INFO, "Validate XML againts DTD {0}...", checkSrc); + + try { + DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = dbfactory.newDocumentBuilder(); + + // copy dtd folder and xml file into the temp folder + final Path tmpfilepath = Paths.get(Util.getJavaTempDir(), UUID.randomUUID().toString()); + + Files.createDirectories(tmpfilepath); + + ResourcesUtils.copyResources(getClass().getResource(checkSrcPath), checkSrcPath, tmpfilepath.toFile()); + // to debug jar + //jar:file:/C:/Metanorma/mn2sts/target/mn2sts-1.1.jar!/NISO-STS-extended-1-MathML3-DTD + //java.net.URL url = new java.net.URL("jar:file:/C:\\Metanorma\\mn2sts\\mn2sts-1.1.jar!/NISO-STS-extended-1-MathML3-DTD"); + //ResourcesUtils.copyResources(url , checkSrcPath, tmpfilepath.toFile()); + + //add + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); + + Document document = builder.parse(xml); + DOMImplementation domImpl = document.getImplementation(); + DocumentType doctype = domImpl.createDocumentType("doctype", + "", + tmpfilepath + File.separator + checkSrc); + //transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId()); + transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId()); + DOMSource source = new DOMSource(document); + File xmlWithDTD = Paths.get(tmpfilepath.toString(), xml.getName()).toFile();//xmlout.getAbsolutePath() + ".tmp"; + StreamResult result = new StreamResult(xmlWithDTD); + + transformer.transform(source, result); + + InputStream inputStream = new FileInputStream(xmlWithDTD); + Reader reader = new InputStreamReader(inputStream,"UTF-8"); + dbfactory = DocumentBuilderFactory.newInstance(); + dbfactory.setValidating(true); + builder = dbfactory.newDocumentBuilder(); + builder.setErrorHandler(errorHandler); + builder.parse(new InputSource(reader)); + + // flush temporary folder + if (!DEBUG) { + Util.FlushTempFolder(tmpfilepath); + } + + } catch (Exception ex) { + exceptions.add("Validation error: " + ex.toString()); + } + return exceptions; + } + + public void setDebug (boolean debug) + { + this.DEBUG = debug; + } +} diff --git a/src/main/java/com/metanorma/validator/Validator.java b/src/main/java/org/metanorma/validator/Validator.java similarity index 93% rename from src/main/java/com/metanorma/validator/Validator.java rename to src/main/java/org/metanorma/validator/Validator.java index 40c56a4..9dd8d13 100644 --- a/src/main/java/com/metanorma/validator/Validator.java +++ b/src/main/java/org/metanorma/validator/Validator.java @@ -1,42 +1,42 @@ -package com.metanorma.validator; - -import java.io.File; -import java.util.LinkedList; -import java.util.List; -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -abstract class Validator { - - final List exceptions = new LinkedList<>(); - CheckAgainstEnum checkAgainst; - File xml; - - ErrorHandler errorHandler = new ErrorHandler() { - @Override - public void warning(SAXParseException exception) throws SAXException - { - exceptions.add(exception.toString()); - } - - @Override - public void fatalError(SAXParseException exception) throws SAXException - { - exceptions.add(exception.toString()); - } - - @Override - public void error(SAXParseException exception) throws SAXException - { - exceptions.add(exception.toString()); - } - }; - - public Validator (File xml) { - this.xml = xml; - } - - abstract public List validate(CheckAgainstEnum checkAgainst); - -} +package org.metanorma.validator; + +import java.io.File; +import java.util.LinkedList; +import java.util.List; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +abstract class Validator { + + final List exceptions = new LinkedList<>(); + CheckAgainstEnum checkAgainst; + File xml; + + ErrorHandler errorHandler = new ErrorHandler() { + @Override + public void warning(SAXParseException exception) throws SAXException + { + exceptions.add(exception.toString()); + } + + @Override + public void fatalError(SAXParseException exception) throws SAXException + { + exceptions.add(exception.toString()); + } + + @Override + public void error(SAXParseException exception) throws SAXException + { + exceptions.add(exception.toString()); + } + }; + + public Validator (File xml) { + this.xml = xml; + } + + abstract public List validate(CheckAgainstEnum checkAgainst); + +} diff --git a/src/main/java/com/metanorma/validator/XSDValidator.java b/src/main/java/org/metanorma/validator/XSDValidator.java similarity index 90% rename from src/main/java/com/metanorma/validator/XSDValidator.java rename to src/main/java/org/metanorma/validator/XSDValidator.java index 8fc71bb..d13a439 100644 --- a/src/main/java/com/metanorma/validator/XSDValidator.java +++ b/src/main/java/org/metanorma/validator/XSDValidator.java @@ -1,50 +1,50 @@ -package com.metanorma.validator; - -import com.metanorma.ResourceResolver; -import com.metanorma.Util; -import com.metanorma.utils.LoggerHelper; -import java.io.File; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.XMLConstants; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; - -public class XSDValidator extends Validator { - - private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); - - public XSDValidator(File xml) { - super(xml); - } - - public List validate(CheckAgainstEnum checkAgainst) { - this.checkAgainst = checkAgainst; - - String checkSrc = CheckAgainstMap.getMap().get(checkAgainst); - - //System.out.println("Validate XML againts XSD " + checkSrc + "..."); - logger.log(Level.INFO, "Validate XML againts XSD {0}...", checkSrc); - - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - // associate the schema factory with the resource resolver, which is responsible for resolving the imported XSD's - String rootResource = new File(checkSrc).getParentFile().toString() + "/"; - schemaFactory.setResourceResolver(new ResourceResolver(rootResource)); - //schemaFactory.setResourceResolver(new ResourceResolver("")); - - try { - Source schemaFile = new StreamSource(Util.getStreamFromResources(getClass().getClassLoader(), checkSrc.replaceAll("\\\\", "/"))); - Schema schema = schemaFactory.newSchema(schemaFile); - javax.xml.validation.Validator validator = schema.newValidator(); - validator.setErrorHandler(errorHandler); - validator.validate(new StreamSource(xml)); - } catch (Exception e) { - exceptions.add(e.toString()); - } - return exceptions; - } - -} +package org.metanorma.validator; + +import org.metanorma.ResourceResolver; +import org.metanorma.Util; +import org.metanorma.utils.LoggerHelper; +import java.io.File; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.XMLConstants; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; + +public class XSDValidator extends Validator { + + private static final Logger logger = Logger.getLogger(LoggerHelper.LOGGER_NAME); + + public XSDValidator(File xml) { + super(xml); + } + + public List validate(CheckAgainstEnum checkAgainst) { + this.checkAgainst = checkAgainst; + + String checkSrc = CheckAgainstMap.getMap().get(checkAgainst); + + //System.out.println("Validate XML againts XSD " + checkSrc + "..."); + logger.log(Level.INFO, "Validate XML againts XSD {0}...", checkSrc); + + SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + // associate the schema factory with the resource resolver, which is responsible for resolving the imported XSD's + String rootResource = new File(checkSrc).getParentFile().toString() + "/"; + schemaFactory.setResourceResolver(new ResourceResolver(rootResource)); + //schemaFactory.setResourceResolver(new ResourceResolver("")); + + try { + Source schemaFile = new StreamSource(Util.getStreamFromResources(getClass().getClassLoader(), checkSrc.replaceAll("\\\\", "/"))); + Schema schema = schemaFactory.newSchema(schemaFile); + javax.xml.validation.Validator validator = schema.newValidator(); + validator.setErrorHandler(errorHandler); + validator.validate(new StreamSource(xml)); + } catch (Exception e) { + exceptions.add(e.toString()); + } + return exceptions; + } + +} diff --git a/src/main/resources/mn2sts.xsl b/src/main/resources/mn2sts.xsl index 8a435ad..99bd448 100644 --- a/src/main/resources/mn2sts.xsl +++ b/src/main/resources/mn2sts.xsl @@ -5,7 +5,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xalan="http://xml.apache.org/xalan" xmlns:java="http://xml.apache.org/xalan/java" - xmlns:metanorma-class="xalan://com.metanorma.RegExHelper" + xmlns:metanorma-class="xalan://org.metanorma.RegExHelper" exclude-result-prefixes="xalan java metanorma-class" version="1.0"> @@ -2679,7 +2679,7 @@ dated - dated + dated undated diff --git a/src/test/java/com/metanorma/mn2stsTests.java b/src/test/java/org/metanorma/mn2stsTests.java similarity index 97% rename from src/test/java/com/metanorma/mn2stsTests.java rename to src/test/java/org/metanorma/mn2stsTests.java index 7e79939..4a1891c 100644 --- a/src/test/java/com/metanorma/mn2stsTests.java +++ b/src/test/java/org/metanorma/mn2stsTests.java @@ -1,7 +1,9 @@ -package com.metanorma; +package org.metanorma; -import static com.metanorma.Constants.*; -import com.metanorma.utils.LoggerHelper; +import org.metanorma.mn2sts; +import org.metanorma.RegExHelper; +import static org.metanorma.Constants.*; +import org.metanorma.utils.LoggerHelper; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream;