package com.nominanuda.rhino.lang; import java.io.IOException; import java.util.Map; import java.util.function.Function; import org.mozilla.javascript.RhinoEmbedding; import com.nominanuda.rhino.IScriptSource; import com.nominanuda.rhino.IScriptSource.IScript; import com.nominanuda.rhino.SimpleScriptSource; import com.nominanuda.zen.obj.Stru; import com.nominanuda.zen.stereotype.Disposable; public class Json2Script2Json implements Function<Stru, Stru>, Disposable { public static class Factory implements com.nominanuda.zen.stereotype.Factory<Json2Script2Json> { private final IScriptSource scriptSource; public Factory(IScriptSource scriptSource) { this.scriptSource = scriptSource; } public Factory(String file, Map<String, Object> objs, RhinoEmbedding embedding) throws IOException { SimpleScriptSource scriptSource = new SimpleScriptSource(file); scriptSource.setRhinoEmbedding(embedding); scriptSource.setHostObjects(objs); this.scriptSource = scriptSource; } public Factory(String file, RhinoEmbedding embedding) throws IOException { this(file, null, embedding); } @Override public Json2Script2Json get() { try { return new Json2Script2Json(scriptSource); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("could not istantiate scriptSource, error: " + e.getMessage()); } } } private final IScript script; private String function = "json2json"; public Json2Script2Json(IScriptSource scriptSource) throws Exception { script = scriptSource.open(); } public Json2Script2Json(String file, Map<String, Object> objs, RhinoEmbedding embedding) throws Exception { SimpleScriptSource scriptSource = new SimpleScriptSource(file); scriptSource.setRhinoEmbedding(embedding); scriptSource.setHostObjects(objs); script = scriptSource.open(); } public Json2Script2Json(String file, RhinoEmbedding embedding) throws Exception { this(file, null, embedding); } @Override public Stru apply(Stru json) { return script.callForDataStruct(function, json); } @Override public void dispose() { script.close(); } /* setters */ public void setFunction(String function) { this.function = function; } }