/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2015
*/
package com.ibm.streamsx.topology.internal.tester;
import java.nio.ByteBuffer;
import com.ibm.streams.flow.handlers.StreamHandler;
import com.ibm.streams.operator.OutputTuple;
import com.ibm.streams.operator.StreamingData.Punctuation;
import com.ibm.streams.operator.StreamingOutput;
import com.ibm.streams.operator.Tuple;
import com.ibm.streams.operator.encoding.BinaryEncoding;
/**
* Injects tuples from the test-side TCP server into the test-side Java testable
* graph where they will get sent to the handlers.
*
*/
public class TestTupleInjector implements StreamHandler<byte[]> {
private StreamingOutput<OutputTuple> injectPort;
private final BinaryEncoding encoding;
public TestTupleInjector(StreamingOutput<OutputTuple> injectPort) {
this.injectPort = injectPort;
encoding = injectPort.getStreamSchema().newNativeBinaryEncoding();
}
@Override
public void tuple(byte[] tupleData) throws Exception {
if (tupleData.length == 0) {
mark(Punctuation.FINAL_MARKER);
return;
}
Tuple tuple = encoding.decodeTuple(ByteBuffer.wrap(tupleData));
injectPort.submit(tuple);
}
@Override
public void mark(Punctuation mark) throws Exception {
injectPort.punctuate(mark);
}
}