From 9681b4fa6d087efd88df5cd07b00fbea7dd1c6a3 Mon Sep 17 00:00:00 2001 From: Stefan Schmiedl Date: Thu, 25 Jul 2019 18:33:14 +0200 Subject: [PATCH] extend IProfileProvider to allow modification of profile --- .../ZUGFeRD/CustomXMLProvider.java | 12 +++++++++++- .../ZUGFeRD/IProfileProvider.java | 2 ++ .../ZUGFeRD/ZUGFeRD1PullProvider.java | 19 +++++++++++++++++-- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 5 +++++ .../ZUGFeRD/ZUGFeRDExporter.java | 2 +- .../ZUGFeRDTransactionModelConverter.java | 8 +++++++- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java index dfd8be88..6ac2c275 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/CustomXMLProvider.java @@ -18,7 +18,7 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD; -public class CustomXMLProvider implements IXMLProvider { +public class CustomXMLProvider implements IXMLProvider, IProfileProvider { protected byte[] zugferdData; @@ -48,4 +48,14 @@ public class CustomXMLProvider implements IXMLProvider { } + @Override + public String getProfile() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setProfile(ZUGFeRDConformanceLevel level) { + // TODO Auto-generated method stub + } } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/IProfileProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/IProfileProvider.java index adc695df..d4469edb 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/IProfileProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/IProfileProvider.java @@ -21,5 +21,7 @@ package org.mustangproject.ZUGFeRD; public interface IProfileProvider { public String getProfile(); + + public void setProfile(ZUGFeRDConformanceLevel level); } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 3c782866..f8278a32 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -19,6 +19,7 @@ package org.mustangproject.ZUGFeRD; import org.mustangproject.ZUGFeRD.model.CrossIndustryDocumentType; +import org.mustangproject.ZUGFeRD.model.DocumentContextParameterTypeConstants; import org.mustangproject.ZUGFeRD.model.ZFNamespacePrefixMapper; import javax.xml.bind.JAXBContext; @@ -27,13 +28,27 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.ByteArrayOutputStream; -public class ZUGFeRD1PullProvider implements IXMLProvider { +public class ZUGFeRD1PullProvider implements IXMLProvider, IProfileProvider { protected byte[] zugferdData; private Marshaller marshaller; private boolean isTest; + private ZUGFeRDConformanceLevel level; + + + public void setProfile(ZUGFeRDConformanceLevel level) { + this.level = level; + } + + public String getProfile() { + switch (level) { + case BASIC: return DocumentContextParameterTypeConstants.BASIC; + case COMFORT: return DocumentContextParameterTypeConstants.COMFORT; + default: return DocumentContextParameterTypeConstants.EXTENDED; + } + } /** @@ -59,7 +74,7 @@ public class ZUGFeRD1PullProvider implements IXMLProvider { private String createZugferdXMLForTransaction(IZUGFeRDExportableTransaction trans) { JAXBElement jaxElement = - new ZUGFeRDTransactionModelConverter(trans).withTest(isTest).convertToModel(); + new ZUGFeRDTransactionModelConverter(trans).withTest(isTest).withProfile(getProfile()).convertToModel(); try { return marshalJaxToXMLString(jaxElement); diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 03db8e0c..7e12cdfe 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -71,6 +71,11 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider { protected byte[] zugferdData; private IZUGFeRDExportableTransaction trans; + private ZUGFeRDConformanceLevel level; + + public void setProfile(ZUGFeRDConformanceLevel level) { + this.level = level; + } /** * enables the flag to indicate a test invoice in the XML structure diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java index af5dd4cc..f6796991 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDExporter.java @@ -367,7 +367,7 @@ public class ZUGFeRDExporter implements Closeable { */ public void PDFattachZugferdFile(IZUGFeRDExportableTransaction trans) throws IOException { prepareDocument(); - + ((IProfileProvider) xmlProvider).setProfile(profile); xmlProvider.generateXML(trans); String filename = getFilenameForVersion(ZFVersion); PDFAttachGenericFile(doc, filename, "Alternative", diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java index 330619ee..6896dd2a 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDTransactionModelConverter.java @@ -85,6 +85,7 @@ class ZUGFeRDTransactionModelConverter { private final Totals totals; private boolean isTest; private String currency = "EUR"; + private String profile; ZUGFeRDTransactionModelConverter(IZUGFeRDExportableTransaction trans) { @@ -114,7 +115,7 @@ class ZUGFeRDTransactionModelConverter { DocumentContextParameterType contextParameter = xmlFactory .createDocumentContextParameterType(); IDType idType = xmlFactory.createIDType(); - idType.setValue(DocumentContextParameterTypeConstants.EXTENDED); + idType.setValue(profile); contextParameter.setID(idType); context.getGuidelineSpecifiedDocumentContextParameter().add( contextParameter); @@ -955,6 +956,11 @@ class ZUGFeRDTransactionModelConverter { return this; } + public ZUGFeRDTransactionModelConverter withProfile(String profile) { + this.profile = profile; + return this; + } + private class LineCalc { private BigDecimal totalGross;