Skip to content

Commit 12c8566

Browse files
committed
Merge branch 'develop'
2 parents 6cb8b9c + 4a3dae9 commit 12c8566

File tree

76 files changed

+2972
-488
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+2972
-488
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ There are five kinds of components (each components README.md contains module st
1515

1616
### 1. Framework core :
1717
* [Core library (fj-doc-base)](fj-doc-base/README.md) (contains a simple renderer for [Markdowm BASIC](fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownBasicTypeHandler.java) and [Markdown EXT](fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehandler/markdown/SimpleMarkdownExtTypeHandler.java))
18+
* [Json extension (fj-doc-base-json)](fj-doc-base-json/README.md) (allow for using json as document generator instead of standard xml generator) [since 0.7.0]
19+
* [Yaml extension (fj-doc-base-yaml)](fj-doc-base-yaml/README.md) (allow for using yaml as document generator instead of standard xml generator) [since 0.7.0]
1820
* Doc format XSD [public](https://www.fugerit.org/data/java/doc/xsd/doc-1-1.xsd) and [private](fj-doc-base/src/main/resources/config/doc-1-1.xsd)
1921

2022
### 2. Modules :
@@ -40,6 +42,7 @@ There are five kinds of components (each components README.md contains module st
4042
* [Doc type validation (fj-doc-val)](fj-doc-val/README.md) - simple utilities for validating file type.
4143

4244
### 5. Tutorial :
45+
* [Playgroundt (fj-doc-playground-quarkus)](fj-doc-playground-quarkus/README.md) [since 0.7.0]
4346
* [Samples and Quickstart (fj-doc-sample)](fj-doc-sample/README.md)
4447

4548
### 6. Extension Type Handlers (Extension renders) :

docgen/parameters.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"title" : "Venus (Fugerit Document Generation Framework)",
33
"name": "Venus",
4-
"version" : "0.6.2",
5-
"date" : "23/12/2022",
4+
"version" : "0.7.0",
5+
"date" : "29/12/2022",
66
"organization" : {
77
"name" : "Fugerit Org",
88
"url" : "https://www.fugerit.org"

docgen/release-notes.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
0.6.2 (2022-12-23)
1+
0.7.0 (2022-12-29)
2+
------------------
3+
+ Added module for using json a document generator [fj-doc-base-json](https://github.com/fugerit-org/fj-doc/tree/main/fj-doc-base-json) (based on jackson)
4+
+ Added module for using yaml a document generator [fj-doc-base-yaml](https://github.com/fugerit-org/fj-doc/tree/main/fj-doc-base-yaml) (based on jackson)
5+
+ Added playground module [fj-doc-playground-quarkus](https://github.com/fugerit-org/fj-doc/tree/main/fj-doc-playground-quarkus) (based on quarkus)
6+
+ Better pdf validation handling
7+
+ Updated fj-core version to 0.8.6
8+
9+
0.6.2 (2022-12-23)
210
------------------
311
+ The fj-doc-val has been split in modules, to optimize dependencies
412

fj-doc-base-json/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Fugerit Document Generation Framework (fj-doc)
2+
3+
## Core library : json extension (fj-doc-base-json)
4+
5+
[back to fj-doc index](../README.md)
6+
7+
*Description* :
8+
Add the option to use a json as document generator instead of standard xml source provided by default.
9+
10+
*Status* :
11+
All basic features are implemented (json parsing, conversion from and to xml)

fj-doc-base-json/pom.xml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<artifactId>fj-doc-base-json</artifactId>
6+
7+
<parent>
8+
<groupId>org.fugerit.java</groupId>
9+
<artifactId>fj-doc</artifactId>
10+
<version>0.7-SNAPHOST</version>
11+
</parent>
12+
13+
<name>fj-doc-base-json</name>
14+
<description>Module for producting documents from json instead of xml</description>
15+
16+
<licenses>
17+
<license>
18+
<name>Apache License, Version 2.0</name>
19+
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
20+
<distribution>repo</distribution>
21+
</license>
22+
</licenses>
23+
24+
<properties>
25+
</properties>
26+
27+
<build>
28+
29+
</build>
30+
31+
<dependencies>
32+
33+
<dependency>
34+
<groupId>org.fugerit.java</groupId>
35+
<artifactId>fj-core</artifactId>
36+
</dependency>
37+
38+
<dependency>
39+
<groupId>org.fugerit.java</groupId>
40+
<artifactId>fj-doc-base</artifactId>
41+
</dependency>
42+
43+
<dependency>
44+
<groupId>com.fasterxml.jackson.core</groupId>
45+
<artifactId>jackson-databind</artifactId>
46+
</dependency>
47+
48+
</dependencies>
49+
50+
<organization>
51+
<url>https://www.fugerit.org</url>
52+
<name>Fugerit</name>
53+
</organization>
54+
55+
<url>https://www.fugerit.org/perm/venus/</url>
56+
57+
<profiles>
58+
59+
<profile>
60+
<id>full</id>
61+
<build>
62+
<plugins>
63+
<plugin>
64+
<groupId>org.apache.maven.plugins</groupId>
65+
<artifactId>maven-source-plugin</artifactId>
66+
<executions>
67+
<execution>
68+
<id>attach-sources</id>
69+
<goals>
70+
<goal>jar</goal>
71+
</goals>
72+
</execution>
73+
</executions>
74+
</plugin>
75+
<plugin>
76+
<groupId>org.apache.maven.plugins</groupId>
77+
<artifactId>maven-javadoc-plugin</artifactId>
78+
<configuration>
79+
<stylesheetfile>src/main/javadoc/stylesheet.css</stylesheetfile>
80+
</configuration>
81+
<executions>
82+
<execution>
83+
<id>attach-javadocs</id>
84+
<goals>
85+
<goal>jar</goal>
86+
</goals>
87+
</execution>
88+
</executions>
89+
</plugin>
90+
</plugins>
91+
</build>
92+
</profile>
93+
94+
</profiles>
95+
96+
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.fugerit.java.doc.json.parse;
2+
3+
import java.io.Reader;
4+
5+
import org.fugerit.java.doc.base.model.DocBase;
6+
7+
public class DocJsonFacade {
8+
9+
public static DocBase parse( Reader is ) throws Exception {
10+
DocJsonParser parser = new DocJsonParser();
11+
return parser.parse( is );
12+
}
13+
14+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.fugerit.java.doc.json.parse;
2+
3+
import java.io.Reader;
4+
5+
import org.fugerit.java.doc.base.facade.DocFacadeSource;
6+
import org.fugerit.java.doc.base.model.DocBase;
7+
import org.fugerit.java.doc.base.parser.AbstractDocParser;
8+
import org.fugerit.java.doc.base.parser.DocValidationResult;
9+
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
12+
public class DocJsonParser extends AbstractDocParser {
13+
14+
public DocJsonParser() {
15+
super( DocFacadeSource.SOURCE_TYPE_JSON );
16+
}
17+
18+
@Override
19+
protected DocValidationResult validateWorker(Reader reader) throws Exception {
20+
return DocValidationResult.newDefaultNotSupportedResult();
21+
}
22+
23+
@Override
24+
protected DocBase parseWorker(Reader reader) throws Exception {
25+
DocObjectMapperHelper helper = new DocObjectMapperHelper( new ObjectMapper() );
26+
return helper.parse(reader);
27+
}
28+
29+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package org.fugerit.java.doc.json.parse;
2+
3+
import java.io.Reader;
4+
import java.util.Iterator;
5+
6+
import javax.xml.parsers.DocumentBuilder;
7+
import javax.xml.parsers.DocumentBuilderFactory;
8+
9+
import org.fugerit.java.core.cfg.ConfigException;
10+
import org.fugerit.java.doc.base.facade.DocFacade;
11+
import org.w3c.dom.Document;
12+
import org.w3c.dom.Element;
13+
14+
import com.fasterxml.jackson.databind.JsonNode;
15+
import com.fasterxml.jackson.databind.ObjectMapper;
16+
17+
public class DocJsonToXml {
18+
19+
public DocJsonToXml() {
20+
this( new ObjectMapper() );
21+
}
22+
23+
public DocJsonToXml(ObjectMapper mapper) {
24+
super();
25+
this.mapper = mapper;
26+
}
27+
28+
private ObjectMapper mapper;
29+
30+
private Element create( Document doc, Element parent, JsonNode current ) throws Exception {
31+
Element tag = null;
32+
JsonNode tagNode = current.get( DocObjectMapperHelper.PROPERTY_TAG );
33+
if ( tagNode == null ) {
34+
throw new ConfigException( "Tag node is null : "+DocObjectMapperHelper.PROPERTY_TAG );
35+
} else {
36+
String tagName = tagNode.asText();
37+
tag = doc.createElement( tagName );
38+
if ( parent != null ) {
39+
parent.appendChild( tag );
40+
}
41+
JsonNode textNode = current.get( DocObjectMapperHelper.PROPERTY_TEXT );
42+
if ( textNode != null ) {
43+
tag.appendChild( doc.createTextNode( textNode.asText() ) );
44+
}
45+
JsonNode elementsNode = current.get( DocObjectMapperHelper.PROPERTY_ELEMENTS );
46+
if ( elementsNode != null ) {
47+
if ( elementsNode.isArray() ) {
48+
Iterator<JsonNode> itElements = elementsNode.elements();
49+
while ( itElements.hasNext() ) {
50+
JsonNode currentElement = itElements.next();
51+
this.create(doc, tag, currentElement);
52+
}
53+
} else {
54+
throw new ConfigException( "Property must be an array : "+elementsNode );
55+
}
56+
}
57+
Iterator<String> itNames = current.fieldNames();
58+
while ( itNames.hasNext() ) {
59+
String currentName = itNames.next();
60+
if ( !DocObjectMapperHelper.isSpecialProperty( currentName ) ) {
61+
tag.setAttribute( currentName , current.get( currentName ).asText() );
62+
}
63+
}
64+
}
65+
return tag;
66+
}
67+
68+
public Element convertToElement( Reader jsonReader ) throws ConfigException {
69+
Element root = null;
70+
try {
71+
JsonNode node = this.mapper.readTree( jsonReader );
72+
root = this.convert(node);
73+
} catch (Exception e) {
74+
throw new ConfigException( "Errore converting json to xml : "+e, e );
75+
}
76+
return root;
77+
}
78+
79+
public Element convert( JsonNode json ) throws ConfigException {
80+
Element root = null;
81+
try {
82+
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
83+
dbf.setNamespaceAware( true );
84+
dbf.setValidating( false );
85+
DocumentBuilder builder = dbf.newDocumentBuilder();
86+
Document doc = builder.newDocument();
87+
root = this.create(doc, null, json);
88+
root.setAttribute( "xmlns" , DocFacade.SYSTEM_ID );
89+
root.setAttribute( "xmlns:xsi" , "http://www.w3.org/2001/XMLSchema-instance" );
90+
String xsdVwersion = DocObjectMapperHelper.findVersion(json, DocFacade.CURRENT_VERSION) ;
91+
root.setAttribute( "xsi:schemaLocation" , "http://javacoredoc.fugerit.org https://www.fugerit.org/data/java/doc/xsd/doc-"+xsdVwersion+".xsd" );
92+
} catch (Exception e) {
93+
throw new ConfigException( "Conversion error : "+e, e );
94+
}
95+
return root;
96+
97+
}
98+
99+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package org.fugerit.java.doc.json.parse;
2+
3+
import java.io.Reader;
4+
import java.util.HashSet;
5+
import java.util.Iterator;
6+
import java.util.Properties;
7+
import java.util.Set;
8+
9+
import org.fugerit.java.core.lang.helpers.StringUtils;
10+
import org.fugerit.java.doc.base.facade.DocFacade;
11+
import org.fugerit.java.doc.base.model.DocBase;
12+
import org.fugerit.java.doc.base.parser.DocParserContext;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
16+
import com.fasterxml.jackson.databind.JsonNode;
17+
import com.fasterxml.jackson.databind.ObjectMapper;
18+
19+
public class DocObjectMapperHelper {
20+
21+
public DocObjectMapperHelper(ObjectMapper mapper) {
22+
super();
23+
this.mapper = mapper;
24+
}
25+
26+
private ObjectMapper mapper;
27+
28+
public static final String PROPERTY_TAG = "_t";
29+
30+
public static final String PROPERTY_TEXT = "_v";
31+
32+
public static final String PROPERTY_ELEMENTS = "_e";
33+
34+
public static final String PROPERTY_XSD_VERSION = "xsd-version";
35+
36+
private final static Logger logger = LoggerFactory.getLogger( DocObjectMapperHelper.class );
37+
38+
private final static Set<String> SPECIAL_PROPERTY_NAMES = new HashSet<>();
39+
static {
40+
SPECIAL_PROPERTY_NAMES.add( PROPERTY_TAG );
41+
SPECIAL_PROPERTY_NAMES.add( PROPERTY_TEXT );
42+
SPECIAL_PROPERTY_NAMES.add( PROPERTY_ELEMENTS );
43+
}
44+
45+
public static boolean isSpecialProperty( String propertyName ) {
46+
return SPECIAL_PROPERTY_NAMES.contains(propertyName);
47+
}
48+
49+
public static String findVersion( JsonNode root, String def ) {
50+
String res = def;
51+
JsonNode xsdVersion = root.get( PROPERTY_XSD_VERSION );
52+
if ( xsdVersion != null ) {
53+
res = xsdVersion.asText();
54+
}
55+
return res;
56+
}
57+
58+
private void handleElement( JsonNode node, DocParserContext context ) {
59+
Iterator<String> fieldsNames = node.fieldNames();
60+
Properties props = new Properties();
61+
String qName = null;
62+
String text = null;
63+
Iterator<JsonNode> elements = null;
64+
while ( fieldsNames.hasNext() ) {
65+
String currentName = fieldsNames.next();
66+
JsonNode currentValue = node.get( currentName );
67+
if ( PROPERTY_TEXT.equalsIgnoreCase( currentName ) ) {
68+
text = currentValue.asText();
69+
} else if ( PROPERTY_TAG.equalsIgnoreCase( currentName ) ) {
70+
qName = currentValue.asText();
71+
} else if ( PROPERTY_ELEMENTS.equalsIgnoreCase( currentName ) ) {
72+
elements = currentValue.elements();
73+
} else {
74+
props.setProperty( currentName , currentValue.asText() );
75+
}
76+
}
77+
context.handleStartElement(qName, props);
78+
if ( StringUtils.isNotEmpty( text ) ) {
79+
context.handleText(text);
80+
}
81+
if ( elements != null ) {
82+
while ( elements.hasNext() ) {
83+
this.handleElement( elements.next() , context );
84+
}
85+
}
86+
context.handleEndElement(qName);
87+
}
88+
89+
90+
public DocBase parse(Reader reader) throws Exception {
91+
DocParserContext context = new DocParserContext();
92+
context.startDocument();
93+
JsonNode root = this.mapper.readTree( reader );
94+
this.handleElement(root, context);
95+
context.endDocument();
96+
logger.debug( "Parse done!" );
97+
DocBase docBase = context.getDocBase();
98+
docBase.setXsdVersion( findVersion(root, DocFacade.CURRENT_VERSION) );
99+
return docBase;
100+
}
101+
102+
}

0 commit comments

Comments
 (0)