Skip to content

Commit 2a940c3

Browse files
committed
Added kts json map
1 parent 209bd5f commit 2a940c3

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

fj-doc-playground-quarkus/src/main/java/org/fugerit/java/doc/playground/doc/GenerateFacade.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.io.StringWriter;
77
import java.util.HashMap;
88
import java.util.Iterator;
9+
import java.util.LinkedHashMap;
910
import java.util.Map;
1011

1112
import org.fugerit.java.core.function.SafeFunction;
@@ -34,6 +35,8 @@
3435
import jakarta.enterprise.context.ApplicationScoped;
3536
import lombok.extern.slf4j.Slf4j;
3637

38+
import javax.script.Bindings;
39+
import javax.script.ScriptContext;
3740
import javax.script.ScriptEngine;
3841
import javax.script.ScriptEngineManager;
3942

@@ -104,14 +107,21 @@ private void handleFtlx( DocTypeHandler handler, String type, int sourceType, Re
104107
} );
105108
}
106109

107-
private void handleKts( DocTypeHandler handler, String type, Reader reader, ByteArrayOutputStream baos ) {
110+
private void handleKts( DocTypeHandler handler, String type, Reader reader, ByteArrayOutputStream baos, String ktsJsonData ) {
108111
SafeFunction.apply( () -> {
109112
ScriptEngineManager manager = new ScriptEngineManager();
110113
ScriptEngine engine = manager.getEngineByExtension( "kts" );
111-
Object obj = engine.eval( StreamIO.readString( reader ) );
112-
String xml = obj.toString();
113-
try ( StringReader xmlReader = new StringReader( xml) ) {
114-
this.doHandle(handler, type, DocFacadeSource.SOURCE_TYPE_XML, xmlReader, baos);
114+
Bindings bindings = engine.createBindings();
115+
ObjectMapper mapper = new ObjectMapper();
116+
try ( StringReader jsonReader = new StringReader(ktsJsonData) ) {
117+
LinkedHashMap data = mapper.readValue( jsonReader, LinkedHashMap.class );
118+
bindings.put( "data", data );
119+
engine.setBindings( bindings, ScriptContext.ENGINE_SCOPE );
120+
Object obj = engine.eval( StreamIO.readString( reader ) );
121+
String xml = obj.toString();
122+
try ( StringReader xmlReader = new StringReader( xml) ) {
123+
this.doHandle(handler, type, DocFacadeSource.SOURCE_TYPE_XML, xmlReader, baos);
124+
}
115125
}
116126
} );
117127
}
@@ -132,7 +142,7 @@ public byte[] generateHelper( GenerateInput input, DocTypeHandler handler) throw
132142
if ( InputFacade.FORMAT_FTLX.equalsIgnoreCase( input.getInputFormat() ) ) {
133143
this.handleFtlx(handler, type, sourceType, reader, baos, input.getFreemarkerJsonData());
134144
} else if ( InputFacade.FORMAT_KTS.equalsIgnoreCase( input.getInputFormat() ) ) {
135-
this.handleKts(handler, type, reader, baos);
145+
this.handleKts(handler, type, reader, baos, input.getFreemarkerJsonData());
136146
} else {
137147
this.doHandle(handler, type, sourceType, reader, baos);
138148
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,23 @@ class DocXmlEditor extends Component {
155155
if ( this.state.inputFormat != null ) {
156156
if ( this.state.inputFormat === 'KTS' ) {
157157
editorInFormat = 'kotlin'
158+
freemarkerJsonData = <Fragment>
159+
<p style={{paddingTop: "20px"}}>Json properties will be available in KTSas a map.</p>
160+
<p>For instance a json like {"{ \"docTitle\": \"My KTS Template Sample Doc Title\" }"}, can be accessed like {"$"}{"{docTitle}"} in template</p>
161+
<AceEditor
162+
mode="json"
163+
theme="xcode"
164+
name="DOC_JSON_EDITOR"
165+
editorProps={{ $blockScrolling: true }}
166+
enableBasicAutocompletion={true}
167+
enableLiveAutocompletion={true}
168+
enableSnippets={true}
169+
value={this.state.freemarkerJsonData}
170+
onChange={this.handleFreemarkerData}
171+
height='200px'
172+
width='100%'
173+
/>
174+
</Fragment>
158175
} else if ( this.state.inputFormat === 'FTLX' ) {
159176
editorInFormat = 'ftl'
160177
freemarkerJsonData = <Fragment>

0 commit comments

Comments
 (0)