package uk.ac.imperial.lsds.seep.testutils;
import java.util.List;
import uk.ac.imperial.lsds.seep.api.API;
import uk.ac.imperial.lsds.seep.api.DataStore;
import uk.ac.imperial.lsds.seep.api.DataStoreType;
import uk.ac.imperial.lsds.seep.api.QueryBuilder;
import uk.ac.imperial.lsds.seep.api.QueryComposer;
import uk.ac.imperial.lsds.seep.api.SeepTask;
import uk.ac.imperial.lsds.seep.api.data.ITuple;
import uk.ac.imperial.lsds.seep.api.data.OTuple;
import uk.ac.imperial.lsds.seep.api.data.Schema;
import uk.ac.imperial.lsds.seep.api.data.Type;
import uk.ac.imperial.lsds.seep.api.operator.LogicalOperator;
import uk.ac.imperial.lsds.seep.api.operator.SeepLogicalQuery;
public class LongPipelineBase implements QueryComposer {
@Override
public SeepLogicalQuery compose() {
// Declare Source
LogicalOperator src = queryAPI.newStatelessSource(new Source(), -1);
LogicalOperator src2 = queryAPI.newStatelessSource(new Source(), -10);
// Declare processors
LogicalOperator p = queryAPI.newStatelessOperator(new Processor(), 1);
LogicalOperator p2 = queryAPI.newStatelessOperator(new Processor(), 2);
LogicalOperator p3 = queryAPI.newStatelessOperator(new Processor(), 3);
LogicalOperator p4 = queryAPI.newStatelessOperator(new Processor(), 4);
LogicalOperator p5 = queryAPI.newStatelessOperator(new Processor(), 5);
// Declare sink
LogicalOperator snk = queryAPI.newStatelessSink(new Sink(), -2);
Schema srcSchema = queryAPI.schemaBuilder.newField(Type.SHORT, "id").build();
//Schema pSchema = queryAPI.schemaBuilder.newField(Type.SHORT, "id").newField(Type.BYTES, "payload").build();
/** Connect operators **/
src.connectTo(p, 0, new DataStore(srcSchema, DataStoreType.NETWORK, null));
src2.connectTo(p, 1, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p.connectTo(p2, 2, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p2.connectTo(p3, 0, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p3.connectTo(p4, 2, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p3.connectTo(p5, 1, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p4.connectTo(snk, 3, new DataStore(srcSchema, DataStoreType.NETWORK, null));
p5.connectTo(snk, 4, new DataStore(srcSchema, DataStoreType.NETWORK, null));
return QueryBuilder.build();
}
class Source implements uk.ac.imperial.lsds.seep.api.operator.sources.Source {
Schema srcSchema = queryAPI.schemaBuilder.newField(Type.SHORT, "id").build();
@Override
public void setUp() {
// TODO Auto-generated method stub
}
@Override
public void processData(ITuple data, API api) {
System.out.println("Im " + this.toString());
byte[] o = OTuple.create(srcSchema, srcSchema.names(), srcSchema.defaultValues());
api.send(o);
}
@Override
public void processDataGroup(List<ITuple> dataList, API api) {
// TODO Auto-generated method stub
}
@Override
public void close() {
// TODO Auto-generated method stub
}
}
class Processor implements SeepTask {
Schema srcSchema = queryAPI.schemaBuilder.newField(Type.SHORT, "id").build();
@Override
public void setUp() {
// TODO Auto-generated method stub
}
@Override
public void processData(ITuple data, API api) {
System.out.println("Im " + this.toString());
byte[] o = OTuple.create(srcSchema, srcSchema.names(), srcSchema.defaultValues());
api.send(o);
}
@Override
public void processDataGroup(List<ITuple> dataList, API api) {
// TODO Auto-generated method stub
}
@Override
public void close() {
// TODO Auto-generated method stub
}
}
class Sink implements uk.ac.imperial.lsds.seep.api.operator.sinks.Sink {
Schema srcSchema = queryAPI.schemaBuilder.newField(Type.SHORT, "id").build();
@Override
public void setUp() {
// TODO Auto-generated method stub
}
@Override
public void processData(ITuple data, API api) {
System.out.println("Im " + this.toString());
byte[] o = OTuple.create(srcSchema, srcSchema.names(), srcSchema.defaultValues());
// api.send(o);
}
@Override
public void processDataGroup(List<ITuple> dataList, API api) {
// TODO Auto-generated method stub
}
@Override
public void close() {
// TODO Auto-generated method stub
}
}
}