package org.araqne.logdb.cep.query;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Validate;
import org.araqne.logdb.FunctionFactory;
import org.araqne.logdb.FunctionRegistry;
import org.araqne.logdb.QueryContext;
import org.araqne.logdb.QueryParseException;
import org.araqne.logdb.cep.EventContextService;
import org.araqne.logdb.query.expr.Expression;
@Component(name = "cep-function-factory")
public class EvtCtxFunctionFactory implements FunctionFactory {
@Requires
private FunctionRegistry functionRegistry;
@Requires
private EventContextService eventContextService;
@Validate
public void start() {
functionRegistry.registerFactory(this);
}
@Invalidate
public void stop() {
if (functionRegistry != null)
functionRegistry.unregisterFactory(this);
}
@Override
public Set<String> getFunctionNames() {
return new HashSet<String>(Arrays.asList("evtctxget", "evtctxgetvar", "evtctxsetvar", "evtctxcnt"));
}
@Override
public Expression newFunction(QueryContext ctx, String name, List<Expression> exprs) {
if (name.equals("evtctxget")) {
return new EvtCtxGetFunction(ctx, exprs, eventContextService);
} else if (name.equals("evtctxgetvar")) {
return new EvtCtxGetVarFunction(ctx, exprs, eventContextService);
} else if (name.equals("evtctxsetvar")) {
return new EvtCtxSetVarFunction(ctx, exprs, eventContextService);
} else if (name.equals("evtctxcnt")) {
return new EvtCtxCntFunction(ctx, exprs, eventContextService);
}
throw new QueryParseException("unsupported-function", -1, name);
}
}