use of com.bluenimble.platform.scripting.MapScriptContext 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);
}
}
Aggregations