Re-Initialize the HTML-template on language change.

Handle templates in an language based map for switching language.
This commit is contained in:
langfr
2025-05-23 12:36:01 +01:00
parent 4c8bd2b93f
commit 020fd03052

View File

@@ -46,6 +46,8 @@ import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamSource;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -77,7 +79,7 @@ public class ZUGFeRDVisualizer {
private Templates mXsltXRTemplate = null; private Templates mXsltXRTemplate = null;
private Templates mXsltUBLTemplate = null; private Templates mXsltUBLTemplate = null;
private Templates mXsltCIOTemplate = null; private Templates mXsltCIOTemplate = null;
private Templates mXsltHTMLTemplate = null; private Map<Language, Templates> mXsltHTMLTemplates = null;
private Templates mXsltPDFTemplate = null; private Templates mXsltPDFTemplate = null;
private Templates mXsltZF1HTMLTemplate = null; private Templates mXsltZF1HTMLTemplate = null;
@@ -179,7 +181,7 @@ public class ZUGFeRDVisualizer {
Optional<InputStream> in = copyStream(htmlOutput); Optional<InputStream> in = copyStream(htmlOutput);
ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream(); ByteArrayOutputStream htmlOutStream = new ByteArrayOutputStream();
if (in.isPresent()) { if (in.isPresent()) {
applyXSLTToHTML(in.get(), htmlOutStream); applyXSLTToHTML(in.get(), htmlOutStream, lang);
} }
return htmlOutStream.toString(StandardCharsets.UTF_8); return htmlOutStream.toString(StandardCharsets.UTF_8);
@@ -222,9 +224,12 @@ public class ZUGFeRDVisualizer {
new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl"))); new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/cii-xr.xsl")));
} }
if (mXsltHTMLTemplate == null) { if (mXsltHTMLTemplates == null) {
mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource( mXsltHTMLTemplates = new HashMap<>();
CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl"))); if (mXsltHTMLTemplates.get(lang) == null) {
Templates mXsltHTMLTemplate = mFactory.newTemplates(new StreamSource(CLASS_LOADER.getResourceAsStream(RESOURCE_PATH + "stylesheets/xrechnung-html." + lang.name().toLowerCase() + ".xsl")));
mXsltHTMLTemplates.put(lang, mXsltHTMLTemplate);
}
} }
if (mXsltZF1HTMLTemplate == null) { if (mXsltZF1HTMLTemplate == null) {
mXsltZF1HTMLTemplate = mFactory.newTemplates(new StreamSource( mXsltZF1HTMLTemplate = mFactory.newTemplates(new StreamSource(
@@ -442,9 +447,9 @@ public class ZUGFeRDVisualizer {
transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
} }
protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream) protected void applyXSLTToHTML(final InputStream xmlFile, final OutputStream htmlOutStream, Language lang)
throws TransformerException, IOException { throws TransformerException, IOException {
Transformer transformer = mXsltHTMLTemplate.newTransformer(); Transformer transformer = mXsltHTMLTemplates.get(lang).newTransformer();
transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream)); transformer.transform(new StreamSource(xmlFile), new StreamResult(htmlOutStream));
xmlFile.close(); xmlFile.close();