Skip to content

Commit 86be456

Browse files
committed
Added format conversion in playground
1 parent 857b573 commit 86be456

File tree

10 files changed

+436
-15
lines changed

10 files changed

+436
-15
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
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;
1113
import org.fugerit.java.doc.base.parser.DocParserContext;
1214
import org.w3c.dom.Document;
@@ -66,6 +68,15 @@ private Element create( Document doc, Element parent, JsonNode current ) throws
6668
return tag;
6769
}
6870

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+
6980
public Element convertToElement( Reader jsonReader ) throws ConfigException {
7081
Element root = null;
7182
try {

fj-doc-playground-quarkus/pom.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@
5656
<groupId>org.fugerit.java</groupId>
5757
<artifactId>fj-doc-base</artifactId>
5858
</dependency>
59+
<dependency>
60+
<groupId>org.fugerit.java</groupId>
61+
<artifactId>fj-doc-base-json</artifactId>
62+
</dependency>
63+
<dependency>
64+
<groupId>org.fugerit.java</groupId>
65+
<artifactId>fj-doc-base-yaml</artifactId>
66+
</dependency>
5967
<dependency>
6068
<groupId>org.fugerit.java</groupId>
6169
<artifactId>fj-doc-val</artifactId>
@@ -133,6 +141,25 @@
133141
</execution>
134142
</executions>
135143
</plugin>
144+
<plugin>
145+
<groupId>org.codehaus.mojo</groupId>
146+
<artifactId>buildnumber-maven-plugin</artifactId>
147+
<version>3.0.0</version>
148+
<executions>
149+
<execution>
150+
<configuration>
151+
<shortRevisionLength>10</shortRevisionLength>
152+
<attach>true</attach>
153+
<!--make it available for jar/war classpath resource -->
154+
<addOutputDirectoryToResources>true</addOutputDirectoryToResources>
155+
</configuration>
156+
<phase>generate-resources</phase>
157+
<goals>
158+
<goal>create-metadata</goal>
159+
</goals>
160+
</execution>
161+
</executions>
162+
</plugin>
136163
</plugins>
137164
</build>
138165
<profiles>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.fugerit.java.doc.playground.convert;
2+
3+
public class ConvertInput {
4+
5+
private String inputFormat;
6+
private String outputFormat;
7+
private String docContent;
8+
9+
public String getInputFormat() {
10+
return inputFormat;
11+
}
12+
public void setInputFormat(String inputFormat) {
13+
this.inputFormat = inputFormat;
14+
}
15+
public String getOutputFormat() {
16+
return outputFormat;
17+
}
18+
public void setOutputFormat(String outputFormat) {
19+
this.outputFormat = outputFormat;
20+
}
21+
public String getDocContent() {
22+
return docContent;
23+
}
24+
public void setDocContent(String docContent) {
25+
this.docContent = docContent;
26+
}
27+
28+
29+
30+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.fugerit.java.doc.playground.convert;
2+
3+
public class ConvertOutput {
4+
5+
private String docOutput;
6+
7+
private String message;
8+
9+
public String getDocOutput() {
10+
return docOutput;
11+
}
12+
13+
public void setDocOutput(String docOutput) {
14+
this.docOutput = docOutput;
15+
}
16+
17+
public String getMessage() {
18+
return message;
19+
}
20+
21+
public void setMessage(String message) {
22+
this.message = message;
23+
}
24+
25+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package org.fugerit.java.doc.playground.convert;
2+
3+
import java.io.StringReader;
4+
import java.io.StringWriter;
5+
6+
import org.fugerit.java.doc.json.parse.DocJsonToXml;
7+
import org.fugerit.java.doc.json.parse.DocXmlToJson;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import com.fasterxml.jackson.databind.JsonNode;
12+
import com.fasterxml.jackson.databind.ObjectMapper;
13+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
14+
15+
import jakarta.enterprise.context.ApplicationScoped;
16+
import jakarta.ws.rs.Consumes;
17+
import jakarta.ws.rs.POST;
18+
import jakarta.ws.rs.Path;
19+
import jakarta.ws.rs.Produces;
20+
import jakarta.ws.rs.core.MediaType;
21+
import jakarta.ws.rs.core.Response;
22+
23+
@ApplicationScoped
24+
@Path("/convert")
25+
public class ConvertRest {
26+
27+
private final static Logger logger = LoggerFactory.getLogger(ConvertRest.class);
28+
29+
private final static String FORMAT_XML = "XML";
30+
private final static String FORMAT_JSON = "JSON";
31+
private final static String FORMAT_YAML = "YAML";
32+
33+
@POST
34+
@Consumes(MediaType.APPLICATION_JSON)
35+
@Produces(MediaType.APPLICATION_JSON)
36+
@Path("/doc")
37+
public Response convertDoc( ConvertInput input ) {
38+
Response res = Response.status(Response.Status.BAD_REQUEST).build();
39+
try {
40+
ConvertOutput output = new ConvertOutput();
41+
String inputFormat = input.getInputFormat();
42+
String outputFormat = input.getOutputFormat();
43+
String docContent = input.getDocContent();
44+
String docOutput = null;
45+
logger.info( "format input : {} -> output : {}", inputFormat, outputFormat );
46+
ObjectMapper mapper = new ObjectMapper();
47+
ObjectMapper yamlMapper = new ObjectMapper( new YAMLFactory() );
48+
if ( FORMAT_XML.equalsIgnoreCase( inputFormat ) ) {
49+
if ( FORMAT_JSON.equalsIgnoreCase( outputFormat ) ) {
50+
DocXmlToJson helper = new DocXmlToJson();
51+
try ( StringReader reader = new StringReader( docContent ) ) {
52+
JsonNode node = helper.convertToJsonNode( reader );
53+
docOutput = node.toPrettyString();
54+
}
55+
} else if ( FORMAT_YAML.equalsIgnoreCase( outputFormat ) ) {
56+
DocXmlToJson helper = new DocXmlToJson( yamlMapper );
57+
try ( StringReader reader = new StringReader( docContent ) ) {
58+
JsonNode node = helper.convertToJsonNode( reader );
59+
docOutput = yamlMapper.writeValueAsString( node );
60+
}
61+
} else {
62+
output.setMessage( "Invalid output format : "+outputFormat );
63+
}
64+
} else if ( FORMAT_JSON.equalsIgnoreCase( inputFormat ) ) {
65+
if ( FORMAT_XML.equalsIgnoreCase( outputFormat ) ) {
66+
DocJsonToXml helper = new DocJsonToXml();
67+
try ( StringReader reader = new StringReader( docContent );
68+
StringWriter writer = new StringWriter() ) {
69+
helper.writerAsXml(reader, writer);
70+
docOutput = writer.toString();
71+
}
72+
} else if ( FORMAT_YAML.equalsIgnoreCase( outputFormat ) ) {
73+
try ( StringReader reader = new StringReader( docContent ) ) {
74+
JsonNode node = mapper.readTree( reader );
75+
docOutput = yamlMapper.writeValueAsString( node );
76+
}
77+
} else {
78+
output.setMessage( "Invalid output format : "+outputFormat );
79+
}
80+
} else if ( FORMAT_YAML.equalsIgnoreCase( inputFormat ) ) {
81+
if ( FORMAT_XML.equalsIgnoreCase( outputFormat ) ) {
82+
DocJsonToXml helper = new DocJsonToXml( yamlMapper );
83+
try ( StringReader reader = new StringReader( docContent );
84+
StringWriter writer = new StringWriter() ) {
85+
helper.writerAsXml(reader, writer);
86+
docOutput = writer.toString();
87+
}
88+
} else if ( FORMAT_JSON.equalsIgnoreCase( outputFormat ) ) {
89+
try ( StringReader reader = new StringReader( docContent ) ) {
90+
JsonNode node = yamlMapper.readTree( reader );
91+
docOutput = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( node );
92+
}
93+
} else {
94+
output.setMessage( "Invalid output format : "+outputFormat );
95+
}
96+
}
97+
if ( docOutput != null ) {
98+
output.setDocOutput(docOutput);
99+
res = Response.ok().entity( output ).build();
100+
} else {
101+
res = Response.status(Response.Status.BAD_REQUEST).entity( output ).build();
102+
}
103+
} catch (Exception e) {
104+
logger.info("Error : " + e, e);
105+
res = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
106+
}
107+
return res;
108+
}
109+
110+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.fugerit.java.doc.playground.meta;
2+
3+
import java.util.Properties;
4+
5+
import org.fugerit.java.core.util.PropsIO;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import jakarta.enterprise.context.ApplicationScoped;
10+
import jakarta.ws.rs.GET;
11+
import jakarta.ws.rs.Path;
12+
import jakarta.ws.rs.Produces;
13+
import jakarta.ws.rs.core.MediaType;
14+
import jakarta.ws.rs.core.Response;
15+
16+
@ApplicationScoped
17+
@Path("/meta")
18+
public class MetaRest {
19+
20+
private final static Logger logger = LoggerFactory.getLogger(MetaRest.class);
21+
22+
@GET
23+
@Produces(MediaType.APPLICATION_JSON)
24+
@Path("/version")
25+
public Response getVersion() {
26+
Response res = Response.status(Response.Status.BAD_REQUEST).build();
27+
try {
28+
Properties buildProps = PropsIO.loadFromClassLoader( "build.properties" );
29+
res = Response.ok().entity( buildProps ).build();
30+
} catch (Exception e) {
31+
logger.info("Error : " + e, e);
32+
res = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
33+
}
34+
return res;
35+
}
36+
37+
}

fj-doc-playground-quarkus/src/main/react/src/Playground.jsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import {
1010
} from "react-router-dom";
1111

1212
import Home from './playground/Home';
13+
import Version from './playground/Version';
1314
import DevValTestForm from './playground/DocValTestForm';
1415
import DocXmlEditor from './playground/DocXmlEditor';
16+
import DocConversion from './playground/DocConversion';
1517
import { Dialog, DialogTitle, Button } from "@material-ui/core";
1618

1719
const homepage = '/fj-doc-playground/home';
@@ -22,11 +24,7 @@ class Playground extends Component {
2224
super(props);
2325
this.handleOpenDialog = this.handleOpenDialog.bind(this);
2426
this.handleCloseDialog = this.handleCloseDialog.bind(this);
25-
this.setState(
26-
{
27-
dialogMessage: ''
28-
}
29-
);
27+
this.state = { dialogMessage: null }
3028
}
3129

3230
componentDidMount() {
@@ -64,17 +62,21 @@ class Playground extends Component {
6462
<Router>
6563
<div className="App">
6664

65+
<Version/>
66+
6767
<ListGroup>
6868
<ListGroup.Item><Link to={homepage}>Home</Link></ListGroup.Item>
6969
<ListGroup.Item><Link to={homepage + "/doc_type_validator"}>Doc Type Validator</Link></ListGroup.Item>
7070
<ListGroup.Item><Link to={homepage + "/doc_xml_editor"}>Doc Xml Editor</Link></ListGroup.Item>
71+
<ListGroup.Item><Link to={homepage + "/doc_conversion"}>Doc Conversion (XML/JSON/YAML)</Link></ListGroup.Item>
7172
</ListGroup>
7273

7374
{dialog}
7475

7576
<Routes>
7677
<Route path={homepage + "/doc_type_validator"} element={<DevValTestForm handleOpenDialog={this.handleOpenDialog} />} />
7778
<Route path={homepage + "/doc_xml_editor"} element={<DocXmlEditor handleOpenDialog={this.handleOpenDialog} />} />
79+
<Route path={homepage + "/doc_conversion"} element={<DocConversion handleOpenDialog={this.handleOpenDialog} />} />
7880
<Route path="*" element={<Home />} />
7981
</Routes>
8082

0 commit comments

Comments
 (0)