package org.araqne.logdb.cep.query;
import java.util.Iterator;
import java.util.List;
import org.araqne.logdb.QueryContext;
import org.araqne.logdb.QueryParseException;
import org.araqne.logdb.Row;
import org.araqne.logdb.cep.EventContextService;
import org.araqne.logdb.cep.EventContextStorage;
import org.araqne.logdb.cep.EventKey;
import org.araqne.logdb.query.expr.Expression;
public class EvtCtxCntFunction implements Expression {
private EventContextStorage storage;
private Expression topicExpr;
public EvtCtxCntFunction(QueryContext ctx, List<Expression> exprs, EventContextService eventContextService) {
this.storage = eventContextService.getDefaultStorage();
if (exprs.size() != 1)
throw new QueryParseException("invalid-evtctxcnt-arguments", -1, "argument-count-mismatch");
topicExpr = exprs.get(0);
}
@Override
public Object eval(Row row) {
Object o = topicExpr.eval(row);
String topic = null;
if (o != null)
topic = o.toString();
Iterator<EventKey> itr = storage.getContextKeys(topic);
int cnt = 0;
while (itr.hasNext()) {
cnt++;
itr.next();
}
return cnt;
}
@Override
public String toString() {
return "evtctxcnt(" + topicExpr + ")";
}
}