diff --git a/docgen/parameters.json b/docgen/parameters.json index 3a28e6bd8..6c8c66f32 100644 --- a/docgen/parameters.json +++ b/docgen/parameters.json @@ -1,8 +1,8 @@ { "title" : "Venus (Fugerit Document Generation Framework)", "name": "Venus", - "version" : "0.8.3", - "date" : "24/01/2023", + "version" : "0.8.4", + "date" : "27/01/2023", "organization" : { "name" : "Fugerit Org", "url" : "https://www.fugerit.org" diff --git a/docgen/release-notes.txt b/docgen/release-notes.txt index aa56961f2..f032a5f58 100644 --- a/docgen/release-notes.txt +++ b/docgen/release-notes.txt @@ -1,6 +1,10 @@ -0.8.3 (2023-01-24) +0.8.4 (2023-01-27) ------------------ -+ [fj-doc-mod-fop - need to create FopConfigClassLoaderWrapper with default ResourceResolver]([0.5.2](https://github.com/fugerit-org/fj-doc/issues/15)) ++ [fj-doc-base - Enable charset selection for DocTypeHandlerXML](https://github.com/fugerit-org/fj-doc/issues/17) + +0.8.3 (2023-01-24) +------------------ ++ [fj-doc-mod-fop - need to create FopConfigClassLoaderWrapper with default ResourceResolver](https://github.com/fugerit-org/fj-doc/issues/15) 0.8.2 (2023-01-22) ------------------ diff --git a/fj-doc-base-json/pom.xml b/fj-doc-base-json/pom.xml index 91a62cf50..5f7f7da4d 100644 --- a/fj-doc-base-json/pom.xml +++ b/fj-doc-base-json/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-base-json diff --git a/fj-doc-base-yaml/pom.xml b/fj-doc-base-yaml/pom.xml index 1b9a3f6ac..776e9fc16 100644 --- a/fj-doc-base-yaml/pom.xml +++ b/fj-doc-base-yaml/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-base-yaml diff --git a/fj-doc-base/pom.xml b/fj-doc-base/pom.xml index 5963d45a1..34834af57 100644 --- a/fj-doc-base/pom.xml +++ b/fj-doc-base/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-base diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocCharsetProvider.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocCharsetProvider.java new file mode 100644 index 000000000..bc97a2089 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocCharsetProvider.java @@ -0,0 +1,28 @@ +package org.fugerit.java.doc.base.config; + +import java.nio.charset.Charset; + +import org.fugerit.java.core.util.ObjectUtils; + +public abstract class DocCharsetProvider { + + public abstract Charset resolveCharset( Charset charset ); + + public static final DocCharsetProvider DEFAULT = new DocCharsetProvider() { + @Override + public Charset resolveCharset(Charset charset) { + return ObjectUtils.objectWithDefault( charset , Charset.defaultCharset() ); + } + }; + + private static DocCharsetProvider defaultProvider = DEFAULT; + + public static DocCharsetProvider getDefaultProvider() { + return defaultProvider; + } + + public static void setDefaultProvider(DocCharsetProvider defaultProvider) { + DocCharsetProvider.defaultProvider = defaultProvider; + } + +} diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandler.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandler.java index 6b1e0d5ff..62447e930 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandler.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandler.java @@ -1,5 +1,7 @@ package org.fugerit.java.doc.base.config; +import java.nio.charset.Charset; + import org.fugerit.java.core.util.collection.KeyString; public interface DocTypeHandler extends KeyString { @@ -10,6 +12,8 @@ public interface DocTypeHandler extends KeyString { String getMime(); + Charset getCharset(); + void handle( DocInput docInput, DocOutput docOutput ) throws Exception; } diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDecorator.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDecorator.java new file mode 100644 index 000000000..e5d47a9d7 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDecorator.java @@ -0,0 +1,33 @@ +package org.fugerit.java.doc.base.config; + +import org.fugerit.java.core.cfg.ConfigException; +import org.w3c.dom.Element; + +public class DocTypeHandlerDecorator extends DocTypeHandlerDefault { + + private static final long serialVersionUID = 5531355008187717238L; + + private DocTypeHandler handler; + + public DocTypeHandlerDecorator( DocTypeHandler handler ) { + super( handler.getType(), handler.getModule(), handler.getMime(), handler.getCharset() ); + this.handler = handler; + } + + public DocTypeHandler unwrap() { + return handler; + } + + @Override + public void handle(DocInput docInput, DocOutput docOutput) throws Exception { + this.handler.handle(docInput, docOutput); + } + + @Override + public void configure(Element tag) throws ConfigException { + if ( this.handler instanceof DocTypeHandlerDefault ) { + ((DocTypeHandlerDefault)this.handler).configure(tag); + } + } + +} diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDefault.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDefault.java index 136647676..9ea1e41fa 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDefault.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerDefault.java @@ -1,11 +1,14 @@ package org.fugerit.java.doc.base.config; import java.io.Serializable; +import java.nio.charset.Charset; import org.fugerit.java.core.cfg.ConfigException; import org.fugerit.java.core.cfg.helpers.XMLConfigurableObject; +import org.fugerit.java.core.lang.helpers.StringUtils; import org.fugerit.java.doc.base.helper.DefaultMimeHelper; import org.w3c.dom.Element; +import org.w3c.dom.NodeList; public class DocTypeHandlerDefault extends XMLConfigurableObject implements DocTypeHandler, Serializable { @@ -14,12 +17,18 @@ public class DocTypeHandlerDefault extends XMLConfigurableObject implements DocT */ private static final long serialVersionUID = -5024985828785381015L; + public static final String TAG_NAME_CONFIG = "config"; + + public static final String ATT_NAME_CHARSET = "charset"; + private String type; private String module; private String mime; + private Charset charset; + @Override public String getMime() { String res = this.mime; @@ -44,16 +53,26 @@ public String getModule() { return module; } + @Override + public Charset getCharset() { + return charset; + } + @Override public void handle(DocInput docInput, DocOutput docOutput) throws Exception { } - - public DocTypeHandlerDefault(String type, String module, String mime) { + + public DocTypeHandlerDefault(String type, String module, String mime, Charset charset) { super(); this.type = type; this.module = module; this.mime = mime; + this.charset = DocCharsetProvider.getDefaultProvider().resolveCharset(charset); + } + + public DocTypeHandlerDefault(String type, String module, String mime) { + this( type, module, mime, null ); } public DocTypeHandlerDefault(String type, String module ) { @@ -64,8 +83,21 @@ public static final String createKey( String type, String mod ) { return type+"-"+mod; } + protected void handleConfigTag( Element config ) throws ConfigException { + + } + @Override public void configure(Element tag) throws ConfigException { + NodeList nl = tag.getElementsByTagName( TAG_NAME_CONFIG ); + if ( nl.getLength() > 0 ) { + Element config = (Element)nl.item( 0 ); + String charsetAtt = config.getAttribute( ATT_NAME_CHARSET ); + if ( StringUtils.isNotEmpty( charsetAtt ) ) { + this.charset = Charset.forName( charsetAtt ); + } + this.handleConfigTag(config); + } } } diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXML.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXML.java index a21cc13e1..a61b39918 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXML.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXML.java @@ -1,6 +1,8 @@ package org.fugerit.java.doc.base.config; import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.fugerit.java.core.io.StreamIO; @@ -13,17 +15,23 @@ public class DocTypeHandlerXML extends DocTypeHandlerDefault { public static final DocTypeHandler HANDLER = new DocTypeHandlerXML(); + public static final DocTypeHandler HANDLER_UTF8 = new DocTypeHandlerXML( StandardCharsets.UTF_8 ); + public static final String TYPE = DocConfig.TYPE_XML; public static final String MODULE = "doc"; + public DocTypeHandlerXML( Charset charset ) { + super( TYPE, MODULE, null, charset ); + } + public DocTypeHandlerXML() { super( TYPE, MODULE ); } @Override public void handle(DocInput docInput, DocOutput docOutput) throws Exception { - StreamIO.pipeCharCloseBoth( docInput.getReader() , new OutputStreamWriter( docOutput.getOs() ) ); + StreamIO.pipeCharCloseBoth( docInput.getReader() , new OutputStreamWriter( docOutput.getOs(), this.getCharset() ) ); } } diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXMLUTF8.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXMLUTF8.java new file mode 100644 index 000000000..2cfca4df9 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/config/DocTypeHandlerXMLUTF8.java @@ -0,0 +1,13 @@ +package org.fugerit.java.doc.base.config; + +public class DocTypeHandlerXMLUTF8 extends DocTypeHandlerDecorator { + + private static final long serialVersionUID = -8512962187951518109L; + + public static final DocTypeHandler HANDLER = new DocTypeHandlerXMLUTF8(); + + public DocTypeHandlerXMLUTF8() { + super( DocTypeHandlerXML.HANDLER_UTF8 ); + } + +} diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/AbstractCustomMarkdownTypeHandler.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/AbstractCustomMarkdownTypeHandler.java index 634c4f82c..38716e693 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/AbstractCustomMarkdownTypeHandler.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/AbstractCustomMarkdownTypeHandler.java @@ -1,5 +1,7 @@ package org.fugerit.java.doc.base.typehandler.markdown; +import java.nio.charset.Charset; + import org.fugerit.java.doc.base.config.DocConfig; import org.fugerit.java.doc.base.config.DocTypeHandlerDefault; @@ -11,11 +13,19 @@ public abstract class AbstractCustomMarkdownTypeHandler extends DocTypeHandlerDe public static final String MIME = "text/x-markdown"; - public AbstractCustomMarkdownTypeHandler( boolean printComments ) { - super(TYPE, MODULE, MIME); + public AbstractCustomMarkdownTypeHandler( Charset charset, boolean printComments ) { + super(TYPE, MODULE, MIME, charset); this.printComments = printComments; } + public AbstractCustomMarkdownTypeHandler( Charset charset ) { + this( charset, MarkdownBasicDocFacade.DEFAULT_PRINT_COMMENTS ); + } + + public AbstractCustomMarkdownTypeHandler( boolean printComments ) { + this( null, printComments ); + } + public AbstractCustomMarkdownTypeHandler() { this( MarkdownBasicDocFacade.DEFAULT_PRINT_COMMENTS ); } diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandler.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandler.java index 182090a4b..14a8a199d 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandler.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandler.java @@ -2,6 +2,8 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.fugerit.java.doc.base.config.DocInput; import org.fugerit.java.doc.base.config.DocOutput; @@ -24,6 +26,10 @@ public class SimpleMarkdownBasicTypeHandler extends AbstractCustomMarkdownTypeHa public static final DocTypeHandler HANDLER_NOCOMMENTS = new SimpleMarkdownBasicTypeHandler( false ); + public static final DocTypeHandler HANDLER_UTF8 = new SimpleMarkdownBasicTypeHandler( StandardCharsets.UTF_8 ); + + public static final DocTypeHandler HANDLER_NOCOMMENTS_UTF8 = new SimpleMarkdownBasicTypeHandler( StandardCharsets.UTF_8, false ); + /** * */ @@ -35,15 +41,21 @@ public SimpleMarkdownBasicTypeHandler() { super(); } - - public SimpleMarkdownBasicTypeHandler(boolean printComments) { super(printComments); } + public SimpleMarkdownBasicTypeHandler(Charset charset, boolean printComments) { + super(charset, printComments); + } + + public SimpleMarkdownBasicTypeHandler(Charset charset) { + super(charset); + } + @Override public void handle(DocInput docInput, DocOutput docOutput) throws Exception { - PrintWriter writer = new PrintWriter( new OutputStreamWriter( docOutput.getOs() ) ); + PrintWriter writer = new PrintWriter( new OutputStreamWriter( docOutput.getOs(), this.getCharset() ) ); DocBase docBase = docInput.getDoc(); /* * The key for building a DocTypeHandler is to correctly renders diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandlerUTF8.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandlerUTF8.java new file mode 100644 index 000000000..74bd46219 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandlerUTF8.java @@ -0,0 +1,16 @@ +package org.fugerit.java.doc.base.typehandler.markdown; + +import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator; + +public class SimpleMarkdownBasicTypeHandlerUTF8 extends DocTypeHandlerDecorator { + + private static final long serialVersionUID = 2821034278291920037L; + + public static final DocTypeHandler HANDLER = new SimpleMarkdownBasicTypeHandlerUTF8(); + + public SimpleMarkdownBasicTypeHandlerUTF8() { + super( SimpleMarkdownBasicTypeHandler.HANDLER_UTF8 ); + } + +} diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandler.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandler.java index 21b4299bd..03cc11b73 100644 --- a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandler.java +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandler.java @@ -2,6 +2,8 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.fugerit.java.doc.base.config.DocInput; import org.fugerit.java.doc.base.config.DocOutput; @@ -24,6 +26,10 @@ public class SimpleMarkdownExtTypeHandler extends AbstractCustomMarkdownTypeHand public static final DocTypeHandler HANDLER_NOCOMMENTS = new SimpleMarkdownExtTypeHandler( false ); + public static final DocTypeHandler HANDLER_UTF8 = new SimpleMarkdownExtTypeHandler( StandardCharsets.UTF_8 ); + + public static final DocTypeHandler HANDLER_NOCOMMENTS_UTF8 = new SimpleMarkdownExtTypeHandler( StandardCharsets.UTF_8, false ); + /** * */ @@ -35,12 +41,19 @@ public SimpleMarkdownExtTypeHandler() { public SimpleMarkdownExtTypeHandler(boolean printComments) { super(printComments); - // TODO Auto-generated constructor stub + } + + public SimpleMarkdownExtTypeHandler(Charset charset, boolean printComments) { + super(charset, printComments); + } + + public SimpleMarkdownExtTypeHandler(Charset charset) { + super(charset); } @Override public void handle(DocInput docInput, DocOutput docOutput) throws Exception { - PrintWriter writer = new PrintWriter( new OutputStreamWriter( docOutput.getOs() ) ); + PrintWriter writer = new PrintWriter( new OutputStreamWriter( docOutput.getOs(), this.getCharset() ) ); DocBase docBase = docInput.getDoc(); /* * The key for building a DocTypeHandler is to correctly renders diff --git a/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandlerUTF8.java b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandlerUTF8.java new file mode 100644 index 000000000..61fb866f6 --- /dev/null +++ b/fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandlerUTF8.java @@ -0,0 +1,16 @@ +package org.fugerit.java.doc.base.typehandler.markdown; + +import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator; + +public class SimpleMarkdownExtTypeHandlerUTF8 extends DocTypeHandlerDecorator { + + private static final long serialVersionUID = 2821034278291920037L; + + public static final DocTypeHandler HANDLER = new SimpleMarkdownExtTypeHandlerUTF8(); + + public SimpleMarkdownExtTypeHandlerUTF8() { + super( SimpleMarkdownExtTypeHandler.HANDLER_UTF8 ); + } + +} diff --git a/fj-doc-freemarker/pom.xml b/fj-doc-freemarker/pom.xml index c1bce5243..813811590 100644 --- a/fj-doc-freemarker/pom.xml +++ b/fj-doc-freemarker/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-freemarker diff --git a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/helper/FreeMarkerDocHelperTypeHandler.java b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/helper/FreeMarkerDocHelperTypeHandler.java index 53b214346..3ff639873 100644 --- a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/helper/FreeMarkerDocHelperTypeHandler.java +++ b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/helper/FreeMarkerDocHelperTypeHandler.java @@ -1,9 +1,11 @@ package org.fugerit.java.doc.freemarker.helper; import java.io.OutputStreamWriter; +import java.nio.charset.Charset; import org.fugerit.java.core.io.StreamIO; import org.fugerit.java.core.util.filterchain.MiniFilterChain; +import org.fugerit.java.doc.base.config.DocCharsetProvider; import org.fugerit.java.doc.base.config.DocInput; import org.fugerit.java.doc.base.config.DocOutput; import org.fugerit.java.doc.base.config.DocTypeHandlerDefault; @@ -18,6 +20,8 @@ public class FreeMarkerDocHelperTypeHandler extends DocTypeHandlerDefault { public static final String CHAIN_FREEMARKER = "html-freemarker"; + public static final String MIME = "text/html"; + /** * */ @@ -28,7 +32,15 @@ public FreeMarkerDocHelperTypeHandler(String type) { } public FreeMarkerDocHelperTypeHandler(String type, String fmDocChainId) { - super(type, MODULE); + this(type, DocCharsetProvider.getDefaultProvider().resolveCharset( null ), fmDocChainId); + } + + public FreeMarkerDocHelperTypeHandler(String type, Charset charset) { + this(type, charset, CHAIN_FREEMARKER); + } + + public FreeMarkerDocHelperTypeHandler(String type, Charset charset, String fmDocChainId) { + super(type, MODULE, MIME, charset); this.fmDocChainId = fmDocChainId; } @@ -44,7 +56,7 @@ public void handle(DocInput docInput, DocOutput docOutput) throws Exception { DocProcessContext context = DocProcessContext.newContext().withDocInput( docInput ); DocProcessData data = new DocProcessData(); chain.apply( context, data ); - StreamIO.pipeCharCloseBoth( data.getCurrentXmlReader() , new OutputStreamWriter( docOutput.getOs() ) ); + StreamIO.pipeCharCloseBoth( data.getCurrentXmlReader() , new OutputStreamWriter( docOutput.getOs(), this.getCharset() ) ); } } \ No newline at end of file diff --git a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandler.java b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandler.java index 36e1aa649..4e74a0bac 100644 --- a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandler.java +++ b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandler.java @@ -1,5 +1,8 @@ package org.fugerit.java.doc.freemarker.html; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + import org.fugerit.java.doc.base.config.DocConfig; import org.fugerit.java.doc.base.config.DocTypeHandler; import org.fugerit.java.doc.freemarker.helper.FreeMarkerDocHelperTypeHandler; @@ -8,6 +11,8 @@ public class FreeMarkerHtmlFragmentTypeHandler extends FreeMarkerDocHelperTypeHa public static DocTypeHandler HANDLER = new FreeMarkerHtmlFragmentTypeHandler(); + public static DocTypeHandler HANDLER_UTF8 = new FreeMarkerHtmlFragmentTypeHandler( StandardCharsets.UTF_8 ); + /** * */ @@ -17,4 +22,8 @@ public FreeMarkerHtmlFragmentTypeHandler() { super( DocConfig.TYPE_HTML_FRAGMENT ); } + public FreeMarkerHtmlFragmentTypeHandler( Charset charset) { + super( DocConfig.TYPE_HTML_FRAGMENT, charset ); + } + } \ No newline at end of file diff --git a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandlerUTF8.java b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandlerUTF8.java new file mode 100644 index 000000000..ec2ca0160 --- /dev/null +++ b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlFragmentTypeHandlerUTF8.java @@ -0,0 +1,19 @@ +package org.fugerit.java.doc.freemarker.html; + +import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator; + +public class FreeMarkerHtmlFragmentTypeHandlerUTF8 extends DocTypeHandlerDecorator { + + public static DocTypeHandler HANDLER = new FreeMarkerHtmlFragmentTypeHandlerUTF8(); + + /** + * + */ + private static final long serialVersionUID = -7394516771708L; + + public FreeMarkerHtmlFragmentTypeHandlerUTF8() { + super( FreeMarkerHtmlFragmentTypeHandler.HANDLER_UTF8 ); + } + +} \ No newline at end of file diff --git a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandler.java b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandler.java index 8407eccaf..5492cf3af 100644 --- a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandler.java +++ b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandler.java @@ -1,5 +1,8 @@ package org.fugerit.java.doc.freemarker.html; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + import org.fugerit.java.doc.base.config.DocConfig; import org.fugerit.java.doc.base.config.DocTypeHandler; import org.fugerit.java.doc.freemarker.helper.FreeMarkerDocHelperTypeHandler; @@ -8,6 +11,8 @@ public class FreeMarkerHtmlTypeHandler extends FreeMarkerDocHelperTypeHandler { public static DocTypeHandler HANDLER = new FreeMarkerHtmlTypeHandler(); + public static DocTypeHandler HANDLER_UTF8 = new FreeMarkerHtmlTypeHandler( StandardCharsets.UTF_8 ); + /** * */ @@ -16,5 +21,9 @@ public class FreeMarkerHtmlTypeHandler extends FreeMarkerDocHelperTypeHandler { public FreeMarkerHtmlTypeHandler() { super( DocConfig.TYPE_HTML ); } + + public FreeMarkerHtmlTypeHandler( Charset charset) { + super( DocConfig.TYPE_HTML, charset ); + } } \ No newline at end of file diff --git a/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandlerUTF8.java b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandlerUTF8.java new file mode 100644 index 000000000..85d0b58b3 --- /dev/null +++ b/fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/html/FreeMarkerHtmlTypeHandlerUTF8.java @@ -0,0 +1,19 @@ +package org.fugerit.java.doc.freemarker.html; + +import org.fugerit.java.doc.base.config.DocTypeHandler; +import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator; + +public class FreeMarkerHtmlTypeHandlerUTF8 extends DocTypeHandlerDecorator { + + public static DocTypeHandler HANDLER = new FreeMarkerHtmlTypeHandlerUTF8(); + + /** + * + */ + private static final long serialVersionUID = -7394516771708L; + + public FreeMarkerHtmlTypeHandlerUTF8() { + super( FreeMarkerHtmlTypeHandler.HANDLER_UTF8 ); + } + +} \ No newline at end of file diff --git a/fj-doc-lib-autodoc/pom.xml b/fj-doc-lib-autodoc/pom.xml index 6829e6f51..e688af5b4 100644 --- a/fj-doc-lib-autodoc/pom.xml +++ b/fj-doc-lib-autodoc/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-lib-autodoc diff --git a/fj-doc-lib-simpletable/pom.xml b/fj-doc-lib-simpletable/pom.xml index af9d0782a..fae2c2c86 100644 --- a/fj-doc-lib-simpletable/pom.xml +++ b/fj-doc-lib-simpletable/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-lib-simpletable diff --git a/fj-doc-mod-fop/pom.xml b/fj-doc-mod-fop/pom.xml index dbd1e9257..c12b94d17 100644 --- a/fj-doc-mod-fop/pom.xml +++ b/fj-doc-mod-fop/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-mod-fop diff --git a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandler.java b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandler.java index 884dc9b98..c50b2c2bd 100644 --- a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandler.java +++ b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandler.java @@ -1,9 +1,12 @@ package org.fugerit.java.doc.mod.fop; import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.fugerit.java.core.io.StreamIO; import org.fugerit.java.core.util.filterchain.MiniFilterChain; +import org.fugerit.java.doc.base.config.DocCharsetProvider; import org.fugerit.java.doc.base.config.DocConfig; import org.fugerit.java.doc.base.config.DocInput; import org.fugerit.java.doc.base.config.DocOutput; @@ -20,6 +23,8 @@ public class FreeMarkerFopTypeHandler extends DocTypeHandlerDefault { public static final DocTypeHandler HANDLER = new FreeMarkerFopTypeHandler(); + public static final DocTypeHandler HANDLER_UTF8 = new FreeMarkerFopTypeHandler( StandardCharsets.UTF_8 ); + public static final String MODULE = "fop"; /** @@ -27,12 +32,20 @@ public class FreeMarkerFopTypeHandler extends DocTypeHandlerDefault { */ private static final long serialVersionUID = -7394516771708L; + public FreeMarkerFopTypeHandler( Charset charset ) { + this( DocConfig.TYPE_FO, charset ); + } + public FreeMarkerFopTypeHandler() { this( DocConfig.TYPE_FO ); } + public FreeMarkerFopTypeHandler(String type, Charset charset) { + super(type, MODULE, null, charset); + } + public FreeMarkerFopTypeHandler(String type) { - super(type, MODULE); + this(type, DocCharsetProvider.getDefaultProvider().resolveCharset( null ) ); } @Override @@ -41,7 +54,7 @@ public void handle(DocInput docInput, DocOutput docOutput) throws Exception { DocProcessContext context = DocProcessContext.newContext().withDocInput( docInput ); DocProcessData data = new DocProcessData(); chain.apply( context, data ); - StreamIO.pipeCharCloseBoth( data.getCurrentXmlReader() , new OutputStreamWriter( docOutput.getOs() ) ); + StreamIO.pipeCharCloseBoth( data.getCurrentXmlReader() , new OutputStreamWriter( docOutput.getOs(), this.getCharset() ) ); } } \ No newline at end of file diff --git a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandlerUTF8.java b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandlerUTF8.java new file mode 100644 index 000000000..fb7e1d477 --- /dev/null +++ b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/FreeMarkerFopTypeHandlerUTF8.java @@ -0,0 +1,13 @@ +package org.fugerit.java.doc.mod.fop; + +import org.fugerit.java.doc.base.config.DocTypeHandlerDecorator; + +public class FreeMarkerFopTypeHandlerUTF8 extends DocTypeHandlerDecorator { + + private static final long serialVersionUID = -7335866750463830177L; + + public FreeMarkerFopTypeHandlerUTF8() { + super( FreeMarkerFopTypeHandler.HANDLER_UTF8 ); + } + +} diff --git a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java index be97c65ba..64984f3f7 100644 --- a/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java +++ b/fj-doc-mod-fop/src/main/java/org/fugerit/java/doc/mod/fop/PdfFopTypeHandler.java @@ -3,6 +3,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.Properties; import javax.xml.transform.Result; @@ -20,11 +21,11 @@ import org.fugerit.java.core.lang.helpers.ClassHelper; import org.fugerit.java.core.lang.helpers.StringUtils; import org.fugerit.java.core.xml.dom.DOMUtils; +import org.fugerit.java.doc.base.config.DocCharsetProvider; import org.fugerit.java.doc.base.config.DocConfig; import org.fugerit.java.doc.base.config.DocInput; import org.fugerit.java.doc.base.config.DocOutput; import org.fugerit.java.doc.base.config.DocTypeHandler; -import org.fugerit.java.doc.mod.fop.config.ClassLoaderResourceResolverWrapper; import org.fugerit.java.doc.mod.fop.config.FopConfigClassLoader; import org.fugerit.java.doc.mod.fop.config.FopConfigClassLoaderWrapper; import org.w3c.dom.Element; @@ -63,12 +64,17 @@ public class PdfFopTypeHandler extends FreeMarkerFopTypeHandler { private boolean keepEmptyTags; private FopConfig fopConfig; - - public PdfFopTypeHandler( FopConfig fopConfig, boolean accessibility, boolean keepEmptyTags ) { - super( DocConfig.TYPE_PDF ); + + public PdfFopTypeHandler( Charset charset, FopConfig fopConfig, boolean accessibility, boolean keepEmptyTags ) { + super( DocConfig.TYPE_PDF, charset ); this.fopConfig = fopConfig; this.accessibility = accessibility; this.keepEmptyTags = keepEmptyTags; + + } + + public PdfFopTypeHandler( FopConfig fopConfig, boolean accessibility, boolean keepEmptyTags ) { + this( DocCharsetProvider.getDefaultProvider().resolveCharset( null ), fopConfig, accessibility, keepEmptyTags ); } public PdfFopTypeHandler( boolean accessibility, boolean keepEmptyTags ) { @@ -85,7 +91,7 @@ public void handle(DocInput docInput, DocOutput docOutput) throws Exception { DocOutput bufferOutput = DocOutput.newOutput( buffer ); super.handle(docInput, bufferOutput); // the XML file which provides the input - StreamSource xmlSource = new StreamSource( new InputStreamReader( new ByteArrayInputStream( buffer.toByteArray() ) ) ); + StreamSource xmlSource = new StreamSource( new InputStreamReader( new ByteArrayInputStream( buffer.toByteArray() ), this.getCharset() ) ); // create an instance of fop factory FopFactory fopFactory = this.fopConfig.newFactory(); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); @@ -115,33 +121,31 @@ public void setFopConfig(FopConfig fopConfig) { } @Override - public void configure(Element tag) throws ConfigException { - NodeList nl = tag.getElementsByTagName( "config" ); - if ( nl.getLength() > 0 ) { - Element config = (Element)nl.item( 0 ); - Properties props = DOMUtils.attributesToProperties( config ); - String fopConfigMode = props.getProperty( ATT_FOP_CONFIG_MODE ); - String fopConfigClassloaderPath = props.getProperty( ATT_FOP_CONFIG_CLASSLOADER_PATH ); - String fopConfigResoverType = props.getProperty( ATT_FOP_CONFIG_RESOLVER_TYPE, ATT_FOP_CONFIG_RESOLVER_TYPE_DEFAULT ); - String fontBaseClassloaderPath = props.getProperty( ATT_FONT_BASE_CLASSLOADER_PATH ); - // legacy class loader mode - if ( StringUtils.isEmpty( fopConfigMode ) && StringUtils.isNotEmpty( fopConfigClassloaderPath ) && StringUtils.isNotEmpty( fontBaseClassloaderPath ) ) { - fopConfigMode = ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY; - logger.warn( "Activated legacy ClassLoader mode. It is strongly recomended to update te configuration {} -> {}", ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY, FopConfigClassLoader.MIN_VERSION_NEW_CLASSLOADER_MODE ); - } - if ( ATT_FOP_CONFIG_MODE_CLASS_LOADER.equalsIgnoreCase( fopConfigMode ) ) { - try { - ResourceResolver customResourceResolver = (ResourceResolver) ClassHelper.newInstance( fopConfigResoverType ); - FopConfigClassLoaderWrapper fopConfigClassLoaderWrapper = new FopConfigClassLoaderWrapper(fopConfigClassloaderPath, customResourceResolver); - this.fopConfig = fopConfigClassLoaderWrapper; - } catch (Exception e) { - throw new ConfigException( PdfFopTypeHandler.class.getSimpleName()+" configuration error : "+e, e ); - } - } else if ( ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY.equalsIgnoreCase( fopConfigMode ) ) { - FopConfigClassLoader fopConfigClassLoader = new FopConfigClassLoader(fopConfigClassloaderPath, fontBaseClassloaderPath); - this.fopConfig = fopConfigClassLoader; + protected void handleConfigTag(Element config) throws ConfigException { + super.handleConfigTag(config); + Properties props = DOMUtils.attributesToProperties( config ); + String fopConfigMode = props.getProperty( ATT_FOP_CONFIG_MODE ); + String fopConfigClassloaderPath = props.getProperty( ATT_FOP_CONFIG_CLASSLOADER_PATH ); + String fopConfigResoverType = props.getProperty( ATT_FOP_CONFIG_RESOLVER_TYPE, ATT_FOP_CONFIG_RESOLVER_TYPE_DEFAULT ); + String fontBaseClassloaderPath = props.getProperty( ATT_FONT_BASE_CLASSLOADER_PATH ); + // legacy class loader mode + if ( StringUtils.isEmpty( fopConfigMode ) && StringUtils.isNotEmpty( fopConfigClassloaderPath ) && StringUtils.isNotEmpty( fontBaseClassloaderPath ) ) { + fopConfigMode = ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY; + logger.warn( "Activated legacy ClassLoader mode. It is strongly recomended to update te configuration {} -> {}", ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY, FopConfigClassLoader.MIN_VERSION_NEW_CLASSLOADER_MODE ); + } + if ( ATT_FOP_CONFIG_MODE_CLASS_LOADER.equalsIgnoreCase( fopConfigMode ) ) { + try { + ResourceResolver customResourceResolver = (ResourceResolver) ClassHelper.newInstance( fopConfigResoverType ); + FopConfigClassLoaderWrapper fopConfigClassLoaderWrapper = new FopConfigClassLoaderWrapper(fopConfigClassloaderPath, customResourceResolver); + this.fopConfig = fopConfigClassLoaderWrapper; + } catch (Exception e) { + throw new ConfigException( PdfFopTypeHandler.class.getSimpleName()+" configuration error : "+e, e ); } + } else if ( ATT_FOP_CONFIG_MODE_CLASS_LOADER_LEGACY.equalsIgnoreCase( fopConfigMode ) ) { + FopConfigClassLoader fopConfigClassLoader = new FopConfigClassLoader(fopConfigClassloaderPath, fontBaseClassloaderPath); + this.fopConfig = fopConfigClassLoader; } + } } \ No newline at end of file diff --git a/fj-doc-mod-opencsv/pom.xml b/fj-doc-mod-opencsv/pom.xml index f384c4909..b14d893c4 100644 --- a/fj-doc-mod-opencsv/pom.xml +++ b/fj-doc-mod-opencsv/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-mod-opencsv diff --git a/fj-doc-mod-poi/pom.xml b/fj-doc-mod-poi/pom.xml index 71435b4cb..02dbfe857 100644 --- a/fj-doc-mod-poi/pom.xml +++ b/fj-doc-mod-poi/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-mod-poi diff --git a/fj-doc-playground-quarkus/pom.xml b/fj-doc-playground-quarkus/pom.xml index c82c4a756..cb10061e2 100644 --- a/fj-doc-playground-quarkus/pom.xml +++ b/fj-doc-playground-quarkus/pom.xml @@ -4,7 +4,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-playground-quarkus diff --git a/fj-doc-sample/pom.xml b/fj-doc-sample/pom.xml index 2ab0a70cf..ab957f8ab 100644 --- a/fj-doc-sample/pom.xml +++ b/fj-doc-sample/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-sample diff --git a/fj-doc-sample/src/main/resources/config/doc-handler-sample.xml b/fj-doc-sample/src/main/resources/config/doc-handler-sample.xml index 18e27b217..6f99243ea 100644 --- a/fj-doc-sample/src/main/resources/config/doc-handler-sample.xml +++ b/fj-doc-sample/src/main/resources/config/doc-handler-sample.xml @@ -2,10 +2,10 @@ - + - + - + - - + + diff --git a/fj-doc-val-core/pom.xml b/fj-doc-val-core/pom.xml index 39e52376e..8393bf390 100644 --- a/fj-doc-val-core/pom.xml +++ b/fj-doc-val-core/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-val-core diff --git a/fj-doc-val-pdfbox/pom.xml b/fj-doc-val-pdfbox/pom.xml index 5fbff87f7..70450652a 100644 --- a/fj-doc-val-pdfbox/pom.xml +++ b/fj-doc-val-pdfbox/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-val-pdfbox diff --git a/fj-doc-val-poi/pom.xml b/fj-doc-val-poi/pom.xml index d42344476..1de0197b0 100644 --- a/fj-doc-val-poi/pom.xml +++ b/fj-doc-val-poi/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-val-poi diff --git a/fj-doc-val/pom.xml b/fj-doc-val/pom.xml index fa0653172..780d32569 100644 --- a/fj-doc-val/pom.xml +++ b/fj-doc-val/pom.xml @@ -7,7 +7,7 @@ org.fugerit.java fj-doc - 0.8.3 + 0.8.4 fj-doc-val diff --git a/pom.xml b/pom.xml index f6dbb6ddc..85be4fc96 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ fj-doc - 0.8.3 + 0.8.4 pom fj-doc