diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java index c56fd5a8..7f4cc2ff 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java @@ -148,10 +148,6 @@ public class ZUGFeRDVisualizer { throws FileNotFoundException, TransformerException, IOException, SAXException, ParserConfigurationException { try { - if (mXsltXRTemplate == null) { - mXsltXRTemplate = mFactory.newTemplates( - new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); - } if (mXsltPDFTemplate == null) { mXsltPDFTemplate = mFactory.newTemplates( new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xr-pdf.xsl"))); @@ -247,6 +243,8 @@ public class ZUGFeRDVisualizer { FileInputStream fis = new FileInputStream(xmlFilename); EStandard theStandard= findOutStandardFromRootNode(fis); + fis = new FileInputStream(xmlFilename);//rewind :-( + try { if (mXsltPDFTemplate == null) { mXsltPDFTemplate = mFactory.newTemplates( @@ -367,6 +365,11 @@ public class ZUGFeRDVisualizer { protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream) throws TransformerException { + if (mXsltXRTemplate==null) { + mXsltXRTemplate = mFactory.newTemplates( + new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); + + } Transformer transformer = mXsltXRTemplate.newTransformer(); transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream)); diff --git a/library/src/main/java/org/mustangproject/util/ByteArraySearcher.java b/library/src/main/java/org/mustangproject/util/ByteArraySearcher.java new file mode 100644 index 00000000..9fb83a64 --- /dev/null +++ b/library/src/main/java/org/mustangproject/util/ByteArraySearcher.java @@ -0,0 +1,56 @@ +package org.mustangproject.util; + +public final class ByteArraySearcher { + + private ByteArraySearcher() { + } + + public static int indexOf(byte[] haystack, byte[] needle) { + if (needle.length > haystack.length) { + return -1; + } + + // Any needle to search? + if (needle.length == 0) { + return -1; + } + + for (int i = 0; i <= haystack.length - needle.length; i++) { + boolean found = true; + for (int j = 0; j < needle.length; j++) { + if (haystack[i + j] != needle[j]) { + found = false; + break; + } + } + if (found) { + return i; + } + } + + return -1; + } + + public static boolean contains(byte[] haystack, byte[] needle) { + return indexOf(haystack, needle) >= 0; + } + + public static boolean startsWith(byte[] haystack, byte[] needle) { + if (needle.length > haystack.length) { + return false; + } + + // Any needle to search? + if (needle.length == 0) { + return false; + } + + for (int j = 0; j < needle.length; j++) { + if (haystack[j] != needle[j]) { + return false; + } + } + + return true; + } +} diff --git a/validator/src/test/java/org/mustangproject/validator/ByteArraySearcherTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java similarity index 96% rename from validator/src/test/java/org/mustangproject/validator/ByteArraySearcherTest.java rename to library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java index 9d660c67..df752f5a 100644 --- a/validator/src/test/java/org/mustangproject/validator/ByteArraySearcherTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ByteArraySearcherTest.java @@ -1,4 +1,4 @@ -package org.mustangproject.validator; +package org.mustangproject.ZUGFeRD; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -7,6 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.nio.charset.StandardCharsets; import org.junit.Test; +import org.mustangproject.util.ByteArraySearcher; public class ByteArraySearcherTest { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java index a2ce9774..ee2c5043 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java @@ -19,8 +19,10 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; +import org.apache.commons.io.IOUtils; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; +import org.mustangproject.util.ByteArraySearcher; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; @@ -28,11 +30,13 @@ import javax.xml.transform.*; import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Paths; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class VisualizationTest extends ResourceCase { - final String TARGET_PDF = "./target/testout-Visualization.pdf"; + final String TARGET_PDF_CII = "./target/testout-Visualization-cii.pdf"; + final String TARGET_PDF_UBL = "./target/testout-Visualization-cii.pdf"; public void testCIIVisualizationBasic() { @@ -147,7 +151,31 @@ public class VisualizationTest extends ResourceCase { assertEquals(expected, result); } - public void testPDFVisualization() { + public void testPDFVisualizationCII() { + + File CIIinputFile = getResourceAsFile("cii/01.01a-INVOICE.cii.xml"); + + // the writing part + + String expected = null; + String result = null; + try { + ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); + zvi.toPDF(CIIinputFile.getAbsolutePath(), TARGET_PDF_CII); + } catch (UnsupportedOperationException e) { + fail("UnsupportedOperationException should not happen: "+e.getMessage()); + } catch (IllegalArgumentException e) { + fail("IllegalArgumentException should not happen: "+e.getMessage()); + } + + try { + assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); + } catch (IOException e) { + fail("IOException should not occur"); + } + } + + public void testPDFVisualizationUBL() { File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml"); @@ -158,16 +186,19 @@ public class VisualizationTest extends ResourceCase { String result = null; try { ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); - zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF); + zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL); } catch (UnsupportedOperationException e) { fail("UnsupportedOperationException should not happen: "+e.getMessage()); } catch (IllegalArgumentException e) { fail("IllegalArgumentException should not happen: "+e.getMessage()); } -// assertNotNull(result); - // Reading ZUGFeRD -// assertEquals(expected, result); + + try { + assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'})); + } catch (IOException e) { + fail("IOException should not occur"); + } } } diff --git a/validator/src/main/java/org/mustangproject/validator/ByteArraySearcher.java b/validator/src/main/java/org/mustangproject/validator/ByteArraySearcher.java deleted file mode 100644 index 2cfc1514..00000000 --- a/validator/src/main/java/org/mustangproject/validator/ByteArraySearcher.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.mustangproject.validator; - -public final class ByteArraySearcher { - - private ByteArraySearcher() { - } - - public static int indexOf(byte[] haystack, byte[] needle) { - if (needle.length > haystack.length) { - return -1; - } - - // Any needle to search? - if (needle.length == 0) { - return -1; - } - - for (int i = 0; i <= haystack.length - needle.length; i++) { - boolean found = true; - for (int j = 0; j < needle.length; j++) { - if (haystack[i + j] != needle[j]) { - found = false; - break; - } - } - if (found) { - return i; - } - } - - return -1; - } - - public static boolean contains(byte[] haystack, byte[] needle) { - return indexOf (haystack, needle) >= 0; - } - - public static boolean startsWith(byte[] haystack, byte[] needle) { - if (needle.length > haystack.length) { - return false; - } - - // Any needle to search? - if (needle.length == 0) { - return false; - } - - for (int j = 0; j < needle.length; j++) { - if (haystack[j] != needle[j]) { - return false; - } - } - - return true; - } -} diff --git a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java index e0d3ac00..da719f9b 100644 --- a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java @@ -21,6 +21,7 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; +import org.mustangproject.util.ByteArraySearcher; import org.mustangproject.ZUGFeRD.ZUGFeRDImporter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/validator/src/main/java/org/mustangproject/validator/ZUGFeRDValidator.java b/validator/src/main/java/org/mustangproject/validator/ZUGFeRDValidator.java index 119a47b0..edd9a73d 100644 --- a/validator/src/main/java/org/mustangproject/validator/ZUGFeRDValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/ZUGFeRDValidator.java @@ -25,6 +25,7 @@ import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; +import org.mustangproject.util.ByteArraySearcher; import org.mustangproject.XMLTools; import org.slf4j.Logger; import org.slf4j.LoggerFactory;