Skip to content

Commit 857b573

Browse files
committed
0.7.1 (2023-01-02)
+ Added conversion utility from json/yaml to xml + Added xml to [json/yaml conversion conventions](https://github.com/fugerit-org/fj-doc/tree/main/fj-doc-base-json/xml_conversion.md) + More functionalities in playground + Upgrade playground to quarkus 3.0.0.Alpha2
1 parent ee29e59 commit 857b573

File tree

16 files changed

+548
-196
lines changed

16 files changed

+548
-196
lines changed

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: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
0.7.1 (202X-XX-XX)
1+
0.7.1 (2023-01-02)
22
------------------
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
36
+ Upgrade playground to quarkus 3.0.0.Alpha2
47

58
0.7.0 (2022-12-29)

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/src/main/java/org/fugerit/java/doc/json/parse/DocJsonToXml.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import org.fugerit.java.core.cfg.ConfigException;
1010
import org.fugerit.java.doc.base.facade.DocFacade;
11+
import org.fugerit.java.doc.base.parser.DocParserContext;
1112
import org.w3c.dom.Document;
1213
import org.w3c.dom.Element;
1314

@@ -87,8 +88,8 @@ public Element convert( JsonNode json ) throws ConfigException {
8788
root = this.create(doc, null, json);
8889
root.setAttribute( "xmlns" , DocFacade.SYSTEM_ID );
8990
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" );
91+
String xsdVersion = DocObjectMapperHelper.findVersion(json, DocFacade.CURRENT_VERSION) ;
92+
root.setAttribute( "xsi:schemaLocation" , DocParserContext.createXsdVersionXmlns(xsdVersion) );
9293
} catch (Exception e) {
9394
throw new ConfigException( "Conversion error : "+e, e );
9495
}

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)