package org.yamcs.yarch.streamsql; import java.util.concurrent.atomic.AtomicInteger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yamcs.yarch.AbstractStream; import org.yamcs.yarch.SpeedLimitStream; import org.yamcs.yarch.SpeedSpec; import org.yamcs.yarch.Stream; import org.yamcs.yarch.TupleDefinition; import org.yamcs.yarch.YarchDatabase; public class SpeedLimitStreamExpression implements StreamExpression { SpeedSpec speedSpec; StreamExpression expression; static AtomicInteger count=new AtomicInteger(); static Logger log=LoggerFactory.getLogger(SpeedLimitStreamExpression.class.getName()); SpeedLimitStreamExpression(StreamExpression expression, SpeedSpec speedSpec) { this.expression=expression; this.speedSpec=speedSpec; } @Override public void bind(ExecutionContext c) throws StreamSqlException { expression.bind(c); } @Override public TupleDefinition getOutputDefinition() { return expression.getOutputDefinition(); } @Override public AbstractStream execute(ExecutionContext c) throws StreamSqlException { YarchDatabase dict=YarchDatabase.getInstance(c.getDbName()); if(speedSpec==null || speedSpec.getType()==SpeedSpec.Type.AFAP) return expression.execute(c); else { Stream s=expression.execute(c); SpeedLimitStream sls=new SpeedLimitStream(dict, "speed_limit_"+count.incrementAndGet(), s.getDefinition(), speedSpec); s.addSubscriber(sls); sls.setSubscribedStream(s); return sls; } } }