Created
September 29, 2016 14:45
-
-
Save jongyoul/cdfda0aea92043592978f0e88ff29d02 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
protected Object jobRun() throws Throwable { | |
String replName = getRequiredReplName(); | |
Interpreter repl = getRepl(replName); | |
logger.info("run paragraph {} using {} " + repl, getId(), replName); | |
if (repl == null) { | |
logger.error("Can not find interpreter name " + repl); | |
throw new RuntimeException("Can not find interpreter for " + getRequiredReplName()); | |
} | |
if (this.noteHasUser() && this.noteHasInterpreters()) { | |
InterpreterSetting intp = getInterpreterSettingById(repl.getInterpreterGroup().getId()); | |
if (intp != null && | |
interpreterHasUser(intp) && | |
isUserAuthorizedToAccessInterpreter(intp.getOption()) == false) { | |
logger.error("{} has no permission for {} ", authenticationInfo.getUser(), repl); | |
return new InterpreterResult(Code.ERROR, authenticationInfo.getUser() + | |
" has no permission for " + getRequiredReplName()); | |
} | |
} | |
String script = getScriptBody(); | |
// inject form | |
if (repl.getFormType() == FormType.NATIVE) { | |
settings.clear(); | |
} else if (repl.getFormType() == FormType.SIMPLE) { | |
String scriptBody = getScriptBody(); | |
Map<String, Input> inputs = Input.extractSimpleQueryParam(scriptBody); // inputs will be built | |
// from script body | |
final AngularObjectRegistry angularRegistry = repl.getInterpreterGroup() | |
.getAngularObjectRegistry(); | |
scriptBody = extractVariablesFromAngularRegistry(scriptBody, inputs, angularRegistry); | |
settings.setForms(inputs); | |
script = Input.getSimpleQuery(settings.getParams(), scriptBody); | |
} | |
logger.debug("RUN : " + script); | |
try { | |
InterpreterContext context = getInterpreterContext(); | |
InterpreterContext.set(context); | |
InterpreterResult ret = repl.interpret(script, context); | |
if (Code.KEEP_PREVIOUS_RESULT == ret.code()) { | |
return getReturn(); | |
} | |
String message = ""; | |
context.out.flush(); | |
InterpreterResult.Type outputType = context.out.getType(); | |
byte[] interpreterOutput = context.out.toByteArray(); | |
if (interpreterOutput != null && interpreterOutput.length > 0) { | |
message = new String(interpreterOutput); | |
} | |
if (message.isEmpty()) { | |
return ret; | |
} else { | |
String interpreterResultMessage = ret.message(); | |
if (interpreterResultMessage != null && !interpreterResultMessage.isEmpty()) { | |
message += interpreterResultMessage; | |
return new InterpreterResult(ret.code(), ret.type(), message); | |
} else { | |
return new InterpreterResult(ret.code(), outputType, message); | |
} | |
} | |
} finally { | |
InterpreterContext.remove(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment