package org.araqne.logdb.cep.query; import java.util.List; import org.araqne.logdb.QueryContext; import org.araqne.logdb.QueryParseException; import org.araqne.logdb.Row; import org.araqne.logdb.cep.EventContext; import org.araqne.logdb.cep.EventContextService; import org.araqne.logdb.cep.EventContextStorage; import org.araqne.logdb.query.expr.Expression; public class EvtCtxGetVarFunction implements Expression { private Expression topicExpr; private Expression keyExpr; private Expression varNameExpr; private Expression hostExpr; private EventContextStorage storage; public EvtCtxGetVarFunction(QueryContext ctx, List<Expression> exprs, EventContextService eventContextService) { this.storage = eventContextService.getDefaultStorage(); if (exprs.size() != 3 && exprs.size() != 4) throw new QueryParseException("invalid-evtctxgetvar-arguments", -1, "argument-count-mismatch"); this.topicExpr = exprs.get(0); this.keyExpr = exprs.get(1); this.varNameExpr = exprs.get(2); if (exprs.size() == 4) this.hostExpr = exprs.get(3); } @Override public Object eval(Row row) { EventContext ctx = EvtCtxGetFunction.findContext(storage, topicExpr, keyExpr, hostExpr, row); if (ctx == null) return null; Object arg3 = varNameExpr.eval(row); if (arg3 == null) return null; return ctx.getVariable(arg3.toString()); } @Override public String toString() { return "evtctxgetvar(" + topicExpr + ", " + keyExpr + ", " + varNameExpr + ", " + hostExpr + ")"; } }