package edu.washington.escience.myria.operator; import java.util.List; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import edu.washington.escience.myria.Schema; import edu.washington.escience.myria.storage.TupleBatch; /** */ public class StreamingStateWrapper extends UnaryOperator implements StreamingStateful { /** Required for Java serialization. */ private static final long serialVersionUID = 1L; /** Its state. */ private StreamingState state; /** * @param child the child operator. * @param state the internal state. */ public StreamingStateWrapper(final Operator child, final StreamingState state) { super(child); if (state != null) { setStreamingStates(ImmutableList.of(state)); } } @Override public void setStreamingStates(final List<StreamingState> states) { state = states.get(0); state.setAttachedOperator(this); } /** * * @return the state. */ public StreamingState getStreamingState() { return state; } @Override public List<StreamingState> getStreamingStates() { return ImmutableList.of(state); } @Override protected void init(final ImmutableMap<String, Object> execEnvVars) throws Exception { state.init(execEnvVars); } @Override protected void cleanup() throws Exception { state.cleanup(); } @Override protected TupleBatch fetchNextReady() throws Exception { Operator child = getChild(); TupleBatch tb; while ((tb = child.nextReady()) != null) { tb = state.update(tb); if (tb != null && tb.numTuples() > 0) { return tb; } } return null; } @Override public Schema getInputSchema() { if (getChild() == null) { return null; } return getChild().getSchema(); } @Override public Schema generateSchema() { return state.getSchema(); } }