closes #481, moved bytearraysearcher to library
This commit is contained in:
@@ -148,10 +148,6 @@ public class ZUGFeRDVisualizer {
|
|||||||
throws FileNotFoundException, TransformerException, IOException, SAXException, ParserConfigurationException {
|
throws FileNotFoundException, TransformerException, IOException, SAXException, ParserConfigurationException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (mXsltXRTemplate == null) {
|
|
||||||
mXsltXRTemplate = mFactory.newTemplates(
|
|
||||||
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl")));
|
|
||||||
}
|
|
||||||
if (mXsltPDFTemplate == null) {
|
if (mXsltPDFTemplate == null) {
|
||||||
mXsltPDFTemplate = mFactory.newTemplates(
|
mXsltPDFTemplate = mFactory.newTemplates(
|
||||||
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xr-pdf.xsl")));
|
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xr-pdf.xsl")));
|
||||||
@@ -247,6 +243,8 @@ public class ZUGFeRDVisualizer {
|
|||||||
|
|
||||||
FileInputStream fis = new FileInputStream(xmlFilename);
|
FileInputStream fis = new FileInputStream(xmlFilename);
|
||||||
EStandard theStandard= findOutStandardFromRootNode(fis);
|
EStandard theStandard= findOutStandardFromRootNode(fis);
|
||||||
|
fis = new FileInputStream(xmlFilename);//rewind :-(
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (mXsltPDFTemplate == null) {
|
if (mXsltPDFTemplate == null) {
|
||||||
mXsltPDFTemplate = mFactory.newTemplates(
|
mXsltPDFTemplate = mFactory.newTemplates(
|
||||||
@@ -367,6 +365,11 @@ public class ZUGFeRDVisualizer {
|
|||||||
|
|
||||||
protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream)
|
protected void applyZF2XSLT(final InputStream xmlFile, final OutputStream HTMLOutstream)
|
||||||
throws TransformerException {
|
throws TransformerException {
|
||||||
|
if (mXsltXRTemplate==null) {
|
||||||
|
mXsltXRTemplate = mFactory.newTemplates(
|
||||||
|
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl")));
|
||||||
|
|
||||||
|
}
|
||||||
Transformer transformer = mXsltXRTemplate.newTransformer();
|
Transformer transformer = mXsltXRTemplate.newTransformer();
|
||||||
|
|
||||||
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream));
|
transformer.transform(new StreamSource(xmlFile), new StreamResult(HTMLOutstream));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.mustangproject.validator;
|
package org.mustangproject.ZUGFeRD;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -7,6 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mustangproject.util.ByteArraySearcher;
|
||||||
|
|
||||||
public class ByteArraySearcherTest
|
public class ByteArraySearcherTest
|
||||||
{
|
{
|
||||||
@@ -19,8 +19,10 @@
|
|||||||
*********************************************************************** */
|
*********************************************************************** */
|
||||||
package org.mustangproject.ZUGFeRD;
|
package org.mustangproject.ZUGFeRD;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.junit.FixMethodOrder;
|
import org.junit.FixMethodOrder;
|
||||||
import org.junit.runners.MethodSorters;
|
import org.junit.runners.MethodSorters;
|
||||||
|
import org.mustangproject.util.ByteArraySearcher;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
@@ -28,11 +30,13 @@ import javax.xml.transform.*;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
public class VisualizationTest extends ResourceCase {
|
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() {
|
public void testCIIVisualizationBasic() {
|
||||||
|
|
||||||
@@ -147,7 +151,31 @@ public class VisualizationTest extends ResourceCase {
|
|||||||
assertEquals(expected, result);
|
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");
|
File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml");
|
||||||
|
|
||||||
@@ -158,16 +186,19 @@ public class VisualizationTest extends ResourceCase {
|
|||||||
String result = null;
|
String result = null;
|
||||||
try {
|
try {
|
||||||
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer();
|
||||||
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF);
|
zvi.toPDF(UBLinputFile.getAbsolutePath(), TARGET_PDF_UBL);
|
||||||
} catch (UnsupportedOperationException e) {
|
} catch (UnsupportedOperationException e) {
|
||||||
fail("UnsupportedOperationException should not happen: "+e.getMessage());
|
fail("UnsupportedOperationException should not happen: "+e.getMessage());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
fail("IllegalArgumentException should not happen: "+e.getMessage());
|
fail("IllegalArgumentException should not happen: "+e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// assertNotNull(result);
|
|
||||||
// Reading ZUGFeRD
|
try {
|
||||||
// assertEquals(expected, result);
|
assertTrue(ByteArraySearcher.startsWith(Files.readAllBytes(Paths.get(TARGET_PDF_CII)), new byte[]{'%', 'P', 'D', 'F'}));
|
||||||
|
} catch (IOException e) {
|
||||||
|
fail("IOException should not occur");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -21,6 +21,7 @@ import javax.xml.xpath.XPathExpression;
|
|||||||
import javax.xml.xpath.XPathExpressionException;
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
import javax.xml.xpath.XPathFactory;
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
|
||||||
|
import org.mustangproject.util.ByteArraySearcher;
|
||||||
import org.mustangproject.ZUGFeRD.ZUGFeRDImporter;
|
import org.mustangproject.ZUGFeRD.ZUGFeRDImporter;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.dom4j.DocumentException;
|
|||||||
import org.dom4j.DocumentHelper;
|
import org.dom4j.DocumentHelper;
|
||||||
import org.dom4j.io.OutputFormat;
|
import org.dom4j.io.OutputFormat;
|
||||||
import org.dom4j.io.XMLWriter;
|
import org.dom4j.io.XMLWriter;
|
||||||
|
import org.mustangproject.util.ByteArraySearcher;
|
||||||
import org.mustangproject.XMLTools;
|
import org.mustangproject.XMLTools;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|||||||
Reference in New Issue
Block a user