From 12a3abde66290706376d1305bff35a5a3e7fa7d7 Mon Sep 17 00:00:00 2001 From: Philip Helger Date: Tue, 9 Jul 2024 18:37:53 +0200 Subject: [PATCH] Cleansing --- .../org/mustangproject/commandline/Main.java | 6 +- .../commandline/ValidatorFileWalker.java | 33 ++--- library/pom.xml | 5 + .../java/org/mustangproject/Allowance.java | 5 +- .../java/org/mustangproject/CII/CIIToUBL.java | 28 +--- .../main/java/org/mustangproject/Charge.java | 2 - .../main/java/org/mustangproject/Invoice.java | 2 +- .../main/java/org/mustangproject/Item.java | 12 +- .../org/mustangproject/LegalOrganisation.java | 7 - .../java/org/mustangproject/TradeParty.java | 24 ++-- .../java/org/mustangproject/XMLTools.java | 25 +--- .../ZUGFeRD/DAPullProvider.java | 2 +- .../ZUGFeRD/DXExporterFromA1.java | 47 ++++--- .../ZUGFeRD/DXExporterFromA3.java | 130 ++++++++++++------ .../ZUGFeRD/IZUGFeRDExportableItem.java | 2 +- .../ZUGFeRD/OXExporterFromA1.java | 47 ++++--- .../ZUGFeRD/OXExporterFromA3.java | 130 ++++++++++++------ .../ZUGFeRD/OXPullProvider.java | 4 +- .../ZUGFeRD/PDFBoxUpdateMitigation.java | 6 - .../ZUGFeRD/ZUGFeRD1PullProvider.java | 2 +- .../ZUGFeRD/ZUGFeRDExporterFromA1.java | 41 ++++-- .../ZUGFeRD/ZUGFeRDExporterFromA3.java | 27 ++-- .../ZUGFeRD/ZUGFeRDExporterFromPDFA.java | 4 +- .../ZUGFeRD/ZUGFeRDVisualizer.java | 6 +- .../ZUGFeRD/BackwardCompatibilityTest.java | 2 +- .../org/mustangproject/ZUGFeRD/BaseTest.java | 9 -- .../org/mustangproject/ZUGFeRD/DXTest.java | 2 +- .../ZUGFeRD/DeSerializationTest.java | 3 - .../org/mustangproject/ZUGFeRD/FXTest.java | 2 + .../ZUGFeRD/MustangReaderWriterEdgeTest.java | 2 +- .../org/mustangproject/ZUGFeRD/OXTest.java | 3 +- .../ZUGFeRD/ProfilesMinimumBasicWLTest.java | 3 - .../org/mustangproject/ZUGFeRD/UXTest.java | 15 -- .../ZUGFeRD/VisualizationTest.java | 4 - .../org/mustangproject/ZUGFeRD/XRTest.java | 3 - .../mustangproject/ZUGFeRD/ZF2EdgeTest.java | 4 +- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 24 ++-- .../org/mustangproject/ZUGFeRD/ZF2Test.java | 16 +-- .../ZUGFeRD/ZF2ZInvoiceImporterTest.java | 9 -- validator/pom.xml | 5 - .../validator/PDFValidator.java | 17 +-- .../validator/XMLValidator.java | 42 +++--- .../mustangproject/validator/LibraryTest.java | 5 - .../validator/PDFValidatorTest.java | 21 +-- .../validator/XMLValidatorTest.java | 2 - .../validator/ZUGFeRDValidatorTest.java | 6 - 46 files changed, 394 insertions(+), 402 deletions(-) diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java index 140fde7f..54465d81 100755 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/Main.java @@ -332,7 +332,7 @@ public class Main { public static void main(String[] args) { try { CommandLine cmd; - CommandLineParser parser = new BasicParser(); + CommandLineParser parser = new DefaultParser(); // create Options object Options options = new Options(); @@ -427,7 +427,7 @@ public class Main { performUBL(sourceName, outName); optionsRecognized = true; } else if ((action != null) && (action.equals("validate"))) { - optionsRecognized = performValidate(sourceName, noNotices != null && noNotices, cmd.getOptionValue("logAppend")); + optionsRecognized = performValidate(sourceName, noNotices, cmd.getOptionValue("logAppend")); } else if ((action != null) && (action.equals("validateExpectValid"))) { optionsRecognized = performValidateExpect(true, directoryName); } else if ((action != null) && (action.equals("validateExpectInvalid"))) { @@ -585,7 +585,7 @@ public class Main { if (attachmentFilenames == null) { byte attachmentContents[] = null; - String attachmentFilename, attachmentMime, attachmentDescription; + String attachmentFilename, attachmentMime; if (!noAttachments) { attachmentFilename = getFilenameFromUser("Additional file attachments filename (empty for none)", "", "pdf", true, false); if (attachmentFilename.length() != 0) { diff --git a/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java b/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java index eb227e77..5b5d8340 100644 --- a/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java +++ b/Mustang-CLI/src/main/java/org/mustangproject/commandline/ValidatorFileWalker.java @@ -14,9 +14,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.xmlunit.builder.Input; -import org.xmlunit.xpath.JAXPXPathEngine; -import org.xmlunit.xpath.XPathEngine; import org.mustangproject.validator.ZUGFeRDValidator; import static org.xmlunit.assertj.XmlAssert.assertThat; @@ -50,25 +47,23 @@ public class ValidatorFileWalker Date date = new Date(); String expectedString="valid"; if (!expectValid) { - expectedString="invalid"; - } + expectedString="invalid"; + } if ((attr!=null)&&(attr.isRegularFile())) { if (matcher.matches(file.getFileName())) { - boolean thisResultValid=true; String thisResultString=" valid"; - try { - assertThat(zul.validate(file.toAbsolutePath().toString())).valueByXPath("/validation/summary/@status") - .asString() - .isEqualTo(expectedString); - - } catch (AssertionError ae) { - thisResultValid=false; - thisResultString="invalid"; - allValid=false; - } - LOGGER.info(String.format("\n@%s Testing file %d: %s (%s)", dateFormat.format(date), fileCount++, thisResultString, file)); - - } + try { + assertThat(zul.validate(file.toAbsolutePath().toString())).valueByXPath("/validation/summary/@status") + .asString() + .isEqualTo(expectedString); + + } catch (AssertionError ae) { + thisResultString="invalid"; + allValid=false; + } + LOGGER.info(String.format("\n@%s Testing file %d: %s (%s)", dateFormat.format(date), fileCount++, thisResultString, file)); + + } } return FileVisitResult.CONTINUE; } diff --git a/library/pom.xml b/library/pom.xml index 88138730..17e08b32 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -55,6 +55,11 @@ + + org.slf4j + slf4j-api + 2.0.9 + net.sf.saxon diff --git a/library/src/main/java/org/mustangproject/Allowance.java b/library/src/main/java/org/mustangproject/Allowance.java index 514dc625..df117e2b 100644 --- a/library/src/main/java/org/mustangproject/Allowance.java +++ b/library/src/main/java/org/mustangproject/Allowance.java @@ -1,14 +1,11 @@ package org.mustangproject; -import org.mustangproject.ZUGFeRD.IExportableTransaction; -import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; - import java.math.BigDecimal; /*** * (absolute) allowances on item and document level */ -public class Allowance extends Charge implements IZUGFeRDAllowanceCharge { +public class Allowance extends Charge { /*** * bean constructor diff --git a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java index ff695f52..816f6992 100644 --- a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java +++ b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java @@ -5,8 +5,6 @@ import java.io.Serializable; import com.helger.commons.error.list.ErrorList; import com.helger.en16931.cii2ubl.CIIToUBL23Converter; -import com.helger.ubl21.UBL21Marshaller; -import com.helger.ubl22.UBL22Marshaller; import com.helger.ubl23.UBL23Marshaller; /*** @@ -23,31 +21,7 @@ public class CIIToUBL { final ErrorList occurred=new ErrorList(); final CIIToUBL23Converter cc=new CIIToUBL23Converter(); final Serializable aUBL = cc.convertCIItoUBL(input, occurred); - if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) - { - UBL21Marshaller.invoice () - .setFormattedOutput (true) - .write ((oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) aUBL, output); - } - else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) - { - UBL21Marshaller.creditNote () - .setFormattedOutput (true) - .write ((oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) aUBL, output); - } - else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) - { - UBL22Marshaller.invoice () - .setFormattedOutput (true) - .write ((oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) aUBL, output); - } - else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) - { - UBL22Marshaller.creditNote () - .setFormattedOutput (true) - .write ((oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) aUBL, output); - } - else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) + if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) { UBL23Marshaller.invoice () .setFormattedOutput (true) diff --git a/library/src/main/java/org/mustangproject/Charge.java b/library/src/main/java/org/mustangproject/Charge.java index 86daec8a..93335a13 100644 --- a/library/src/main/java/org/mustangproject/Charge.java +++ b/library/src/main/java/org/mustangproject/Charge.java @@ -1,9 +1,7 @@ package org.mustangproject; import org.mustangproject.ZUGFeRD.IAbsoluteValueProvider; -import org.mustangproject.ZUGFeRD.IExportableTransaction; import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; -import org.mustangproject.ZUGFeRD.IZUGFeRDExportableItem; import java.math.BigDecimal; diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index fb1d2943..fd85bb87 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -547,7 +547,7 @@ public class Invoice implements IExportableTransaction { return null; } - return ((TradeParty) getSender()).getAsTradeSettlement(); + return getSender().getAsTradeSettlement(); } diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 9abe5036..8d9b0d0e 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -1,7 +1,6 @@ package org.mustangproject; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import org.apache.fop.util.XMLUtil; import org.mustangproject.ZUGFeRD.IReferencedDocument; import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge; import org.mustangproject.ZUGFeRD.IZUGFeRDExportableItem; @@ -12,7 +11,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Date; -import java.util.List; /*** * describes any invoice line @@ -28,8 +26,8 @@ public class Item implements IZUGFeRDExportableItem { protected Product product; protected ArrayList notes = null; protected ArrayList referencedDocuments = null; - protected ArrayList Allowances = new ArrayList(), - Charges = new ArrayList(); + protected ArrayList Allowances = new ArrayList<>(), + Charges = new ArrayList<>(); /*** * default constructor @@ -138,7 +136,7 @@ public class Item implements IZUGFeRDExportableItem { ReferencedDocument rd = new ReferencedDocument(IssuerAssignedID, TypeCode, ReferenceTypeCode); if (rdocs == null) { - rdocs = new ArrayList(); + rdocs = new ArrayList<>(); } rdocs.add(rd); @@ -428,7 +426,7 @@ public class Item implements IZUGFeRDExportableItem { */ public Item addNote(String text) { if (notes == null) { - notes = new ArrayList(); + notes = new ArrayList<>(); } notes.add(text); return this; @@ -441,7 +439,7 @@ public class Item implements IZUGFeRDExportableItem { */ public Item addReferencedDocument(ReferencedDocument doc) { if (referencedDocuments == null) { - referencedDocuments = new ArrayList(); + referencedDocuments = new ArrayList<>(); } referencedDocuments.add(doc); return this; diff --git a/library/src/main/java/org/mustangproject/LegalOrganisation.java b/library/src/main/java/org/mustangproject/LegalOrganisation.java index b6ddd80f..9ed0aa62 100644 --- a/library/src/main/java/org/mustangproject/LegalOrganisation.java +++ b/library/src/main/java/org/mustangproject/LegalOrganisation.java @@ -2,13 +2,6 @@ package org.mustangproject; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.mustangproject.ZUGFeRD.*; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; /*** * A organisation, i.e. usually a company diff --git a/library/src/main/java/org/mustangproject/TradeParty.java b/library/src/main/java/org/mustangproject/TradeParty.java index 2a92cd23..91af21b3 100644 --- a/library/src/main/java/org/mustangproject/TradeParty.java +++ b/library/src/main/java/org/mustangproject/TradeParty.java @@ -66,15 +66,15 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { //nodes.item(i).getTextContent())) { Node currentItemNode = nodes.item(nodeIndex); - if (nodes.item(nodeIndex).getLocalName() != null) { - String debcurrentChild = nodes.item(nodeIndex).getLocalName(); - if (nodes.item(nodeIndex).getLocalName().equals("Party")) { + if (currentItemNode.getLocalName() != null) { + String debcurrentChild = currentItemNode.getLocalName(); + if (debcurrentChild.equals("Party")) { - NodeList party = nodes.item(nodeIndex).getChildNodes(); + NodeList party = currentItemNode.getChildNodes(); for (int partyIndex = 0; partyIndex < party.getLength(); partyIndex++) { if (party.item(partyIndex).getLocalName() != null) { String debCN = party.item(partyIndex).getLocalName(); - if (party.item(partyIndex).getLocalName().equals("PartyName")) { + if (debCN.equals("PartyName")) { NodeList partyName = party.item(partyIndex).getChildNodes(); for (int partyNameIndex = 0; partyNameIndex < partyName.getLength(); partyNameIndex++) { @@ -87,7 +87,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } } } - if (party.item(partyIndex).getLocalName().equals("PostalAddress")) { + if (debCN.equals("PostalAddress")) { NodeList postal = party.item(partyIndex).getChildNodes(); for (int postalChildIndex = 0; postalChildIndex < postal.getLength(); postalChildIndex++) { @@ -145,7 +145,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } } - if (party.item(partyIndex).getLocalName().equals("Contact")) { + if (debCN.equals("Contact")) { NodeList contact = party.item(partyIndex).getChildNodes(); setContact(new Contact(contact)); @@ -156,19 +156,19 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } - if (nodes.item(nodeIndex).getLocalName().equals("GlobalID")) { + if (debcurrentChild.equals("GlobalID")) { if (nodes.item(nodeIndex).getAttributes().getNamedItem("schemeID") != null) { SchemedID gid = new SchemedID().setScheme(nodes.item(nodeIndex).getAttributes().getNamedItem("schemeID").getNodeValue()).setId(nodes.item(nodeIndex).getTextContent()); addGlobalID(gid); } } - if (nodes.item(nodeIndex).getLocalName().equals("DefinedTradeContact")) { + if (debcurrentChild.equals("DefinedTradeContact")) { NodeList contact = nodes.item(nodeIndex).getChildNodes(); setContact(new Contact(contact)); } - if (nodes.item(nodeIndex).getLocalName().equals("PostalTradeAddress")) { + if (debcurrentChild.equals("PostalTradeAddress")) { NodeList postal = nodes.item(nodeIndex).getChildNodes(); for (int postalChildIndex = 0; postalChildIndex < postal.getLength(); postalChildIndex++) { if (postal.item(postalChildIndex).getLocalName() != null) { @@ -196,7 +196,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } - if (nodes.item(nodeIndex).getLocalName().equals("SpecifiedTaxRegistration")) { + if (debcurrentChild.equals("SpecifiedTaxRegistration")) { NodeList taxChilds = nodes.item(nodeIndex).getChildNodes(); for (int taxChildIndex = 0; taxChildIndex < taxChilds.getLength(); taxChildIndex++) { if (taxChilds.item(taxChildIndex).getLocalName() != null) { @@ -290,7 +290,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { for (int nodeIndex = 0; nodeIndex < nodes.getLength(); nodeIndex++) { //nodes.item(i).getTextContent())) { String debLN = nodes.item(nodeIndex).getLocalName(); - if (nodes.item(nodeIndex).getLocalName().equals("Party")) { + if (debLN.equals("Party")) { // take one step back and parse from top parseFromUBL(nodes); return; diff --git a/library/src/main/java/org/mustangproject/XMLTools.java b/library/src/main/java/org/mustangproject/XMLTools.java index 2eda39bb..af44d904 100644 --- a/library/src/main/java/org/mustangproject/XMLTools.java +++ b/library/src/main/java/org/mustangproject/XMLTools.java @@ -1,7 +1,5 @@ package org.mustangproject; -import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; @@ -11,6 +9,7 @@ import java.util.Collections; import java.util.List; import java.util.RandomAccess; +import org.apache.commons.io.IOUtils; import org.dom4j.io.XMLWriter; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -40,11 +39,13 @@ public class XMLTools extends XMLWriter { list = l; } - public Node get(int index) { + @Override + public Node get(int index) { return list.item(index); } - public int size() { + @Override + public int size() { return list.getLength(); } } @@ -127,6 +128,7 @@ public class XMLTools extends XMLWriter { */ public static byte[] removeBOM(byte[] zugferdRaw) { final byte[] zugferdData; + // This handles the UTF-8 BOM if ((zugferdRaw[0] == (byte) 0xEF) && (zugferdRaw[1] == (byte) 0xBB) && (zugferdRaw[2] == (byte) 0xBF)) { // I don't like BOMs, lets remove it zugferdData = new byte[zugferdRaw.length - 3]; @@ -138,20 +140,7 @@ public class XMLTools extends XMLWriter { } public static byte[] getBytesFromStream(InputStream fileinput) throws IOException { - - // we're on java 8 so we cant use inputstream.readallbytes - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - - int nRead; - byte[] data = new byte[16384]; - BufferedInputStream bufferedInput=new BufferedInputStream(fileinput); - - while ((nRead = bufferedInput.read(data, 0, data.length)) != -1) { - buffer.write(data, 0, nRead); - } - return buffer.toByteArray(); - - // end of polyfill + return IOUtils.toByteArray (fileinput); } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java index 7ae56ebd..c6c7784b 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DAPullProvider.java @@ -33,7 +33,7 @@ import org.mustangproject.FileAttachment; import org.mustangproject.Invoice; import org.mustangproject.XMLTools; -public class DAPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { +public class DAPullProvider extends ZUGFeRD2PullProvider { protected IExportableTransaction trans; private String paymentTermsDescription; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java index 2f9669a8..f22d76c7 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA1.java @@ -29,10 +29,11 @@ import org.apache.pdfbox.preflight.parser.PreflightParser; import jakarta.activation.DataSource; -public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExporter { +public class DXExporterFromA1 extends DXExporterFromA3 { protected boolean ignorePDFAErrors = false; - public DXExporterFromA1 ignorePDFAErrors() { + @Override + public DXExporterFromA1 ignorePDFAErrors() { this.ignorePDFAErrors = true; return this; } @@ -45,7 +46,8 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport * @param ver the delivery-x version * @return the URN of the namespace */ - public String getNamespaceForVersion(int ver) { + @Override + public String getNamespaceForVersion(int ver) { // As of late 2022 the Delivery-X standard is not yet published. See specification: // Die digitale Ablösung des Papier-Lieferscheins, Version 1.1, April 2022 // Chapter 7.1 XMP-Erweiterungsschema für PDF/A-3 @@ -57,7 +59,8 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport * @param ver the ox version * @return the namespace prefix as string, without colon */ - public String getPrefixForVersion(int ver) { + @Override + public String getPrefixForVersion(int ver) { return "fx"; } @@ -91,14 +94,17 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport } - public DXExporterFromA1 setProfile(Profile p) { + @Override + public DXExporterFromA1 setProfile(Profile p) { return (DXExporterFromA1)super.setProfile(p); } - public DXExporterFromA1 setProfile(String profileName) { + @Override + public DXExporterFromA1 setProfile(String profileName) { return (DXExporterFromA1)super.setProfile(profileName); } - public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + @Override + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { if (!ignorePDFAErrors && !isValidA1(dataSource)) { throw new IOException("File is not a valid PDF/A input file"); } @@ -110,32 +116,41 @@ public class DXExporterFromA1 extends DXExporterFromA3 implements IZUGFeRDExport } - public DXExporterFromA1 load(String pdfFilename) throws IOException { + @Override + public DXExporterFromA1 load(String pdfFilename) throws IOException { return (DXExporterFromA1) super.load(pdfFilename); } - public DXExporterFromA1 load(byte[] pdfBinary) throws IOException { + @Override + public DXExporterFromA1 load(byte[] pdfBinary) throws IOException { return (DXExporterFromA1) super.load(pdfBinary); } - public DXExporterFromA1 load(InputStream pdfSource) throws IOException{ + @Override + public DXExporterFromA1 load(InputStream pdfSource) throws IOException{ return (DXExporterFromA1) super.load(pdfSource); } - public DXExporterFromA1 setCreator(String creator) { + @Override + public DXExporterFromA1 setCreator(String creator) { return (DXExporterFromA1) super.setCreator(creator); } - public DXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { + @Override + public DXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { return (DXExporterFromA1) super.setConformanceLevel(newLevel); } - public DXExporterFromA1 setProducer(String producer){ + @Override + public DXExporterFromA1 setProducer(String producer){ return (DXExporterFromA1) super.setProducer(producer); } - public DXExporterFromA1 setZUGFeRDVersion(int version){ + @Override + public DXExporterFromA1 setZUGFeRDVersion(int version){ return (DXExporterFromA1) super.setZUGFeRDVersion(version); } - public DXExporterFromA1 setXML(byte[] zugferdData) throws IOException{ + @Override + public DXExporterFromA1 setXML(byte[] zugferdData) throws IOException{ return (DXExporterFromA1) super.setXML(zugferdData); } - public DXExporterFromA1 disableAutoClose(boolean disableAutoClose){ + @Override + public DXExporterFromA1 disableAutoClose(boolean disableAutoClose){ return (DXExporterFromA1) super.disableAutoClose(disableAutoClose); } public DXExporterFromA1 convertOnly() { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java index 50aff364..6cfee3a0 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/DXExporterFromA3.java @@ -71,7 +71,7 @@ import jakarta.activation.FileDataSource; public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE; - protected ArrayList fileAttachments = new ArrayList(); + protected ArrayList fileAttachments = new ArrayList<>(); /** * This flag controls whether or not the metadata is overwritten, or kind of merged. @@ -127,7 +127,7 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { protected String despatchAdviceDocumentType = "DESPATCHADVICE"; - private HashMap additionalXMLs = new HashMap(); + private HashMap additionalXMLs = new HashMap<>(); private boolean attachZUGFeRDHeaders = true; @@ -138,7 +138,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfFilename filename of an PDF/A1 compliant document */ - public DXExporterFromA3 load(String pdfFilename) throws IOException { + @Override + public DXExporterFromA3 load(String pdfFilename) throws IOException { ensurePDFIsValid(new FileDataSource(pdfFilename)); try (FileInputStream pdf = new FileInputStream(pdfFilename)) { @@ -146,11 +147,13 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { } } - public IXMLProvider getProvider() { + @Override + public IXMLProvider getProvider() { return xmlProvider; } - public DXExporterFromA3 setProfile(Profile p) { + @Override + public DXExporterFromA3 setProfile(Profile p) { this.profile = p; if (xmlProvider != null) { xmlProvider.setProfile(p); @@ -158,7 +161,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - public DXExporterFromA3 setProfile(String profilename) { + @Override + public DXExporterFromA3 setProfile(String profilename) { this.profile = Profiles.getByName(profilename); if (xmlProvider != null) { @@ -167,7 +171,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - public DXExporterFromA3 addAdditionalFile(String name, byte[] content) { + @Override + public DXExporterFromA3 addAdditionalFile(String name, byte[] content) { fileAttachments.add(new FileAttachment(name, "text/xml", "Supplement", content).setDescription("ZUGFeRD extension/additional data")); return this; } @@ -180,7 +185,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfBinary binary of a PDF/A1 compliant document */ - public DXExporterFromA3 load(byte[] pdfBinary) throws IOException { + @Override + public DXExporterFromA3 load(byte[] pdfBinary) throws IOException { ensurePDFIsValid(new ByteArrayDataSource(new ByteArrayInputStream(pdfBinary))); doc = Loader.loadPDF(pdfBinary); return this; @@ -190,11 +196,13 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { super(); } - public void attachFile(FileAttachment file) { + @Override + public void attachFile(FileAttachment file) { fileAttachments.add(file); } - public void attachFile(String filename, byte[] data, String mimetype, String relation) { + @Override + public void attachFile(String filename, byte[] data, String mimetype, String relation) { FileAttachment fa = new FileAttachment(filename, mimetype, relation, data); fileAttachments.add(fa); } @@ -204,7 +212,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param ZUGFeRDfilename the pdf file name * @throws IOException if anything is wrong in the target location */ - public void export(String ZUGFeRDfilename) throws IOException { + @Override + public void export(String ZUGFeRDfilename) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -231,7 +240,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param output the OutputStream * @throws IOException if anything is wrong in the OutputStream */ - public void export(OutputStream output) throws IOException { + @Override + public void export(OutputStream output) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -257,7 +267,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param data the binary data of the file/attachment * @throws IOException if anything is wrong with filename */ - public void PDFAttachGenericFile(String filename, String relationship, String description, + @Override + public void PDFAttachGenericFile(String filename, String relationship, String description, String subType, byte[] data) throws IOException { PDFAttachGenericFile(this.doc, filename, relationship, description, subType, data); } @@ -274,7 +285,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param data the binary data of the file/attachment * @throws IOException if anything is wrong with filename */ - public void PDFAttachGenericFile(PDDocument doc, String filename, String relationship, String description, + @Override + public void PDFAttachGenericFile(PDDocument doc, String filename, String relationship, String description, String subType, byte[] data) throws IOException { fileAttached = true; @@ -293,7 +305,7 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { ef.setSize(data.length); ef.setCreationDate(new GregorianCalendar()); - ef.setModDate(GregorianCalendar.getInstance()); + ef.setModDate(Calendar.getInstance()); fs.setEmbeddedFile(ef); @@ -325,7 +337,7 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { doc.getDocumentCatalog().setNames(names); // AF entry (Array) in catalog with the FileSpec - COSBase AFEntry = (COSBase) doc.getDocumentCatalog().getCOSObject().getItem("AF"); + COSBase AFEntry = doc.getDocumentCatalog().getCOSObject().getItem("AF"); if ((AFEntry == null)) { COSArray cosArray = new COSArray(); cosArray.add(fs); @@ -351,7 +363,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param zugferdData XML data to be set as a byte array (XML file in raw form). * @throws IOException (should not happen) */ - public DXExporterFromA3 setXML(byte[] zugferdData) throws IOException { + @Override + public DXExporterFromA3 setXML(byte[] zugferdData) throws IOException { CustomXMLProvider cus = new CustomXMLProvider(); // As of late 2022 the Delivery-X standard is not yet published. See specification: // Die digitale Ablösung des Papier-Lieferscheins, Version 1.1, April 2022 @@ -372,11 +385,13 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfSource source to read a PDF/A1 compliant document from */ - public DXExporterFromA3 load(InputStream pdfSource) throws IOException { + @Override + public DXExporterFromA3 load(InputStream pdfSource) throws IOException { return load(readAllBytes(pdfSource)); } - public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + @Override + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { return true; } @@ -399,23 +414,27 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { *

* Feel free to pass "A" as new level if you know what you are doing :-) */ - public DXExporterFromA3 setConformanceLevel(PDFAConformanceLevel newLevel) { + @Override + public DXExporterFromA3 setConformanceLevel(PDFAConformanceLevel newLevel) { conformanceLevel = newLevel; return this; } - public DXExporterFromA3 setCreator(String creator) { + @Override + public DXExporterFromA3 setCreator(String creator) { this.creator = creator; return this; } - public DXExporterFromA3 setCreatorTool(String creatorTool) { + @Override + public DXExporterFromA3 setCreatorTool(String creatorTool) { this.creatorTool = creatorTool; return this; } - public DXExporterFromA3 setProducer(String producer) { + @Override + public DXExporterFromA3 setProducer(String producer) { this.producer = producer; return this; } @@ -434,7 +453,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - protected DXExporterFromA3 setAttachZUGFeRDHeaders(boolean attachHeaders) { + @Override + protected DXExporterFromA3 setAttachZUGFeRDHeaders(boolean attachHeaders) { this.attachZUGFeRDHeaders = attachHeaders; return this; } @@ -447,7 +467,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param metadata the PDFbox XMPMetadata object */ - protected void addXMP(XMPMetadata metadata) { + @Override + protected void addXMP(XMPMetadata metadata) { if (attachZUGFeRDHeaders) { // As of late 2022 the Delivery-X standard is not yet published. See specification: @@ -478,12 +499,14 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * setZUGFeRDXMLData(byte[] zugferdData) * @throws IOException if anything is wrong with already loaded PDF */ - public IExporter setTransaction(IExportableTransaction trans) throws IOException { + @Override + public IExporter setTransaction(IExportableTransaction trans) throws IOException { this.trans = trans; return prepare(); } - public IExporter prepare() throws IOException { + @Override + public IExporter prepare() throws IOException { prepareDocument(); xmlProvider.generateXML(trans); String filename = "cida.xml"; @@ -502,7 +525,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Reads the XMPMetadata from the PDDocument, if it exists. * Otherwise creates XMPMetadata. */ - protected XMPMetadata getXmpMetadata() throws IOException { + @Override + protected XMPMetadata getXmpMetadata() throws IOException { PDMetadata meta = doc.getDocumentCatalog().getMetadata(); if ((meta != null) && (meta.getLength() > 0)) { try { @@ -515,7 +539,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return XMPMetadata.createXMPMetadata(); } - protected byte[] serializeXmpMetadata(XMPMetadata xmpMetadata) throws TransformerException { + @Override + protected byte[] serializeXmpMetadata(XMPMetadata xmpMetadata) throws TransformerException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); new XmpSerializer().serialize(xmpMetadata, buffer, true); // see https://github.com/ZUGFeRD/mustangproject/issues/44 return buffer.toByteArray(); @@ -525,7 +550,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Sets the producer if the overwrite flag is set or the producer is not already set. * Sets the PDFVersion to 1.4 if the field is empty. */ - protected void writeAdobePDFSchema(XMPMetadata xmp) { + @Override + protected void writeAdobePDFSchema(XMPMetadata xmp) { AdobePDFSchema pdf = getAdobePDFSchema(xmp); if (overwrite || isEmpty(pdf.getProducer())) pdf.setProducer(producer); @@ -535,7 +561,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Returns the AdobePDFSchema from the XMPMetadata if it exists. * If the overwrite flag is set or no AdobePDFSchema exists in the XMPMetadata, it is created, added and returned. */ - protected AdobePDFSchema getAdobePDFSchema(XMPMetadata xmp) { + @Override + protected AdobePDFSchema getAdobePDFSchema(XMPMetadata xmp) { AdobePDFSchema pdf = xmp.getAdobePDFSchema(); if (pdf != null) if (overwrite) @@ -545,7 +572,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddAdobePDFSchema(); } - protected void writePDFAIdentificationSchema(XMPMetadata xmp) { + @Override + protected void writePDFAIdentificationSchema(XMPMetadata xmp) { PDFAIdentificationSchema pdfaid = getPDFAIdentificationSchema(xmp); if (overwrite || isEmpty(pdfaid.getConformance())) { try { @@ -560,7 +588,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { pdfaid.setPart(3); } - protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { + @Override + protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); if (pdfaid != null) if (overwrite) @@ -570,7 +599,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddPDFAIdentificationSchema(); } - protected void writeDublinCoreSchema(XMPMetadata xmp) { + @Override + protected void writeDublinCoreSchema(XMPMetadata xmp) { DublinCoreSchema dc = getDublinCoreSchema(xmp); if (dc.getFormat() == null) dc.setFormat("application/pdf"); @@ -593,7 +623,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { } } - protected DublinCoreSchema getDublinCoreSchema(XMPMetadata xmp) { + @Override + protected DublinCoreSchema getDublinCoreSchema(XMPMetadata xmp) { DublinCoreSchema dc = xmp.getDublinCoreSchema(); if (dc != null) if (overwrite) @@ -603,15 +634,17 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddDublinCoreSchema(); } - protected void writeXMLBasicSchema(XMPMetadata xmp) { + @Override + protected void writeXMLBasicSchema(XMPMetadata xmp) { XMPBasicSchema xsb = getXmpBasicSchema(xmp); if (overwrite || isEmpty(xsb.getCreatorTool()) || "UnknownApplication".equals(xsb.getCreatorTool())) xsb.setCreatorTool(creatorTool); if (overwrite || xsb.getCreateDate() == null) - xsb.setCreateDate(GregorianCalendar.getInstance()); + xsb.setCreateDate(Calendar.getInstance()); } - protected XMPBasicSchema getXmpBasicSchema(XMPMetadata xmp) { + @Override + protected XMPBasicSchema getXmpBasicSchema(XMPMetadata xmp) { XMPBasicSchema xsb = xmp.getXMPBasicSchema(); if (xsb != null) if (overwrite) @@ -621,7 +654,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddXMPBasicSchema(); } - protected void writeDocumentInformation() { + @Override + protected void writeDocumentInformation() { String fullProducer = producer + " (via mustangproject.org " + Version.VERSION + ")"; PDDocumentInformation info = doc.getDocumentInformation(); if (overwrite || info.getCreationDate() == null) @@ -643,7 +677,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds an OutputIntent and the sRGB color profile if no OutputIntent exist */ - protected void addSRGBOutputIntend() throws IOException { + @Override + protected void addSRGBOutputIntend() throws IOException { if (!doc.getDocumentCatalog().getOutputIntents().isEmpty()) { return; } @@ -666,7 +701,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds a MarkInfo element to the PDF if it doesn't already exist and sets it as marked. */ - protected void setMarked() { + @Override + protected void setMarked() { PDDocumentCatalog catalog = doc.getDocumentCatalog(); if (catalog.getMarkInfo() == null) { catalog.setMarkInfo(new PDMarkInfo(doc.getPages().getCOSObject())); @@ -677,7 +713,8 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds a StructureTreeRoot element to the PDF if it doesn't already exist. */ - protected void addStructureTreeRoot() { + @Override + protected void addStructureTreeRoot() { if (doc.getDocumentCatalog().getStructureTreeRoot() == null) { doc.getDocumentCatalog().setStructureTreeRoot(new PDStructureTreeRoot()); } @@ -687,19 +724,22 @@ public class DXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * @return if pdf file will be automatically closed after adding ZF */ - public boolean isAutoCloseDisabled() { + @Override + public boolean isAutoCloseDisabled() { return disableAutoClose; } /** * @param disableAutoClose prevent PDF file from being closed after adding ZF */ - public DXExporterFromA3 disableAutoClose(boolean disableAutoClose) { + @Override + public DXExporterFromA3 disableAutoClose(boolean disableAutoClose) { this.disableAutoClose = disableAutoClose; return this; } - protected void setXMLProvider(IXMLProvider p) { + @Override + protected void setXMLProvider(IXMLProvider p) { this.xmlProvider = p; if (profile != null) { xmlProvider.setProfile(profile); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java index 53cc71b1..f6e03242 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableItem.java @@ -141,6 +141,6 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{ */ default IZUGFeRDAllowanceCharge[] getItemTotalAllowances() { return null; - }; + } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java index 4b91f192..33f95aea 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA1.java @@ -29,10 +29,11 @@ import org.apache.pdfbox.preflight.parser.PreflightParser; import jakarta.activation.DataSource; -public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExporter { +public class OXExporterFromA1 extends OXExporterFromA3 { protected boolean ignorePDFAErrors = false; - public OXExporterFromA1 ignorePDFAErrors() { + @Override + public OXExporterFromA1 ignorePDFAErrors() { this.ignorePDFAErrors = true; return this; } @@ -45,7 +46,8 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport * @param ver the order-x version * @return the URN of the namespace */ - public String getNamespaceForVersion(int ver) { + @Override + public String getNamespaceForVersion(int ver) { return "urn:factur-x:pdfa:CrossIndustryDocument:1p0#"; } /*** @@ -53,7 +55,8 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport * @param ver the ox version * @return the namespace prefix as string, without colon */ - public String getPrefixForVersion(int ver) { + @Override + public String getPrefixForVersion(int ver) { return "fx"; } @@ -87,14 +90,17 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport } - public OXExporterFromA1 setProfile(Profile p) { + @Override + public OXExporterFromA1 setProfile(Profile p) { return (OXExporterFromA1)super.setProfile(p); } - public OXExporterFromA1 setProfile(String profileName) { + @Override + public OXExporterFromA1 setProfile(String profileName) { return (OXExporterFromA1)super.setProfile(profileName); } - public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + @Override + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { if (!ignorePDFAErrors && !isValidA1(dataSource)) { throw new IOException("File is not a valid PDF/A input file"); } @@ -106,32 +112,41 @@ public class OXExporterFromA1 extends OXExporterFromA3 implements IZUGFeRDExport } - public OXExporterFromA1 load(String pdfFilename) throws IOException { + @Override + public OXExporterFromA1 load(String pdfFilename) throws IOException { return (OXExporterFromA1) super.load(pdfFilename); } - public OXExporterFromA1 load(byte[] pdfBinary) throws IOException { + @Override + public OXExporterFromA1 load(byte[] pdfBinary) throws IOException { return (OXExporterFromA1) super.load(pdfBinary); } - public OXExporterFromA1 load(InputStream pdfSource) throws IOException{ + @Override + public OXExporterFromA1 load(InputStream pdfSource) throws IOException{ return (OXExporterFromA1) super.load(pdfSource); } - public OXExporterFromA1 setCreator(String creator) { + @Override + public OXExporterFromA1 setCreator(String creator) { return (OXExporterFromA1) super.setCreator(creator); } - public OXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { + @Override + public OXExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { return (OXExporterFromA1) super.setConformanceLevel(newLevel); } - public OXExporterFromA1 setProducer(String producer){ + @Override + public OXExporterFromA1 setProducer(String producer){ return (OXExporterFromA1) super.setProducer(producer); } - public OXExporterFromA1 setZUGFeRDVersion(int version){ + @Override + public OXExporterFromA1 setZUGFeRDVersion(int version){ return (OXExporterFromA1) super.setZUGFeRDVersion(version); } - public OXExporterFromA1 setXML(byte[] zugferdData) throws IOException{ + @Override + public OXExporterFromA1 setXML(byte[] zugferdData) throws IOException{ return (OXExporterFromA1) super.setXML(zugferdData); } - public OXExporterFromA1 disableAutoClose(boolean disableAutoClose){ + @Override + public OXExporterFromA1 disableAutoClose(boolean disableAutoClose){ return (OXExporterFromA1) super.disableAutoClose(disableAutoClose); } public OXExporterFromA1 convertOnly() { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java index b326cf22..4d14db29 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXExporterFromA3.java @@ -71,7 +71,7 @@ import jakarta.activation.FileDataSource; public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE; - protected ArrayList fileAttachments = new ArrayList(); + protected ArrayList fileAttachments = new ArrayList<>(); /** * This flag controls whether or not the metadata is overwritten, or kind of merged. @@ -127,7 +127,7 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { protected String orderXDocumentType = "ORDER"; - private HashMap additionalXMLs = new HashMap(); + private HashMap additionalXMLs = new HashMap<>(); private boolean attachZUGFeRDHeaders = true; @@ -138,7 +138,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfFilename filename of an PDF/A1 compliant document */ - public OXExporterFromA3 load(String pdfFilename) throws IOException { + @Override + public OXExporterFromA3 load(String pdfFilename) throws IOException { ensurePDFIsValid(new FileDataSource(pdfFilename)); try (FileInputStream pdf = new FileInputStream(pdfFilename)) { @@ -146,11 +147,13 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { } } - public IXMLProvider getProvider() { + @Override + public IXMLProvider getProvider() { return xmlProvider; } - public OXExporterFromA3 setProfile(Profile p) { + @Override + public OXExporterFromA3 setProfile(Profile p) { this.profile = p; if (xmlProvider != null) { xmlProvider.setProfile(p); @@ -158,7 +161,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - public OXExporterFromA3 setProfile(String profilename) { + @Override + public OXExporterFromA3 setProfile(String profilename) { this.profile = Profiles.getByName(profilename); if (xmlProvider != null) { @@ -167,7 +171,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - public OXExporterFromA3 addAdditionalFile(String name, byte[] content) { + @Override + public OXExporterFromA3 addAdditionalFile(String name, byte[] content) { fileAttachments.add(new FileAttachment(name, "text/xml", "Supplement", content).setDescription("ZUGFeRD extension/additional data")); return this; } @@ -180,7 +185,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfBinary binary of a PDF/A1 compliant document */ - public OXExporterFromA3 load(byte[] pdfBinary) throws IOException { + @Override + public OXExporterFromA3 load(byte[] pdfBinary) throws IOException { ensurePDFIsValid(new ByteArrayDataSource(new ByteArrayInputStream(pdfBinary))); doc = Loader.loadPDF(pdfBinary); return this; @@ -190,11 +196,13 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { super(); } - public void attachFile(FileAttachment file) { + @Override + public void attachFile(FileAttachment file) { fileAttachments.add(file); } - public void attachFile(String filename, byte[] data, String mimetype, String relation) { + @Override + public void attachFile(String filename, byte[] data, String mimetype, String relation) { FileAttachment fa = new FileAttachment(filename, mimetype, relation, data); fileAttachments.add(fa); } @@ -204,7 +212,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param ZUGFeRDfilename the pdf file name * @throws IOException if anything is wrong in the target location */ - public void export(String ZUGFeRDfilename) throws IOException { + @Override + public void export(String ZUGFeRDfilename) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -231,7 +240,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param output the OutputStream * @throws IOException if anything is wrong in the OutputStream */ - public void export(OutputStream output) throws IOException { + @Override + public void export(OutputStream output) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -257,7 +267,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param data the binary data of the file/attachment * @throws java.io.IOException if anything is wrong with filename */ - public void PDFAttachGenericFile(String filename, String relationship, String description, + @Override + public void PDFAttachGenericFile(String filename, String relationship, String description, String subType, byte[] data) throws IOException { PDFAttachGenericFile(this.doc, filename, relationship, description, subType, data); } @@ -274,7 +285,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param data the binary data of the file/attachment * @throws IOException if anything is wrong with filename */ - public void PDFAttachGenericFile(PDDocument doc, String filename, String relationship, String description, + @Override + public void PDFAttachGenericFile(PDDocument doc, String filename, String relationship, String description, String subType, byte[] data) throws IOException { fileAttached = true; @@ -293,7 +305,7 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { ef.setSize(data.length); ef.setCreationDate(new GregorianCalendar()); - ef.setModDate(GregorianCalendar.getInstance()); + ef.setModDate(Calendar.getInstance()); fs.setEmbeddedFile(ef); @@ -325,7 +337,7 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { doc.getDocumentCatalog().setNames(names); // AF entry (Array) in catalog with the FileSpec - COSBase AFEntry = (COSBase) doc.getDocumentCatalog().getCOSObject().getItem("AF"); + COSBase AFEntry = doc.getDocumentCatalog().getCOSObject().getItem("AF"); if ((AFEntry == null)) { COSArray cosArray = new COSArray(); cosArray.add(fs); @@ -351,7 +363,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * @param zugferdData XML data to be set as a byte array (XML file in raw form). * @throws IOException (should not happen) */ - public OXExporterFromA3 setXML(byte[] zugferdData) throws IOException { + @Override + public OXExporterFromA3 setXML(byte[] zugferdData) throws IOException { CustomXMLProvider cus = new CustomXMLProvider(); cus.setXML(zugferdData); this.setXMLProvider(cus); @@ -366,11 +379,13 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param pdfSource source to read a PDF/A1 compliant document from */ - public OXExporterFromA3 load(InputStream pdfSource) throws IOException { + @Override + public OXExporterFromA3 load(InputStream pdfSource) throws IOException { return load(readAllBytes(pdfSource)); } - public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + @Override + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { return true; } @@ -393,23 +408,27 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { *

* Feel free to pass "A" as new level if you know what you are doing :-) */ - public OXExporterFromA3 setConformanceLevel(PDFAConformanceLevel newLevel) { + @Override + public OXExporterFromA3 setConformanceLevel(PDFAConformanceLevel newLevel) { conformanceLevel = newLevel; return this; } - public OXExporterFromA3 setCreator(String creator) { + @Override + public OXExporterFromA3 setCreator(String creator) { this.creator = creator; return this; } - public OXExporterFromA3 setCreatorTool(String creatorTool) { + @Override + public OXExporterFromA3 setCreatorTool(String creatorTool) { this.creatorTool = creatorTool; return this; } - public OXExporterFromA3 setProducer(String producer) { + @Override + public OXExporterFromA3 setProducer(String producer) { this.producer = producer; return this; } @@ -428,7 +447,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return this; } - protected OXExporterFromA3 setAttachZUGFeRDHeaders(boolean attachHeaders) { + @Override + protected OXExporterFromA3 setAttachZUGFeRDHeaders(boolean attachHeaders) { this.attachZUGFeRDHeaders = attachHeaders; return this; } @@ -441,7 +461,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * * @param metadata the PDFbox XMPMetadata object */ - protected void addXMP(XMPMetadata metadata) { + @Override + protected void addXMP(XMPMetadata metadata) { if (attachZUGFeRDHeaders) { XMPSchemaZugferd zf = new XMPSchemaZugferd(metadata, 1, true, xmlProvider.getProfile(), @@ -468,12 +489,14 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * setZUGFeRDXMLData(byte[] zugferdData) * @throws IOException if anything is wrong with already loaded PDF */ - public IExporter setTransaction(IExportableTransaction trans) throws IOException { + @Override + public IExporter setTransaction(IExportableTransaction trans) throws IOException { this.trans = trans; return prepare(); } - public IExporter prepare() throws IOException { + @Override + public IExporter prepare() throws IOException { prepareDocument(); xmlProvider.generateXML(trans); String filename = "order-x.xml"; @@ -492,7 +515,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Reads the XMPMetadata from the PDDocument, if it exists. * Otherwise creates XMPMetadata. */ - protected XMPMetadata getXmpMetadata() throws IOException { + @Override + protected XMPMetadata getXmpMetadata() throws IOException { PDMetadata meta = doc.getDocumentCatalog().getMetadata(); if ((meta != null) && (meta.getLength() > 0)) { try { @@ -505,7 +529,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return XMPMetadata.createXMPMetadata(); } - protected byte[] serializeXmpMetadata(XMPMetadata xmpMetadata) throws TransformerException { + @Override + protected byte[] serializeXmpMetadata(XMPMetadata xmpMetadata) throws TransformerException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); new XmpSerializer().serialize(xmpMetadata, buffer, true); // see https://github.com/ZUGFeRD/mustangproject/issues/44 return buffer.toByteArray(); @@ -515,7 +540,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Sets the producer if the overwrite flag is set or the producer is not already set. * Sets the PDFVersion to 1.4 if the field is empty. */ - protected void writeAdobePDFSchema(XMPMetadata xmp) { + @Override + protected void writeAdobePDFSchema(XMPMetadata xmp) { AdobePDFSchema pdf = getAdobePDFSchema(xmp); if (overwrite || isEmpty(pdf.getProducer())) pdf.setProducer(producer); @@ -525,7 +551,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { * Returns the AdobePDFSchema from the XMPMetadata if it exists. * If the overwrite flag is set or no AdobePDFSchema exists in the XMPMetadata, it is created, added and returned. */ - protected AdobePDFSchema getAdobePDFSchema(XMPMetadata xmp) { + @Override + protected AdobePDFSchema getAdobePDFSchema(XMPMetadata xmp) { AdobePDFSchema pdf = xmp.getAdobePDFSchema(); if (pdf != null) if (overwrite) @@ -535,7 +562,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddAdobePDFSchema(); } - protected void writePDFAIdentificationSchema(XMPMetadata xmp) { + @Override + protected void writePDFAIdentificationSchema(XMPMetadata xmp) { PDFAIdentificationSchema pdfaid = getPDFAIdentificationSchema(xmp); if (overwrite || isEmpty(pdfaid.getConformance())) { try { @@ -550,7 +578,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { pdfaid.setPart(3); } - protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { + @Override + protected PDFAIdentificationSchema getPDFAIdentificationSchema(XMPMetadata xmp) { PDFAIdentificationSchema pdfaid = xmp.getPDFAIdentificationSchema(); if (pdfaid != null) if (overwrite) @@ -560,7 +589,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddPDFAIdentificationSchema(); } - protected void writeDublinCoreSchema(XMPMetadata xmp) { + @Override + protected void writeDublinCoreSchema(XMPMetadata xmp) { DublinCoreSchema dc = getDublinCoreSchema(xmp); if (dc.getFormat() == null) dc.setFormat("application/pdf"); @@ -583,7 +613,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { } } - protected DublinCoreSchema getDublinCoreSchema(XMPMetadata xmp) { + @Override + protected DublinCoreSchema getDublinCoreSchema(XMPMetadata xmp) { DublinCoreSchema dc = xmp.getDublinCoreSchema(); if (dc != null) if (overwrite) @@ -593,15 +624,17 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddDublinCoreSchema(); } - protected void writeXMLBasicSchema(XMPMetadata xmp) { + @Override + protected void writeXMLBasicSchema(XMPMetadata xmp) { XMPBasicSchema xsb = getXmpBasicSchema(xmp); if (overwrite || isEmpty(xsb.getCreatorTool()) || "UnknownApplication".equals(xsb.getCreatorTool())) xsb.setCreatorTool(creatorTool); if (overwrite || xsb.getCreateDate() == null) - xsb.setCreateDate(GregorianCalendar.getInstance()); + xsb.setCreateDate(Calendar.getInstance()); } - protected XMPBasicSchema getXmpBasicSchema(XMPMetadata xmp) { + @Override + protected XMPBasicSchema getXmpBasicSchema(XMPMetadata xmp) { XMPBasicSchema xsb = xmp.getXMPBasicSchema(); if (xsb != null) if (overwrite) @@ -611,7 +644,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { return xmp.createAndAddXMPBasicSchema(); } - protected void writeDocumentInformation() { + @Override + protected void writeDocumentInformation() { String fullProducer = producer + " (via mustangproject.org " + Version.VERSION + ")"; PDDocumentInformation info = doc.getDocumentInformation(); if (overwrite || info.getCreationDate() == null) @@ -633,7 +667,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds an OutputIntent and the sRGB color profile if no OutputIntent exist */ - protected void addSRGBOutputIntend() throws IOException { + @Override + protected void addSRGBOutputIntend() throws IOException { if (!doc.getDocumentCatalog().getOutputIntents().isEmpty()) { return; } @@ -656,7 +691,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds a MarkInfo element to the PDF if it doesn't already exist and sets it as marked. */ - protected void setMarked() { + @Override + protected void setMarked() { PDDocumentCatalog catalog = doc.getDocumentCatalog(); if (catalog.getMarkInfo() == null) { catalog.setMarkInfo(new PDMarkInfo(doc.getPages().getCOSObject())); @@ -667,7 +703,8 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * Adds a StructureTreeRoot element to the PDF if it doesn't already exist. */ - protected void addStructureTreeRoot() { + @Override + protected void addStructureTreeRoot() { if (doc.getDocumentCatalog().getStructureTreeRoot() == null) { doc.getDocumentCatalog().setStructureTreeRoot(new PDStructureTreeRoot()); } @@ -677,19 +714,22 @@ public class OXExporterFromA3 extends ZUGFeRDExporterFromA3 { /** * @return if pdf file will be automatically closed after adding ZF */ - public boolean isAutoCloseDisabled() { + @Override + public boolean isAutoCloseDisabled() { return disableAutoClose; } /** * @param disableAutoClose prevent PDF file from being closed after adding ZF */ - public OXExporterFromA3 disableAutoClose(boolean disableAutoClose) { + @Override + public OXExporterFromA3 disableAutoClose(boolean disableAutoClose) { this.disableAutoClose = disableAutoClose; return this; } - protected void setXMLProvider(IXMLProvider p) { + @Override + protected void setXMLProvider(IXMLProvider p) { this.xmlProvider = p; if (profile != null) { xmlProvider.setProfile(profile); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java index eabf2a14..b9b1d89d 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/OXPullProvider.java @@ -37,7 +37,7 @@ import org.mustangproject.EStandard; import org.mustangproject.FileAttachment; import org.mustangproject.XMLTools; -public class OXPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { +public class OXPullProvider extends ZUGFeRD2PullProvider { protected IExportableTransaction trans; protected TransactionCalculator calc; @@ -329,7 +329,7 @@ public class OXPullProvider extends ZUGFeRD2PullProvider implements IXMLProvider } } } - if ((trans.getDocumentCode() == CORRECTEDINVOICE)/*||(trans.getDocumentCode() == DocumentCodeTypeConstants.CREDITNOTE)*/) { + if ((trans.getDocumentCode().equals(CORRECTEDINVOICE))/*||(trans.getDocumentCode().equals (DocumentCodeTypeConstants.CREDITNOTE))*/) { hasDueDate = false; } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java b/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java index ce21d978..652051b6 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/PDFBoxUpdateMitigation.java @@ -2,19 +2,13 @@ package org.mustangproject.ZUGFeRD; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.EOFException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.RandomAccessFile; -import java.util.LinkedHashMap; -import java.util.Map; import org.apache.pdfbox.io.IOUtils; -import org.apache.pdfbox.io.RandomAccessRead; -import org.apache.pdfbox.io.RandomAccessReadBuffer; import org.apache.pdfbox.preflight.parser.PreflightParser; import jakarta.activation.DataSource; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 55423cee..c28594de 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -40,7 +40,7 @@ import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.mustangproject.XMLTools; -public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { +public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider { //// MAIN CLASS diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java index be7ecd7c..0a5066e6 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA1.java @@ -30,7 +30,7 @@ import org.mustangproject.EStandard; import jakarta.activation.DataSource; -public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUGFeRDExporter { +public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 { private static boolean isValidA1(DataSource dataSource) throws IOException { return getPDFAParserValidationResult(PreflightParserHelper.createPreflightParser(dataSource)); @@ -66,14 +66,17 @@ public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUG } - public ZUGFeRDExporterFromA1 setProfile(Profile p) { + @Override + public ZUGFeRDExporterFromA1 setProfile(Profile p) { return (ZUGFeRDExporterFromA1)super.setProfile(p); } - public ZUGFeRDExporterFromA1 setProfile(String profileName) { + @Override + public ZUGFeRDExporterFromA1 setProfile(String profileName) { return (ZUGFeRDExporterFromA1)super.setProfile(profileName); } - public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { + @Override + public boolean ensurePDFIsValid(final DataSource dataSource) throws IOException { if (!ignorePDFAErrors && !isValidA1(dataSource)) { throw new IOException("File is not a valid PDF/A-1 input file"); } @@ -81,35 +84,45 @@ public class ZUGFeRDExporterFromA1 extends ZUGFeRDExporterFromA3 implements IZUG } - public ZUGFeRDExporterFromA1 load(String pdfFilename) throws IOException { + @Override + public ZUGFeRDExporterFromA1 load(String pdfFilename) throws IOException { return (ZUGFeRDExporterFromA1) super.load(pdfFilename); } - public ZUGFeRDExporterFromA1 load(byte[] pdfBinary) throws IOException { + @Override + public ZUGFeRDExporterFromA1 load(byte[] pdfBinary) throws IOException { return (ZUGFeRDExporterFromA1) super.load(pdfBinary); } - public ZUGFeRDExporterFromA1 load(InputStream pdfSource) throws IOException{ + @Override + public ZUGFeRDExporterFromA1 load(InputStream pdfSource) throws IOException{ return (ZUGFeRDExporterFromA1) super.load(pdfSource); } - public ZUGFeRDExporterFromA1 setCreator(String creator) { + @Override + public ZUGFeRDExporterFromA1 setCreator(String creator) { return (ZUGFeRDExporterFromA1) super.setCreator(creator); } - public ZUGFeRDExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { + @Override + public ZUGFeRDExporterFromA1 setConformanceLevel(PDFAConformanceLevel newLevel) { return (ZUGFeRDExporterFromA1) super.setConformanceLevel(newLevel); } - public ZUGFeRDExporterFromA1 setProducer(String producer){ + @Override + public ZUGFeRDExporterFromA1 setProducer(String producer){ return (ZUGFeRDExporterFromA1) super.setProducer(producer); } - public ZUGFeRDExporterFromA1 setZUGFeRDVersion(EStandard est, int version){ + @Override + public ZUGFeRDExporterFromA1 setZUGFeRDVersion(EStandard est, int version){ return (ZUGFeRDExporterFromA1) super.setZUGFeRDVersion(est, version); } - public ZUGFeRDExporterFromA1 setZUGFeRDVersion(int version){ + @Override + public ZUGFeRDExporterFromA1 setZUGFeRDVersion(int version){ return (ZUGFeRDExporterFromA1) super.setZUGFeRDVersion(version); } - public ZUGFeRDExporterFromA1 setXML(byte[] zugferdData) throws IOException{ + @Override + public ZUGFeRDExporterFromA1 setXML(byte[] zugferdData) throws IOException{ return (ZUGFeRDExporterFromA1) super.setXML(zugferdData); } - public ZUGFeRDExporterFromA1 disableAutoClose(boolean disableAutoClose){ + @Override + public ZUGFeRDExporterFromA1 disableAutoClose(boolean disableAutoClose){ return (ZUGFeRDExporterFromA1) super.disableAutoClose(disableAutoClose); } public ZUGFeRDExporterFromA1 convertOnly() { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java index 8ce96b92..82297193 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromA3.java @@ -22,7 +22,6 @@ package org.mustangproject.ZUGFeRD; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.Closeable; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -76,7 +75,7 @@ import org.mustangproject.FileAttachment; import jakarta.activation.DataSource; import jakarta.activation.FileDataSource; -public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporter, IExporter, Closeable { +public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporter { private boolean isFacturX = true; public static final int DefaultZUGFeRDVersion = 2; @@ -87,7 +86,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte return this; } protected PDFAConformanceLevel conformanceLevel = PDFAConformanceLevel.UNICODE; - protected ArrayList fileAttachments = new ArrayList(); + protected ArrayList fileAttachments = new ArrayList<>(); /** * This flag controls whether or not the metadata is overwritten, or kind of merged. @@ -139,7 +138,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte protected PDDocument doc; - private HashMap additionalXMLs = new HashMap(); + private HashMap additionalXMLs = new HashMap<>(); protected int ZFVersion = DefaultZUGFeRDVersion; @@ -248,9 +247,10 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte * Generate ZF2.1 files with filename factur-x.xml * * @return this (fluent setter) - * @deprecated + * @deprecated It's now the default anyway */ - public ZUGFeRDExporterFromA3 setFacturX() { + @Deprecated + public ZUGFeRDExporterFromA3 setFacturX() { isFacturX = true; return this; } @@ -310,7 +310,8 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte * @param ZUGFeRDfilename the pdf file name * @throws IOException if anything is wrong in the target location */ - public void export(String ZUGFeRDfilename) throws IOException { + @Override + public void export(String ZUGFeRDfilename) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -337,7 +338,8 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte * @param output the OutputStream * @throws IOException if anything is wrong in the OutputStream */ - public void export(OutputStream output) throws IOException { + @Override + public void export(OutputStream output) throws IOException { if (!documentPrepared) { prepareDocument(); } @@ -399,7 +401,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte ef.setSize(data.length); ef.setCreationDate(new GregorianCalendar()); - ef.setModDate(GregorianCalendar.getInstance()); + ef.setModDate(Calendar.getInstance()); fs.setEmbeddedFile(ef); @@ -431,7 +433,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte doc.getDocumentCatalog().setNames(names); // AF entry (Array) in catalog with the FileSpec - COSBase AFEntry = (COSBase) doc.getDocumentCatalog().getCOSObject().getItem("AF"); + COSBase AFEntry = doc.getDocumentCatalog().getCOSObject().getItem("AF"); if ((AFEntry == null)) { COSArray cosArray = new COSArray(); cosArray.add(fs); @@ -636,7 +638,8 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte * setZUGFeRDXMLData(byte[] zugferdData) * @throws IOException if anything is wrong with already loaded PDF */ - public IExporter setTransaction(IExportableTransaction trans) throws IOException { + @Override + public IExporter setTransaction(IExportableTransaction trans) throws IOException { this.trans = trans; return prepare(); } @@ -788,7 +791,7 @@ public class ZUGFeRDExporterFromA3 extends XRExporter implements IZUGFeRDExporte if (overwrite || isEmpty(xsb.getCreatorTool()) || "UnknownApplication".equals(xsb.getCreatorTool())) xsb.setCreatorTool(creatorTool); if (overwrite || xsb.getCreateDate() == null) - xsb.setCreateDate(GregorianCalendar.getInstance()); + xsb.setCreateDate(Calendar.getInstance()); } protected XMPBasicSchema getXmpBasicSchema(XMPMetadata xmp) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java index bd722bbf..9a4f2c2f 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporterFromPDFA.java @@ -168,7 +168,7 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { } public IZUGFeRDExporter setProfile(Profile p) { - return (IZUGFeRDExporter) getExporter().setProfile(p); + return getExporter().setProfile(p); } public IZUGFeRDExporter setProfile(String profileName) { @@ -176,7 +176,7 @@ public class ZUGFeRDExporterFromPDFA implements IZUGFeRDExporter { if (p==null) { throw new RuntimeException("Profile not found."); } - return (IZUGFeRDExporter) getExporter().setProfile(p); + return getExporter().setProfile(p); } public IZUGFeRDExporter setConformanceLevel(PDFAConformanceLevel newLevel) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java index c9431b2b..b293af7e 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDVisualizer.java @@ -222,9 +222,8 @@ public class ZUGFeRDVisualizer { } FileInputStream fis = new FileInputStream(xmlFilename); - String fileContent = ""; try { - fileContent = new String(Files.readAllBytes(Paths.get(xmlFilename)), StandardCharsets.UTF_8); + new String(Files.readAllBytes(Paths.get(xmlFilename)), StandardCharsets.UTF_8); } catch (IOException e2) { LOG.log(Level.SEVERE, null, e2); } @@ -276,11 +275,8 @@ public class ZUGFeRDVisualizer { public void toPDF(String xmlFilename, String pdfFilename) { // the writing part - CIIToUBL c2u = new CIIToUBL(); - String sourceFilename = "factur-x.xml"; File CIIinputFile = new File(xmlFilename); - String expected = null; String result = null; ZUGFeRDVisualizer zvi = new ZUGFeRDVisualizer(); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java index d07325a5..6b7e9e12 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/BackwardCompatibilityTest.java @@ -316,7 +316,7 @@ public class BackwardCompatibilityTest extends TestCase implements IExportableTr // - public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() { + public IZUGFeRDTradeSettlementPayment[] getTradeSettlementPayment() { Payment P = new Payment(); IZUGFeRDTradeSettlementPayment[] allP = new Payment[1]; allP[0] = P; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/BaseTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/BaseTest.java index f7b4bc05..97c0ed27 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/BaseTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/BaseTest.java @@ -22,16 +22,7 @@ import junit.framework.Test; import junit.framework.TestSuite; import junit.framework.TestCase; -import org.junit.FixMethodOrder; -import org.junit.runners.MethodSorters; - -import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; import org.mustangproject.XMLTools; public class BaseTest extends TestCase { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/DXTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/DXTest.java index 5dfc37f7..56839121 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/DXTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/DXTest.java @@ -45,7 +45,7 @@ import java.util.GregorianCalendar; import static org.xmlunit.assertj.XmlAssert.assertThat; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class DXTest extends MustangReaderTestCase implements IExportableTransaction { +public class DXTest extends MustangReaderTestCase { final String TARGET_PDF = "./target/testout-DX.pdf"; final String TARGET_XML = "./target/testout-DX.xml"; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java index 0e9ea12d..4b9bbb34 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java @@ -21,12 +21,9 @@ */ package org.mustangproject.ZUGFeRD; -import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import junit.framework.TestCase; -import org.assertj.core.util.Lists; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; import org.mustangproject.*; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/FXTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/FXTest.java index fbe986b3..3f7dc9f5 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/FXTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/FXTest.java @@ -26,6 +26,8 @@ import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; import org.mustangproject.*; +import com.helger.commons.io.file.SimpleFileIO; + import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java index 16925115..28dd059a 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java @@ -43,7 +43,7 @@ import java.util.GregorianCalendar; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class MustangReaderWriterEdgeTest extends MustangReaderTestCase { - protected class EasyRecipientTradeParty extends RecipientTradeParty implements IZUGFeRDExportableTradeParty { + protected class EasyRecipientTradeParty extends RecipientTradeParty { // Not testing extended profile here, lineThree not possible @Override public String getAdditionalAddressExtension() { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/OXTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/OXTest.java index ddc79ac4..f5fa0ab2 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/OXTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/OXTest.java @@ -28,7 +28,6 @@ import org.junit.runners.MethodSorters; import org.mustangproject.*; import javax.xml.xpath.XPathExpressionException; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; @@ -42,7 +41,7 @@ import java.util.Date; import java.util.GregorianCalendar; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class OXTest extends MustangReaderTestCase implements IExportableTransaction { +public class OXTest extends MustangReaderTestCase { final String TARGET_PDF = "./target/testout-OX.pdf"; final String TARGET_PDF_EDGE = "./target/testout-OX-edge.pdf"; final String TARGET_XML = "./target/testout-OX.xml"; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ProfilesMinimumBasicWLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ProfilesMinimumBasicWLTest.java index e4533064..016dd9f2 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ProfilesMinimumBasicWLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ProfilesMinimumBasicWLTest.java @@ -23,13 +23,10 @@ package org.mustangproject.ZUGFeRD; import junit.framework.TestCase; import org.mustangproject.*; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; -import java.util.Calendar; import java.util.Date; -import java.util.GregorianCalendar; /*** * This is a test to confirm the minimum steps to implement a interface are still sufficient diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java index 7fb754aa..9b0a1028 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/UXTest.java @@ -19,24 +19,9 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; -import junit.framework.Test; import junit.framework.TestCase; -import junit.framework.TestSuite; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; -import org.mustangproject.Contact; -import org.mustangproject.Invoice; -import org.mustangproject.Item; -import org.mustangproject.Product; - -import java.io.IOException; -import java.io.InputStream; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class UXTest extends TestCase { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java index a8412b55..bb8d9acb 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/VisualizationTest.java @@ -69,8 +69,6 @@ public class VisualizationTest extends ResourceCase { public void testUBLCreditNoteVisualizationBasic() { // the writing part - CIIToUBL c2u = new CIIToUBL(); - String sourceFilename = "factur-x.xml"; File UBLinputFile = getResourceAsFile("ubl-creditnote.xml"); String expected = null; @@ -105,8 +103,6 @@ public class VisualizationTest extends ResourceCase { public void testUBLVisualizationBasic() { // the writing part - CIIToUBL c2u = new CIIToUBL(); - String sourceFilename = "factur-x.xml"; File UBLinputFile = getResourceAsFile("ubl/01.01a-INVOICE.ubl.xml"); String expected = null; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java index c5ffdf37..0c85e1a8 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/XRTest.java @@ -32,9 +32,6 @@ import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Date; import static org.xmlunit.assertj.XmlAssert.assertThat; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java index 02ecaef3..46771961 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java @@ -37,7 +37,7 @@ import junit.framework.Test; import junit.framework.TestSuite; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTransaction { +public class ZF2EdgeTest extends MustangReaderTestCase { final String TARGET_PDF = "./target/testout-ZF2newEdge.pdf"; protected class EdgeProduct implements IZUGFeRDExportableProduct { @@ -325,7 +325,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IExportableTra assertTrue(resultXML.contains("123")); // Reading ZUGFeRD - assertEquals("337.60", zi.getAmount());; + assertEquals("337.60", zi.getAmount()); assertEquals(zi.getHolder(), getOwnOrganisationName()); assertEquals(zi.getForeignReference(), getNumber()); try { diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index b4fcf5a4..2260aa10 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -29,7 +29,6 @@ import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import org.mustangproject.*; import org.junit.FixMethodOrder; @@ -38,9 +37,6 @@ import org.junit.runners.MethodSorters; import junit.framework.TestCase; import org.mustangproject.ZUGFeRD.model.EventTimeCodeTypeConstants; -import org.xmlunit.builder.Input; -import org.xmlunit.xpath.JAXPXPathEngine; -import org.xmlunit.xpath.XPathEngine; import javax.xml.xpath.XPathExpressionException; @@ -138,7 +134,7 @@ public class ZF2PushTest extends TestCase { byte[] b = {12, 13}; ze.attachFile("one.pdf", b, "application/pdf", "Alternative"); ze.attachFile("two.pdf", b, "application/pdf", "Alternative"); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID)).setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) ); String theXML = new String(ze.getProvider().getXML()); @@ -186,7 +182,7 @@ public class ZF2PushTest extends TestCase { String IBAN = "DE999888777"; String BIC = "COBADEFXXX"; BankDetails bd = new BankDetails(IBAN, BIC); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(bd).addTaxID(taxID)).setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addBankDetails(bd).addTaxID(taxID).addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE"))).setNumber(number).addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) ); String theXML = new String(ze.getProvider().getXML()); @@ -226,7 +222,7 @@ public class ZF2PushTest extends TestCase { // .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50))))); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))).setNumber(number) + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))).setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance(new BigDecimal("0.1")))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50)))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(2.0)).addCharge(new Charge(new BigDecimal(1)))) @@ -280,7 +276,7 @@ public class ZF2PushTest extends TestCase { ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) - .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addVATID("DE0815")).setOwnTaxID("4711") + .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addVATID("DE0815").addTaxID ("4711")) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0816").setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))) .setDeliveryAddress(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0816")) .setNumber(number) @@ -335,7 +331,7 @@ public class ZF2PushTest extends TestCase { // .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0)).addAllowance(new Allowance().setPercent(new BigDecimal(50))))); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addVATID("DE0815")).setOwnTaxID("4711").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0816").setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))).setNumber(number) + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addVATID("DE0815").addTaxID("4711")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0816").setContact(new Contact("contact testname", "123456", "contact.testemail@example.org").setFax("0911623562"))).setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)).setReverseCharge(), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)).setReverseCharge(), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)).setReverseCharge(), amount, new BigDecimal(2.0))) @@ -384,7 +380,7 @@ public class ZF2PushTest extends TestCase { ze.setProducer("My Application") .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")); - ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) + ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), amount, new BigDecimal(1.0))) @@ -449,7 +445,7 @@ public class ZF2PushTest extends TestCase { ze.setTransaction(new Invoice().setCurrency("CHF").addNote("document level 1/2").addNote("document level 2/2").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) .setSellerOrderReferencedDocumentID("9384").setBuyerOrderReferencedDocumentID("28934") .setDetailedDeliveryPeriod(new SimpleDateFormat("yyyyMMdd").parse(occurrenceFrom), new SimpleDateFormat("yyyyMMdd").parse(occurrenceTo)) - .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setEmail("sender@test.org").setID("0009845")) + .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID(taxID).setEmail("sender@test.org").setID("0009845").addVATID("DE0815")) .setDeliveryAddress(new TradeParty("just the other side of the street", "teststr.12a", "55232", "Entenhausen", "DE").addVATID("DE47110")) .setContractReferencedDocument(contractID) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addGlobalID(gln).setEmail("recipient@test.org").addVATID("DE4711").setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE").setFax("++49555123456")).setAdditionalAddress("Hinterhaus 3")) @@ -457,7 +453,7 @@ public class ZF2PushTest extends TestCase { .addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16))) .addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16))) .addCashDiscount(new CashDiscount(new BigDecimal(2), 14)) - .setDeliveryDate(sdf.parse("2020-11-02")).setOwnVATID("DE0815").setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE) + .setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE) ); } catch (ParseException e) { e.printStackTrace(); @@ -535,7 +531,7 @@ public class ZF2PushTest extends TestCase { .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("en16931")); - ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) + ze.setTransaction(new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), new BigDecimal(500.0), qty).addAllowance(new Allowance(new BigDecimal(300)).setTaxPercent(new BigDecimal(19)))) .addAllowance(new Allowance(new BigDecimal(600)).setTaxPercent(new BigDecimal(19))) @@ -582,7 +578,7 @@ public class ZF2PushTest extends TestCase { ze.setProducer("My Application") .setCreator(System.getProperty("user.name")).setZUGFeRDVersion(2).setProfile(Profiles.getByName("extended")); - ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE")).setOwnTaxID("4711").setOwnVATID("DE0815").setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) + ze.setTransaction(new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()).setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")).setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")).setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)))) diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java index bd38cfa0..2ae78e90 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2Test.java @@ -229,14 +229,14 @@ public class ZF2Test extends MustangReaderTestCase { assertEquals(zi.getSellerTradePartyAddress().getCityName(), "Stadthausen"); final List li = zi.getLineItemList(); - assertEquals(zi.getLineItemList().get(0).getId().toString(), "1"); - assertEquals(zi.getLineItemList().get(0).getProduct().getBuyerAssignedID(), ""); - assertEquals(zi.getLineItemList().get(0).getProduct().getSellerAssignedID(), ""); - assertEquals(zi.getLineItemList().get(0).getLineTotalAmount().toString(), "160.00"); - assertEquals(zi.getLineItemList().get(0).getQuantity().toString(), "1.0000"); - assertEquals(zi.getLineItemList().get(0).getProduct().getVATPercent().toString(), "7.00"); - assertEquals(zi.getLineItemList().get(0).getProduct().getName(), "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung"); - assertEquals(zi.getLineItemList().get(0).getProduct().getDescription(), ""); + assertEquals(li.get(0).getId().toString(), "1"); + assertEquals(li.get(0).getProduct().getBuyerAssignedID(), ""); + assertEquals(li.get(0).getProduct().getSellerAssignedID(), ""); + assertEquals(li.get(0).getLineTotalAmount().toString(), "160.00"); + assertEquals(li.get(0).getQuantity().toString(), "1.0000"); + assertEquals(li.get(0).getProduct().getVATPercent().toString(), "7.00"); + assertEquals(li.get(0).getProduct().getName(), "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung"); + assertEquals(li.get(0).getProduct().getDescription(), ""); try { assertEquals(zi.getVersion(), 2); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java index 5673809c..661a6feb 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2ZInvoiceImporterTest.java @@ -21,16 +21,8 @@ */ package org.mustangproject.ZUGFeRD; -import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; import org.mustangproject.Invoice; -import junit.framework.TestCase; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPathExpressionException; import java.io.*; import java.math.BigDecimal; @@ -39,7 +31,6 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Scanner; /*** diff --git a/validator/pom.xml b/validator/pom.xml index 3da9242f..3a116c21 100644 --- a/validator/pom.xml +++ b/validator/pom.xml @@ -72,11 +72,6 @@ 2.10.0 test - - org.riversun - bigdoc - 0.4.0 - org.junit.jupiter junit-jupiter-api diff --git a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java index 875bd512..b4b67ac9 100644 --- a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java @@ -1,14 +1,16 @@ package org.mustangproject.validator; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.EnumSet; import java.util.HashMap; -import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -20,20 +22,16 @@ import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.mustangproject.ZUGFeRD.ZUGFeRDImporter; -import org.riversun.bigdoc.bin.BigFileSearcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.verapdf.core.VeraPDFException; import org.verapdf.features.FeatureExtractorConfig; import org.verapdf.features.FeatureFactory; +import org.verapdf.gf.foundry.VeraGreenfieldFoundryProvider; import org.verapdf.metadata.fixer.FixerFactory; import org.verapdf.metadata.fixer.MetadataFixerConfig; -import org.verapdf.gf.foundry.VeraGreenfieldFoundryProvider; import org.verapdf.pdfa.flavours.PDFAFlavour; import org.verapdf.pdfa.validation.validators.ValidatorConfig; import org.verapdf.pdfa.validation.validators.ValidatorFactory; -import org.verapdf.processor.BatchProcessor; -import org.verapdf.processor.FormatOption; import org.verapdf.processor.ItemProcessor; import org.verapdf.processor.ProcessorConfig; import org.verapdf.processor.ProcessorFactory; @@ -95,7 +93,7 @@ public class PDFValidator extends Validator { // Default fixer config final MetadataFixerConfig fixerConfig = FixerFactory.defaultConfig(); // Tasks configuring - final EnumSet tasks = EnumSet.noneOf(TaskType.class); + final EnumSet tasks = EnumSet.noneOf(TaskType.class); tasks.add(TaskType.VALIDATE); // tasks.add(TaskType.EXTRACT_FEATURES); // tasks.add(TaskType.FIX_METADATA); @@ -104,7 +102,6 @@ public class PDFValidator extends Validator { fixerConfig, tasks ); // Creating processor and output stream. - final ByteArrayOutputStream reportStream = new ByteArrayOutputStream(); final InputStream inputStream = new ByteArrayInputStream(fileContents); try (ItemProcessor processor = ProcessorFactory.createProcessor(processorConfig)) { // Generating list of files for processing diff --git a/validator/src/main/java/org/mustangproject/validator/XMLValidator.java b/validator/src/main/java/org/mustangproject/validator/XMLValidator.java index ef1f40b7..a85a77c4 100644 --- a/validator/src/main/java/org/mustangproject/validator/XMLValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/XMLValidator.java @@ -1,23 +1,4 @@ package org.mustangproject.validator; -import com.helger.schematron.ISchematronResource; -import com.helger.schematron.svrl.SVRLHelper; -import com.helger.schematron.svrl.SVRLMarshaller; -import com.helger.schematron.svrl.jaxb.SchematronOutputType; -import org.mustangproject.XMLTools; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import com.helger.schematron.xslt.SchematronResourceXSLT; -import org.xml.sax.InputSource; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.stream.StreamSource; -import javax.xml.xpath.*; import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; @@ -28,6 +9,29 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.Calendar; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.stream.StreamSource; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.mustangproject.XMLTools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import com.helger.schematron.ISchematronResource; +import com.helger.schematron.svrl.SVRLMarshaller; +import com.helger.schematron.svrl.jaxb.SchematronOutputType; +import com.helger.schematron.xslt.SchematronResourceXSLT; + public class XMLValidator extends Validator { diff --git a/validator/src/test/java/org/mustangproject/validator/LibraryTest.java b/validator/src/test/java/org/mustangproject/validator/LibraryTest.java index 81bf874c..2e1b1a17 100644 --- a/validator/src/test/java/org/mustangproject/validator/LibraryTest.java +++ b/validator/src/test/java/org/mustangproject/validator/LibraryTest.java @@ -1,10 +1,5 @@ package org.mustangproject.validator; -import org.xmlunit.builder.Input; -import org.xmlunit.xpath.JAXPXPathEngine; -import org.xmlunit.xpath.XPathEngine; - -import javax.xml.transform.Source; import java.io.File; import static org.xmlunit.assertj.XmlAssert.assertThat; diff --git a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java index 5084dddd..c094a366 100644 --- a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java +++ b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java @@ -57,15 +57,13 @@ public class PDFValidatorTest extends ResourceCase { byte [] contents = getResourceAsByteArray("XMLinvalidV2PDF.pdf");// need a more invalid file here - pv.setFilename("XMLinvalidV2PDF.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("XMLinvalidV2PDF.pdf", contents); pv.validate(); // assertEquals("", pv.getXMLResult()); // contents = getResourceAsByteArray("Facture_F20180027.pdf"); - pv.setFilename("Facture_F20180027.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("Facture_F20180027.pdf", contents); pv.validate(); String actual = pv.getXMLResult(); assertEquals(true, actual.contains("summary status=\"valid")); @@ -91,8 +89,7 @@ public class PDFValidatorTest extends ResourceCase { // valid one contents = getResourceAsByteArray("validV2PDF.pdf"); - pv.setFilename("validV2PDF.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("validV2PDF.pdf", contents); vc.clear(); pv.validate(); actual = pv.getXMLResult(); @@ -115,8 +112,7 @@ public class PDFValidatorTest extends ResourceCase { // invalid file here byte [] contents = getResourceAsByteArray("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf"); - pv.setFilename("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf", contents); pv.validate(); String pdfvres = pv.getXMLResult(); @@ -132,8 +128,7 @@ public class PDFValidatorTest extends ResourceCase { vc.clear(); contents = getResourceAsByteArray("validV1WithAdditionalData.pdf");// need a more invalid file here - pv.setFilename("validV1WithAdditionalData.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("validV1WithAdditionalData.pdf", contents); pv.validate(); pdfvres = pv.getXMLResult(); @@ -157,8 +152,7 @@ public class PDFValidatorTest extends ResourceCase { try { byte [] contents = getResourceAsByteArray("invalidXMP.pdf"); - pv.setFilename("invalidXMP.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("invalidXMP.pdf", contents); vc.clear(); pv.validate(); String actual = pv.getXMLResult(); @@ -168,8 +162,7 @@ public class PDFValidatorTest extends ResourceCase { contents = getResourceAsByteArray("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf"); - pv.setFilename("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf"); - pv.setFileContents(contents); + pv.setFilenameAndContents("attributeBasedXMP_zugferd_2p0_EN16931_Einfach.pdf", contents); vc.clear(); pv.validate(); actual = pv.getXMLResult(); diff --git a/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java index 3751633c..285fc77b 100644 --- a/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java +++ b/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java @@ -1,7 +1,5 @@ package org.mustangproject.validator; -import static org.xmlunit.assertj.XmlAssert.assertThat; - import java.io.File; import javax.xml.transform.Source; diff --git a/validator/src/test/java/org/mustangproject/validator/ZUGFeRDValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/ZUGFeRDValidatorTest.java index 885b38ff..4a4638b6 100644 --- a/validator/src/test/java/org/mustangproject/validator/ZUGFeRDValidatorTest.java +++ b/validator/src/test/java/org/mustangproject/validator/ZUGFeRDValidatorTest.java @@ -2,12 +2,6 @@ package org.mustangproject.validator; import java.io.ByteArrayInputStream; import java.io.File; -import java.nio.charset.StandardCharsets; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.xmlunit.builder.Input; -import org.xmlunit.xpath.JAXPXPathEngine; -import org.xmlunit.xpath.XPathEngine; import static org.xmlunit.assertj.XmlAssert.assertThat;