Skip to content

Commit 1251f9f

Browse files
committed
Merge branch 'develop'
2 parents e5a9ef2 + 86be456 commit 1251f9f

File tree

74 files changed

+32812
-257
lines changed

Some content is hidden

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

74 files changed

+32812
-257
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ There are five kinds of components (each components README.md contains module st
4242
* [Doc type validation (fj-doc-val)](fj-doc-val/README.md) - simple utilities for validating file type.
4343

4444
### 5. Tutorial :
45-
* [Playgroundt (fj-doc-playground-quarkus)](fj-doc-playground-quarkus/README.md) [since 0.7.0]
45+
* [Playground (fj-doc-playground-quarkus)](fj-doc-playground-quarkus/README.md) [since 0.7.0]
4646
* [Samples and Quickstart (fj-doc-sample)](fj-doc-sample/README.md)
4747

4848
### 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.7.0",
5-
"date" : "29/12/2022",
4+
"version" : "0.7.1",
5+
"date" : "02/01/2023",
66
"organization" : {
77
"name" : "Fugerit Org",
88
"url" : "https://www.fugerit.org"

docgen/release-notes.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
0.7.0 (2022-12-29)
1+
0.7.1 (2023-01-02)
2+
------------------
3+
+ Added conversion utility from json/yaml to xml
4+
+ Added xml to [json/yaml conversion conventions](https://github.com/fugerit-org/fj-doc/tree/main/fj-doc-base-json/xml_conversion.md)
5+
+ More functionalities in playground
6+
+ Upgrade playground to quarkus 3.0.0.Alpha2
7+
8+
0.7.0 (2022-12-29)
29
------------------
310
+ 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)
411
+ 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)

fj-doc-base-json/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,10 @@ Add the option to use a json as document generator instead of standard xml sourc
99

1010
*Status* :
1111
All basic features are implemented (json parsing, conversion from and to xml)
12+
13+
*Doc Json format*
14+
The xml and json format have inherent differences. this is why is important to read the [conversion conventions used](xml_conversion.md)
15+
16+
Examples :
17+
* [sample json doc](src/test/resources/sample/doc_test_01.json)
18+
* [sample xml doc](src/test/resources/sample/doc_test_01.xml)

fj-doc-base-json/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-doc</artifactId>
10-
<version>0.7.0</version>
10+
<version>0.7-SNAPSHOT</version>
1111
</parent>
1212

1313
<name>fj-doc-base-json</name>

fj-doc-base-json/src/main/java/org/fugerit/java/doc/json/parse/DocJsonToXml.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package org.fugerit.java.doc.json.parse;
22

33
import java.io.Reader;
4+
import java.io.Writer;
45
import java.util.Iterator;
56

67
import javax.xml.parsers.DocumentBuilder;
78
import javax.xml.parsers.DocumentBuilderFactory;
89

910
import org.fugerit.java.core.cfg.ConfigException;
11+
import org.fugerit.java.core.xml.dom.DOMIO;
1012
import org.fugerit.java.doc.base.facade.DocFacade;
13+
import org.fugerit.java.doc.base.parser.DocParserContext;
1114
import org.w3c.dom.Document;
1215
import org.w3c.dom.Element;
1316

@@ -65,6 +68,15 @@ private Element create( Document doc, Element parent, JsonNode current ) throws
6568
return tag;
6669
}
6770

71+
public void writerAsXml( Reader jsonReader, Writer writer ) throws ConfigException {
72+
try {
73+
Element root = this.convertToElement(jsonReader);
74+
DOMIO.writeDOMIndent( root , writer );
75+
} catch (Exception e) {
76+
throw new ConfigException( "Errore converting json to xml : "+e, e );
77+
}
78+
}
79+
6880
public Element convertToElement( Reader jsonReader ) throws ConfigException {
6981
Element root = null;
7082
try {
@@ -87,8 +99,8 @@ public Element convert( JsonNode json ) throws ConfigException {
8799
root = this.create(doc, null, json);
88100
root.setAttribute( "xmlns" , DocFacade.SYSTEM_ID );
89101
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" );
102+
String xsdVersion = DocObjectMapperHelper.findVersion(json, DocFacade.CURRENT_VERSION) ;
103+
root.setAttribute( "xsi:schemaLocation" , DocParserContext.createXsdVersionXmlns(xsdVersion) );
92104
} catch (Exception e) {
93105
throw new ConfigException( "Conversion error : "+e, e );
94106
}

fj-doc-base-json/src/main/java/org/fugerit/java/doc/json/parse/DocObjectMapperHelper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public DocObjectMapperHelper(ObjectMapper mapper) {
4040
SPECIAL_PROPERTY_NAMES.add( PROPERTY_TAG );
4141
SPECIAL_PROPERTY_NAMES.add( PROPERTY_TEXT );
4242
SPECIAL_PROPERTY_NAMES.add( PROPERTY_ELEMENTS );
43+
SPECIAL_PROPERTY_NAMES.add( PROPERTY_XSD_VERSION );
4344
}
4445

4546
public static boolean isSpecialProperty( String propertyName ) {
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package org.fugerit.java.doc.json.parse;
2+
3+
import java.io.Reader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
import java.util.Properties;
7+
8+
import org.fugerit.java.core.cfg.ConfigException;
9+
import org.fugerit.java.core.lang.helpers.StringUtils;
10+
import org.fugerit.java.core.xml.dom.DOMIO;
11+
import org.fugerit.java.core.xml.dom.DOMUtils;
12+
import org.w3c.dom.Document;
13+
import org.w3c.dom.Element;
14+
import org.w3c.dom.Node;
15+
import org.w3c.dom.NodeList;
16+
import org.w3c.dom.Text;
17+
18+
import com.fasterxml.jackson.databind.JsonNode;
19+
import com.fasterxml.jackson.databind.ObjectMapper;
20+
import com.fasterxml.jackson.databind.node.ArrayNode;
21+
import com.fasterxml.jackson.databind.node.ObjectNode;
22+
23+
public class DocXmlToJson {
24+
25+
public DocXmlToJson() {
26+
this( new ObjectMapper() );
27+
}
28+
29+
public DocXmlToJson(ObjectMapper mapper) {
30+
super();
31+
this.mapper = mapper;
32+
}
33+
34+
private ObjectMapper mapper;
35+
36+
private ObjectNode create( Element currentTag, ObjectNode currentNode ) throws Exception {
37+
// mapping normal properties
38+
Properties props = DOMUtils.attributesToProperties( currentTag );
39+
for ( Object k : props.keySet() ) {
40+
String key = String.valueOf( k );;
41+
currentNode.put( key , props.getProperty( key ));
42+
}
43+
// adding special properties
44+
currentNode.put( DocObjectMapperHelper.PROPERTY_TAG , currentTag.getTagName() );
45+
if ( currentTag.hasChildNodes() ) {
46+
NodeList list = currentTag.getChildNodes();
47+
List<ObjectNode> kids = new ArrayList<>();
48+
StringBuilder textBuffer = new StringBuilder();
49+
for ( int k=0; k<list.getLength(); k++ ) {
50+
Node currentTagChild = list.item( k );
51+
if ( currentTagChild instanceof Element ) {
52+
kids.add( this.create((Element)currentTagChild, this.mapper.createObjectNode()) );
53+
} else if ( currentTagChild instanceof Text ) {
54+
textBuffer.append( ((Text)currentTagChild).getTextContent() );
55+
}
56+
}
57+
if ( !kids.isEmpty() ) {
58+
ArrayNode kidsNode = this.mapper.createArrayNode();
59+
for ( ObjectNode currentKid : kids ) {
60+
kidsNode.add( currentKid );
61+
}
62+
currentNode.set( DocObjectMapperHelper.PROPERTY_ELEMENTS, kidsNode );
63+
}
64+
String text = textBuffer.toString();
65+
if ( StringUtils.isNotEmpty( text ) ) {
66+
currentNode.put( DocObjectMapperHelper.PROPERTY_TEXT, text );
67+
}
68+
}
69+
return currentNode;
70+
}
71+
72+
public JsonNode convertToJsonNode( Reader xml ) throws ConfigException {
73+
JsonNode tree;
74+
try {
75+
Document doc = DOMIO.loadDOMDoc( xml );
76+
Element root = doc.getDocumentElement();
77+
tree = this.convert( root );
78+
} catch (Exception e) {
79+
throw new ConfigException( "Errore converting xml to json node : "+e, e );
80+
}
81+
return tree;
82+
}
83+
84+
public JsonNode convert( Element root ) throws ConfigException {
85+
JsonNode tree = null;
86+
try {
87+
tree = this.create( root, this.mapper.createObjectNode() );
88+
} catch (Exception e) {
89+
throw new ConfigException( "Conversion error : "+e, e );
90+
}
91+
return tree;
92+
93+
}
94+
95+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package test.org.fugerit.java.doc.json.parse;
2+
3+
import static org.junit.Assert.fail;
4+
5+
import java.io.FileOutputStream;
6+
import java.io.InputStream;
7+
import java.io.InputStreamReader;
8+
9+
import org.fugerit.java.core.lang.helpers.ClassHelper;
10+
import org.fugerit.java.doc.json.parse.DocXmlToJson;
11+
import org.junit.Test;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
15+
import com.fasterxml.jackson.databind.JsonNode;
16+
17+
public class TestDocXmlToJson {
18+
19+
private static final Logger logger = LoggerFactory.getLogger( TestDocXmlToJson.class );
20+
21+
private void worker( String path ) {
22+
try ( InputStream is = ClassHelper.loadFromDefaultClassLoader( "sample/"+path+".xml" );
23+
FileOutputStream fos = new FileOutputStream( "target/"+path+".json" )) {
24+
DocXmlToJson converter = new DocXmlToJson();
25+
JsonNode tree = converter.convertToJsonNode( new InputStreamReader( is ) );
26+
logger.info( "xml -> {}", tree);
27+
fos.write( tree.toPrettyString().getBytes() );
28+
} catch (Exception e) {
29+
String message = "Error : "+e;
30+
logger.error( message, e );
31+
fail( message ) ;
32+
}
33+
}
34+
35+
@Test
36+
public void test01() {
37+
this.worker( "doc_test_01" );
38+
}
39+
40+
}

0 commit comments

Comments
 (0)