Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* The MIT License (MIT)
*
* Copyright (c) 2011-2016 Incapture Technologies LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package rapture.script.reflex;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.CommonTreeNodeStream;
import org.apache.log4j.Logger;
import rapture.audit.AuditLog;
import rapture.common.CallingContext;
import rapture.common.RaptureScript;
import rapture.common.RaptureURI;
import rapture.common.ScriptResult;
import rapture.common.api.ScriptingApi;
import rapture.common.exception.RaptureException;
import rapture.common.exception.RaptureExceptionFactory;
import rapture.common.impl.jackson.JacksonUtil;
import rapture.config.ConfigLoader;
import rapture.index.IndexHandler;
import rapture.kernel.Kernel;
import rapture.kernel.pipeline.PipelineReflexSuspendHandler;
import rapture.kernel.script.KernelScript;
import rapture.log.MDCService;
import rapture.script.IActivityInfo;
import rapture.script.IRaptureScript;
import rapture.script.RaptureDataContext;
import rapture.script.ScriptRunInfoCollector;
import reflex.AddingOutputReflexHandler;
import reflex.DummyReflexOutputHandler;
import reflex.IReflexHandler;
import reflex.IReflexOutputHandler;
import reflex.ReflexException;
import reflex.ReflexExecutor;
import reflex.ReflexLexer;
import reflex.ReflexParser;
import reflex.ReflexTreeWalker;
import reflex.Scope;
import reflex.debug.NullDebugger;
import reflex.node.ReflexNode;
import reflex.value.ReflexValue;
import reflex.value.internal.ReflexNullValue;
/**
* Provides an execution context for Rapture Reflex Scripts
*
* @author amkimian
*/
public class ReflexRaptureScript implements IRaptureScript {
private static Logger log = Logger.getLogger(ReflexRaptureScript.class);
private static final String EXCEPTION = "exception";
private String auditLogUri = null;
public void setAuditLogUri(String uri) {
auditLogUri = uri;
}
private void addContextScope(ReflexTreeWalker walker, CallingContext context) {
walker.currentScope.assign("_ctx", context == null ? new ReflexNullValue() : new ReflexValue(context));
KernelScript kh = new KernelScript();
kh.setCallingContext(context);
walker.getReflexHandler().setApi(kh);
// walker.currentScope.assign("_rk", new ReflexValue(kh));
walker.currentScope.assign("_cfg", new ReflexValue(ConfigLoader.getConf()));
// addStandard(walker, context, kh);
}
private void addObjectExtra(ReflexTreeWalker walker, Map extra) {
walker.currentScope.assign("_params", new ReflexValue(extra));
}
private ReflexTreeWalker getParserWithStandardContext(CallingContext context, String script, Map extra) throws RecognitionException {
ReflexTreeWalker walker = getStandardWalker(context, script);
if (extra != null && !extra.isEmpty()) {
addObjectExtra(walker, extra);
}
addContextScope(walker, context);
return walker;
}
public ReflexParser getParser(CallingContext ctx, String script) throws RecognitionException {
ReflexLexer lexer = new ReflexLexer();
lexer.dataHandler = new ReflexIncludeHelper(ctx);
lexer.setCharStream(new ANTLRStringStream(script));
CommonTokenStream tokens = new CommonTokenStream(lexer);
ReflexParser parser = new ReflexParser(tokens);
parser.parse();
return parser;
}
private ReflexTreeWalker getStandardWalker(CallingContext ctx, String script) throws RecognitionException {
ReflexLexer lexer = new ReflexLexer();
lexer.dataHandler = new ReflexIncludeHelper(ctx);
lexer.setCharStream(new ANTLRStringStream(script));
CommonTokenStream tokens = new CommonTokenStream(lexer);
ReflexParser parser = new ReflexParser(tokens);
CommonTree tree;
tree = (CommonTree) parser.parse().getTree();
CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree);
ReflexTreeWalker walker = new ReflexTreeWalker(nodes, parser.languageRegistry);
walker.setReflexHandler(new AddingOutputReflexHandler());
walker.getReflexHandler().setOutputHandler(new SimpleCollectingOutputHandler());
walker.getReflexHandler().setOutputHandler(new DummyReflexOutputHandler());
walker.getReflexHandler().setDataHandler(new ReflexDataHelper(ctx));
walker.getReflexHandler().setIOHandler(new BlobOnlyIOHandler());
return walker;
}
@Override
public boolean runFilter(CallingContext context, RaptureScript script, RaptureDataContext data, Map parameters) {
// A filter is basically a program that returns true or false. No return
// is equivalent to false
try {
ReflexTreeWalker walker = getParserWithStandardContext(context, script.getScript(), parameters);
ReflexNode res = walker.walk();
return res.evaluateWithoutScope(new NullDebugger()).asBoolean();
} catch (RecognitionException e) {
String message = getErrorInfo(e.getMessage(), script, e.line, e.charPositionInLine);
Kernel.writeAuditEntry(EXCEPTION, 2, message);
throw new ReflexException(e.line, message, e);
}
}
@Override
public void runIndexEntry(CallingContext context, RaptureScript script, IndexHandler indexHandler, RaptureDataContext data) {
try {
ReflexTreeWalker walker = getParserWithStandardContext(context, script.getScript(), null);
walker.currentScope.assign("_data", new ReflexValue(JacksonUtil.getHashFromObject(data)));
walker.currentScope.assign("_index", new ReflexValue(indexHandler));
ReflexNode res = walker.walk();
res.evaluateWithoutScope(new NullDebugger());
} catch (RecognitionException e) {
String message = getErrorInfo(e.getMessage(), script, e.line, e.charPositionInLine);
Kernel.writeAuditEntry(EXCEPTION, 2, message);
throw new ReflexException(e.line, message, e);
}
}
@Override
public List