extracted the migration classes

This commit is contained in:
Jochen Stärk
2017-09-08 14:10:59 +02:00
parent 42d7678571
commit 252ad7ebcf

View File

@@ -17,6 +17,7 @@ import org.mustangproject.ZUGFeRD.ZUGFeRDExporter;
import org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA1Factory;
import org.mustangproject.ZUGFeRD.ZUGFeRDExporterFromA3Factory;
import org.mustangproject.ZUGFeRD.ZUGFeRDImporter;
import org.mustangproject.ZUGFeRD.ZUGFeRDMigrator;
import com.sanityinc.jargs.CmdLineParser;
import com.sanityinc.jargs.CmdLineParser.Option;
@@ -193,8 +194,6 @@ public class Toecount {
try {
pdfName=getFilenameFromUser("Source PDF", "invoice.pdf", true);
xmlName=getFilenameFromUser("ZUGFeRD XML", "ZUGFeRD-invoice.xml", true);
outName=getFilenameFromUser("Ouput PDF", "invoice.ZUGFeRD.pdf", false);
@@ -252,113 +251,8 @@ public class Toecount {
outName=getFilenameFromUser("ZUGFeRD 2.0 XML target", "ZUGFeRD-2-invoice.xml", false);
String xml = new String(Files.readAllBytes(Paths.get(xmlName)), StandardCharsets.UTF_8);
// todo: attributes may also be in single quotes, this one hardcodedly expects
// double ones
xml = xml.replace("\"urn:ferd:CrossIndustryDocument:invoice:1p0",
"\"urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:13");
xml = xml.replace("urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12",
"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:20");
xml = xml.replace("urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15",
"urn:un:unece:uncefact:data:standard:UnqualifiedDataType:20");
xml = xml.replace("rsm:CrossIndustryDocument", "rsm:CrossIndustryInvoice");
xml = xml.replace("rsm:SpecifiedExchangedDocumentContext", "rsm:CIExchangedDocumentContext");
xml = xml.replace("rsm:HeaderExchangedDocument", "rsm:CIIHExchangedDocument");
xml = xml.replace("SpecifiedSupplyChainTradeTransaction", "CIIHSupplyChainTradeTransaction");
xml = xml.replace("ram:GuidelineSpecifiedDocumentContextParameter",
"ram:GuidelineSpecifiedCIDocumentContextParameter");
xml = xml.replace("ram:IncludedNote", "ram:IncludedCINote");
xml = xml.replace("ram:ApplicableSupplyChainTradeAgreement",
"ram:ApplicableCIIHSupplyChainTradeAgreement");
xml = xml.replace("ram:SellerTradeParty", "ram:SellerCITradeParty");
xml = xml.replace("ram:BuyerTradeParty", "ram:BuyerCITradeParty");
xml = xml.replace("ram:ApplicableSupplyChainTradeDelivery",
"ram:ApplicableCIIHSupplyChainTradeDelivery");
xml = xml.replace("ram:ApplicableSupplyChainTradeSettlement",
"ram:ApplicableCIIHSupplyChainTradeSettlement");
xml = xml.replace("ram:IncludedSupplyChainTradeLineItem", "ram:IncludedCIILSupplyChainTradeLineItem");
xml = xml.replace("ram:AssociatedDocumentLineDocument", "ram:AssociatedCIILDocumentLineDocument");
xml = xml.replace("ram:SpecifiedSupplyChainTradeDelivery", "ram:SpecifiedCIILSupplyChainTradeDelivery");
xml = xml.replace("ram:SpecifiedSupplyChainTradeSettlement",
"ram:SpecifiedCIILSupplyChainTradeSettlement");
xml = xml.replace("ram:SpecifiedTradeProduct", "ram:SpecifiedCITradeProduct");
xml = xml.replace("ram:ActualDeliverySupplyChainEvent", "ram:ActualDeliveryCISupplyChainEvent");
xml = xml.replace("ram:SpecifiedTradeSettlementPaymentMeans",
"ram:SpecifiedCITradeSettlementPaymentMeans");
xml = xml.replace("ram:PayeePartyCreditorFinancialAccount", "ram:PayeePartyCICreditorFinancialAccount");
xml = xml.replace("ram:PayeeSpecifiedCreditorFinancialInstitution",
"ram:PayeeSpecifiedCICreditorFinancialInstitution");
xml = xml.replace("ram:ApplicableTradeTax", "ram:ApplicableCITradeTax");
xml = xml.replace("ram:ApplicablePercent", "ram:RateApplicablePercent");
xml = xml.replace("ram:PostalTradeAddress", "ram:PostalCITradeAddress");
xml = xml.replace("ram:ApplicableTradePaymentDiscountTerms",
"ram:ApplicableCITradePaymentDiscountTerms");
xml = xml.replace("ram:ApplicableProductCharacteristic", "ram:ApplicableCIProductCharacteristic");
xml = xml.replace("ram:ShipToTradeParty", "ram:ShipToCITradeParty");
xml = xml.replace("ram:ShipFromTradeParty", "ram:ShipFromCITradeParty");
xml = xml.replace("ram:ReceivableSpecifiedTradeAccountingAccount",
"ram:ReceivableSpecifiedCITradeAccountingAccount");
xml = xml.replace("ram:ContractReferencedDocument", "ram:ContractReferencedCIReferencedDocument");
// "ram:SpecifiedTradeAccountingAccount ram:SalesSpecifiedTradeAccountingAccount
// oder ReceivablesSpecifiedTradeAccountingAccount oder
// PurchaseSpecifiedTradeAccountingAccount
xml = xml.replace("ram:AdditionalReferencedDocument", "ram:AdditionalReferencedCIReferencedDocument");
xml = xml.replace("ram:TelephoneUniversalCommunication", "ram:TelephoneCIUniversalCommunication");
xml = xml.replace("ram:EmailURIUniversalCommunication", "ram:EmailURICIUniversalCommunication");
xml = xml.replace("ram:AdditionalReferencedDocument", "ram:AdditionalReferencedCIReferencedDocument");
xml = xml.replace("ram:IncludedReferencedProduct", "ram:IncludedReferencedProduct");
xml = xml.replace("ram:DefinedTradeContact", "ram:DefinedCITradeContact");
xml = xml.replace("ram:BillingSpecifiedPeriod", "ram:BillingCISpecifiedPeriod");
xml = xml.replace("ram:BuyerOrderReferencedDocument", "ram:BuyerOrderReferencedCIReferencedDocument");
xml = xml.replace("ram:DeliveryNoteReferencedDocument",
"ram:DeliveryNoteReferencedCIReferencedDocument");
xml = xml.replace("ram:SpecifiedTradeAllowanceCharge", "ram:SpecifiedCITradeAllowanceCharge");
xml = xml.replace("ram:SpecifiedLogisticsServiceCharge", "ram:SpecifiedCILogisticsServiceCharge");
xml = xml.replace("ram:AppliedTradeAllowanceCharge", "ram:AppliedCITradeAllowanceCharge");
xml = xml.replace("ram:InvoiceeTradeParty", "ram:InvoiceeCITradeParty");
xml = xml.replace("ram:CategoryTradeTax", "ram:CategoryCITradeTax");
xml = xml.replace("ram:SpecifiedTaxRegistration", "ram:SpecifiedCITaxRegistration");
xml = xml.replace("ram:PostalTradeAddress", "ram:PostalCITradeAddress");
xml = xml.replace("ram:SpecifiedTradePaymentTerms", "ram:SpecifiedCITradePaymentTerms");
xml = xml.replace("ram:SpecifiedSupplyChainTradeAgreement",
"ram:SpecifiedCIILSupplyChainTradeAgreement");
xml = xml.replace("ram:GrossPriceProductTradePrice", "ram:GrossPriceProductCITradePrice");
xml = xml.replace("ram:NetPriceProductTradePrice", "ram:NetPriceProductCITradePrice");
xml = xml.replaceAll("(?s)\\<ram:TestIndicator.*\\/ram:TestIndicator>", "");
// remove manually for the time being:
// xml=xml.replaceAll("ram:TestIndicator>(.*?)/ram:TestIndicator>", "");
// one ram:SpecifiedCIILTradeSettlementMonetarySummation will have to be
// ram:SpecifiedCIIHTradeSettlementMonetarySummation afterwards
String summationClose = "</ram:SpecifiedTradeSettlementMonetarySummation>";
int posFirstSummation = xml.indexOf(summationClose) + summationClose.length();
// if ram:SpecifiedTradeSettlementMonetarySummation were not found indexOf would
// return -1, therefore,
// to check if it
if (posFirstSummation > summationClose.length()) {
String xmlAfterFirstSummation = xml.substring(posFirstSummation);
String xmlBeforeIncludingFirstSummation = xml.substring(0, posFirstSummation);
// replace only once the header
xmlBeforeIncludingFirstSummation = xmlBeforeIncludingFirstSummation.replace(
"ram:SpecifiedTradeSettlementMonetarySummation",
"ram:SpecifiedCIIHTradeSettlementMonetarySummation");
// reconstruct the document now with a replaced first
// ram:SpecifiedTradeSettlementMonetarySummation to SpecifiedCIIH...
xml = xmlBeforeIncludingFirstSummation + xmlAfterFirstSummation;
}
// replace the rest of the ram:SpecifiedTradeSettlementMonetarySummation with
// the line value SpecifiedCIIL...
xml = xml.replace("ram:SpecifiedTradeSettlementMonetarySummation",
"ram:SpecifiedCIILTradeSettlementMonetarySummation");
// the rest of the ram:SpecifiedTradeSettlementMonetarySummation should be in
// ram:ApplicableSupplyChainTradeSettlement
// xml=xml.replaceAll(Pattern.quote("ram:SpecifiedTradeSettlementMonetarySummation"),
// "ram:SpecifiedCIILTradeSettlementMonetarySummation");
ZUGFeRDMigrator zmi=new ZUGFeRDMigrator();
xml=zmi.migrateFromV1ToV2(xml);
Files.write(Paths.get(outName), xml.getBytes());
} catch (IOException e) {
e.printStackTrace();