Skip to content

Commit be915d6

Browse files
committed
Added handlers loading for new config #38
1 parent 3904aaf commit be915d6

File tree

7 files changed

+74
-120
lines changed

7 files changed

+74
-120
lines changed

fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/process/FreemarkerDocProcessConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.fugerit.java.core.cfg.xml.ListMapConfig;
88
import org.fugerit.java.core.util.filterchain.MiniFilterChain;
9+
import org.fugerit.java.doc.base.facade.DocHandlerFacade;
910
import org.fugerit.java.doc.base.process.DocProcessConfig;
1011
import org.fugerit.java.doc.base.process.DocProcessContext;
1112
import org.fugerit.java.doc.base.process.DocProcessData;
@@ -23,10 +24,14 @@ public class FreemarkerDocProcessConfig extends DocProcessConfig implements Seri
2324

2425
private Map<String, MiniFilterChain> additionalChans;
2526

27+
@Getter
28+
private DocHandlerFacade facade;
29+
2630
protected FreemarkerDocProcessConfig() {
2731
super();
2832
this.docChainList = new ListMapConfig<>();
2933
this.additionalChans = new HashMap<>();
34+
this.facade = new DocHandlerFacade();
3035
}
3136

3237
private DefaultChainProvider defaultChain;

fj-doc-freemarker/src/main/java/org/fugerit/java/doc/freemarker/process/FreemarkerDocProcessConfigFacade.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77
import javax.xml.parsers.DocumentBuilderFactory;
88

99
import org.fugerit.java.core.cfg.ConfigException;
10+
import org.fugerit.java.core.cfg.xml.FactoryType;
11+
import org.fugerit.java.core.cfg.xml.FactoryTypeHelper;
1012
import org.fugerit.java.core.cfg.xml.XmlBeanHelper;
1113
import org.fugerit.java.core.lang.helpers.ClassHelper;
1214
import org.fugerit.java.core.lang.helpers.StringUtils;
1315
import org.fugerit.java.core.util.filterchain.MiniFilterBase;
1416
import org.fugerit.java.core.util.filterchain.MiniFilterChain;
1517
import org.fugerit.java.core.xml.dom.DOMUtils;
1618
import org.fugerit.java.doc.base.config.DocException;
19+
import org.fugerit.java.doc.base.config.DocTypeHandler;
1720
import org.fugerit.java.doc.freemarker.config.FreeMarkerComplexProcessStep;
1821
import org.fugerit.java.doc.freemarker.config.FreeMarkerConfigStep;
1922
import org.fugerit.java.doc.freemarker.config.FreeMarkerFunctionStep;
@@ -29,6 +32,8 @@
2932
@Slf4j
3033
public class FreemarkerDocProcessConfigFacade {
3134

35+
public static final String ATT_DOC_HANDLER_CONFIG = "docHandlerConfig";
36+
3237
public static final String ATT_DOC_CHAIN = "docChain";
3338

3439
public static final String ATT_CHAIN_STEP = "chainStep";
@@ -39,6 +44,8 @@ public class FreemarkerDocProcessConfigFacade {
3944

4045
public static final String STEP_TYPE_MAP = "map";
4146

47+
private static final FactoryTypeHelper<DocTypeHandler> HELPER = FactoryTypeHelper.newInstance( DocTypeHandler.class );
48+
4249
public static FreemarkerDocProcessConfig newSimpleConfig( String id, String templatePath ) throws ConfigException {
4350
FreemarkerDocProcessConfig config = new FreemarkerDocProcessConfig();
4451
config.setDefaultChain(
@@ -77,6 +84,19 @@ public static FreemarkerDocProcessConfig loadConfig( Reader xmlReader ) throws C
7784
dbf.setNamespaceAware( true );
7885
DocumentBuilder db = dbf.newDocumentBuilder();
7986
Document doc = db.parse( new InputSource( xmlReader ) );
87+
// docHandlerConfig reading
88+
NodeList docHandlerConfigList = doc.getElementsByTagName( ATT_DOC_HANDLER_CONFIG );
89+
if ( docHandlerConfigList.getLength() == 1 ) {
90+
Element docHandlerConfigTag = (Element) docHandlerConfigList.item( 0 );
91+
NodeList docHandlerList = docHandlerConfigTag.getElementsByTagName( "data" );
92+
log.info( "docHandlerList -> {}", docHandlerList.getLength() );
93+
for ( int k=0; k<docHandlerList.getLength(); k++ ) {
94+
FactoryType current = new FactoryType();
95+
XmlBeanHelper.setFromElement( current, (Element)docHandlerList.item( k ) );
96+
config.getFacade().registerHandler( HELPER.createHelper( current ) );
97+
}
98+
99+
}
80100
// docChain reading
81101
NodeList docChainLisgt = doc.getElementsByTagName( ATT_DOC_CHAIN );
82102
for ( int k=0; k<docChainLisgt.getLength(); k++ ) {

fj-doc-sample/src/main/java/org/fugerit/java/doc/sample/facade/SampleFacade.java

Lines changed: 0 additions & 69 deletions
This file was deleted.

fj-doc-sample/src/main/resources/config/doc-handler-sample.xml

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,4 @@
11
<doc-handler-config user-catalog="default-complete">
2-
3-
<factory id="default-complete">
4-
<data id="md-ext" info="md" type="org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler" />
5-
<data id="xml-doc" info="xml" type="org.fugerit.java.doc.base.config.DocTypeHandlerXMLUTF8" />
6-
<data id="xls-poi" info="xls" type="org.fugerit.java.doc.mod.poi.XlsPoiTypeHandler" />
7-
<data id="xlsx-poi" info="xlsx" type="org.fugerit.java.doc.mod.poi.XlsxPoiTypeHandler" />
8-
<data id="fo-fop" info="fo" type="org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8" />
9-
<data id="pdf-fop" info="pdf" type="org.fugerit.java.doc.mod.fop.PdfFopTypeHandler">
10-
<!--
11-
Starting with fj-doc-mod-fop version 0.5.2 there is a new attribute :
12-
'fop-config-mode'
13-
Accepting three possible values :
14-
15-
1) fop-config-mode='default' (is optional, if nothing is specified it is the default)
16-
17-
2) fop-config-mode='classloader'
18-
Example : <config fop-config-mode="classloader" fop-config-classloader-path="fop-config.xml"/>
19-
With an optinal attribute :
20-
'fop-config-resover-type' (which default to 'org.fugerit.java.doc.mod.fop.config.ClassLoaderResourceResolverWrapper')
21-
22-
3) fop-config-mode='classloader-legacy' [deprecated, equal to the previous method of classloading, see [0.5.2](https://github.com/fugerit-org/fj-doc/issues/7)
23-
Example 1: <config fop-config-mode='classloader-legacy' fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
24-
Note for compatibilty reason, if attributes 'fop-config-classloader-path' and 'font-base-classloader-path' are both set, the mode switch to fop-config-mode='classloader-legacy'
25-
Example 2 : <config fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
26-
27-
-->
28-
<config charset="UTF-8" fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
29-
</data>
30-
<data id="html-fm" info="html" type="org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerUTF8" />
31-
<data id="html-fragment-fm" info="fhtml" type="org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerUTF8" />
32-
<data id="csv-opencsv" info="csv" type="org.fugerit.java.doc.mod.opencsv.OpenCSVTypeHandler"/>
33-
</factory>
342

353
<factory id="unsafe-test">
364
<data id="html-fm" info="html" type="org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerUTF8" />

fj-doc-sample/src/main/resources/config/freemarker-doc-process.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,38 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="https://freemarkerdocprocess.fugerit.org https://www.fugerit.org/data/java/doc/xsd/freemarker-doc-process-1-0.xsd" >
66

7+
<docHandlerConfig>
8+
<data id="md-ext" info="md" type="org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler" />
9+
<data id="xml-doc" info="xml" type="org.fugerit.java.doc.base.config.DocTypeHandlerXMLUTF8" />
10+
<data id="xls-poi" info="xls" type="org.fugerit.java.doc.mod.poi.XlsPoiTypeHandler" />
11+
<data id="xlsx-poi" info="xlsx" type="org.fugerit.java.doc.mod.poi.XlsxPoiTypeHandler" />
12+
<data id="fo-fop" info="fo" type="org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8" />
13+
<data id="pdf-fop" info="pdf" type="org.fugerit.java.doc.mod.fop.PdfFopTypeHandler">
14+
<!--
15+
Starting with fj-doc-mod-fop version 0.5.2 there is a new attribute :
16+
'fop-config-mode'
17+
Accepting three possible values :
18+
19+
1) fop-config-mode='default' (is optional, if nothing is specified it is the default)
20+
21+
2) fop-config-mode='classloader'
22+
Example : <config fop-config-mode="classloader" fop-config-classloader-path="fop-config.xml"/>
23+
With an optinal attribute :
24+
'fop-config-resover-type' (which default to 'org.fugerit.java.doc.mod.fop.config.ClassLoaderResourceResolverWrapper')
25+
26+
3) fop-config-mode='classloader-legacy' [deprecated, equal to the previous method of classloading, see [0.5.2](https://github.com/fugerit-org/fj-doc/issues/7)
27+
Example 1: <config fop-config-mode='classloader-legacy' fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
28+
Note for compatibilty reason, if attributes 'fop-config-classloader-path' and 'font-base-classloader-path' are both set, the mode switch to fop-config-mode='classloader-legacy'
29+
Example 2 : <config fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
30+
31+
-->
32+
<config charset="UTF-8" fop-config-classloader-path="fop-config.xml" font-base-classloader-path="font/"/>
33+
</data>
34+
<data id="html-fm" info="html" type="org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerUTF8" />
35+
<data id="html-fragment-fm" info="fhtml" type="org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerUTF8" />
36+
<data id="csv-opencsv" info="csv" type="org.fugerit.java.doc.mod.opencsv.OpenCSVTypeHandler"/>
37+
</docHandlerConfig>
38+
739
<docChain id="shared">
840
<chainStep stepType="config">
941
<config id="FJ_SAMPLE_TEST" version="2.3.31" path="/free_marker/"/>

fj-doc-sample/src/test/java/test/org/fugerit/java/doc/sample/facade/BasicFacadeTest.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
import java.io.File;
44
import java.io.FileOutputStream;
55
import java.io.FileReader;
6+
import java.io.InputStreamReader;
67
import java.io.Reader;
78
import java.util.ArrayList;
89
import java.util.List;
910

1011
import org.fugerit.java.core.cfg.ConfigException;
12+
import org.fugerit.java.core.lang.helpers.ClassHelper;
1113
import org.fugerit.java.core.util.checkpoint.CheckpointFormatHelper;
1214
import org.fugerit.java.core.util.checkpoint.Checkpoints;
1315
import org.fugerit.java.doc.base.config.DocConfig;
@@ -20,7 +22,8 @@
2022
import org.fugerit.java.doc.base.model.DocBase;
2123
import org.fugerit.java.doc.base.parser.DocParser;
2224
import org.fugerit.java.doc.base.parser.DocValidationResult;
23-
import org.fugerit.java.doc.sample.facade.SampleFacade;
25+
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig;
26+
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade;
2427
import org.junit.Test;
2528
import org.slf4j.Logger;
2629
import org.slf4j.LoggerFactory;
@@ -55,7 +58,6 @@ protected BasicFacadeTest( String nameBase, String ...typeList ) {
5558
for ( String current : typeList ) {
5659
types.add( current );
5760
}
58-
this.setFacadeId( SampleFacade.MAIN_FACTORY );
5961
this.validate = VALIDATE_DEFAULT;
6062
}
6163

@@ -75,6 +77,18 @@ public String getNameBase() {
7577
return this.nameBase;
7678
}
7779

80+
private static FreemarkerDocProcessConfig init() {
81+
FreemarkerDocProcessConfig config = null;
82+
try ( InputStreamReader xmlReader = new InputStreamReader( ClassHelper.loadFromDefaultClassLoader( "config/freemarker-doc-process.xml" ) ) ) {
83+
config = FreemarkerDocProcessConfigFacade.loadConfig( xmlReader );
84+
} catch (Exception e) {
85+
throw new RuntimeException( e );
86+
}
87+
return config;
88+
}
89+
90+
protected static FreemarkerDocProcessConfig PROCESS_CONFIG = init();
91+
7892
private int getSourceType() {
7993
int sourceType = DocFacadeSource.SOURCE_TYPE_DEFAULT;
8094
if ( this.getNameBase().endsWith( "json" ) ) {
@@ -128,7 +142,7 @@ protected DocBase getDocBase() throws Exception {
128142
}
129143

130144
public void produce( File outputFolder, String facadeId, DocBase doc, Reader reader, String baseName, String type ) throws Exception {
131-
DocHandlerFacade facade = SampleFacade.getFacade( facadeId );
145+
DocHandlerFacade facade = PROCESS_CONFIG.getFacade();
132146
DocTypeHandler handler = facade.findHandler( type );
133147
StringBuilder append = new StringBuilder();
134148
if ( handler == null ) {

fj-doc-sample/src/test/java/test/org/fugerit/java/doc/sample/freemarker/BasicFreeMarkerTest.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package test.org.fugerit.java.doc.sample.freemarker;
22

3-
import java.io.InputStreamReader;
43
import java.io.Reader;
54

6-
import org.fugerit.java.core.lang.helpers.ClassHelper;
75
import org.fugerit.java.doc.base.config.DocConfig;
86
import org.fugerit.java.doc.base.process.DocProcessContext;
97
import org.fugerit.java.doc.base.process.DocProcessData;
10-
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig;
11-
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade;
128

139
import test.org.fugerit.java.doc.sample.facade.BasicFacadeTest;
1410

@@ -22,18 +18,6 @@ protected BasicFreeMarkerTest(String nameBase, String... typeList) {
2218
super(nameBase, typeList);
2319
}
2420

25-
private static FreemarkerDocProcessConfig init() {
26-
FreemarkerDocProcessConfig config = null;
27-
try ( InputStreamReader xmlReader = new InputStreamReader( ClassHelper.loadFromDefaultClassLoader( "config/freemarker-doc-process.xml" ) ) ) {
28-
config = FreemarkerDocProcessConfigFacade.loadConfig( xmlReader );
29-
} catch (Exception e) {
30-
throw new RuntimeException( e );
31-
}
32-
return config;
33-
}
34-
35-
private static FreemarkerDocProcessConfig PROCESS_CONFIG = init();
36-
3721
@Override
3822
protected Reader getXmlReader() throws Exception {
3923
return this.process( this.getNameBase() );

0 commit comments

Comments
 (0)