Search in sources :

Example 1 with AbstractEmitter

use of com.bluenimble.platform.json.AbstractEmitter in project serverless by bluenimble.

the class JavascriptEngine method write.

@Override
public void write(ApiConsumer consumer, ApiRequest request, final ApiResponse response, ApiOutput output, final ApiResource template, final JsonObject mediaSpec) throws TemplateEngineException {
    try {
        ScriptingEngine engine = api.space().feature(ScriptingEngine.class, ApiSpace.Features.Default, null);
        MapScriptContext vars = new MapScriptContext();
        vars.set(Json.getString(features, I18n, I18n), api.i18n(request.getLang()));
        vars.set(Json.getString(features, Request, Request), request.toJson());
        if (consumer != null) {
            vars.set(Json.getString(features, Consumer, Consumer), consumer.toJson());
        }
        JsonObject jOutput = null;
        if (output != null) {
            jOutput = output.data();
        }
        if (output != null) {
            vars.set(Json.getString(features, Output, Output), jOutput);
            vars.set(Json.getString(features, Meta, Meta), output.meta());
        }
        vars.set(Json.getString(features, Error, Error), response.getError());
        vars.set(Json.getString(features, Response, Response), response);
        JsonObject result;
        Object oResult = engine.eval(ScriptingEngine.Supported.Javascript, api, template, vars);
        if (oResult != null) {
            if (oResult instanceof JsonObject) {
                result = (JsonObject) oResult;
            } else if (oResult instanceof JsonArray) {
                result = new JsonObject();
                result.set(ApiOutput.Defaults.Items, oResult);
            } else {
                result = new JsonObject();
                result.set(Output, oResult);
            }
        } else {
            result = jOutput;
        }
        if (response.getError() != null) {
            result = response.getError();
        }
        boolean doNotWrite = Json.getBoolean(jOutput, DoNotWrite, false);
        if (!doNotWrite) {
            doNotWrite = Json.getBoolean(mediaSpec, DoNotWrite, false);
        }
        if (result != null && !doNotWrite) {
            response.flushHeaders();
            result.write(new AbstractEmitter() {

                @Override
                public JsonEmitter write(String chunk) {
                    try {
                        response.write(chunk);
                    } catch (IOException e) {
                        throw new RuntimeException(e.getMessage(), e);
                    }
                    return this;
                }
            });
        }
    } catch (Exception e) {
        throw new TemplateEngineException(e.getMessage(), e);
    }
}
Also used : AbstractEmitter(com.bluenimble.platform.json.AbstractEmitter) JsonObject(com.bluenimble.platform.json.JsonObject) IOException(java.io.IOException) IOException(java.io.IOException) TemplateEngineException(com.bluenimble.platform.api.impls.media.engines.TemplateEngineException) MapScriptContext(com.bluenimble.platform.scripting.MapScriptContext) JsonArray(com.bluenimble.platform.json.JsonArray) JsonEmitter(com.bluenimble.platform.json.JsonEmitter) JsonObject(com.bluenimble.platform.json.JsonObject) TemplateEngineException(com.bluenimble.platform.api.impls.media.engines.TemplateEngineException) ScriptingEngine(com.bluenimble.platform.scripting.ScriptingEngine)

Example 2 with AbstractEmitter

use of com.bluenimble.platform.json.AbstractEmitter in project serverless by bluenimble.

the class JsonWriter method write.

@Override
public void write(ApiOutput output, ApiResponse response) throws IOException {
    if (output == null) {
        response.write(Lang.EMTPY_OBJECT);
        return;
    }
    JsonObject json = output.data();
    if (json == null) {
        response.write(Lang.EMTPY_OBJECT);
        return;
    }
    json.write(new AbstractEmitter() {

        @Override
        public JsonEmitter write(String chunk) {
            try {
                response.write(chunk);
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
            return this;
        }
    });
}
Also used : AbstractEmitter(com.bluenimble.platform.json.AbstractEmitter) JsonEmitter(com.bluenimble.platform.json.JsonEmitter) JsonObject(com.bluenimble.platform.json.JsonObject) IOException(java.io.IOException)

Aggregations

AbstractEmitter (com.bluenimble.platform.json.AbstractEmitter)2 JsonEmitter (com.bluenimble.platform.json.JsonEmitter)2 JsonObject (com.bluenimble.platform.json.JsonObject)2 IOException (java.io.IOException)2 TemplateEngineException (com.bluenimble.platform.api.impls.media.engines.TemplateEngineException)1 JsonArray (com.bluenimble.platform.json.JsonArray)1 MapScriptContext (com.bluenimble.platform.scripting.MapScriptContext)1 ScriptingEngine (com.bluenimble.platform.scripting.ScriptingEngine)1