import java.util.ArrayList;
import java.util.List;
import uk.ac.imperial.lsds.seep.api.QueryBuilder;
import uk.ac.imperial.lsds.seep.api.QueryComposer;
import uk.ac.imperial.lsds.seep.api.QueryPlan;
import uk.ac.imperial.lsds.seep.gc14.operator.Filter;
import uk.ac.imperial.lsds.seep.gc14.operator.Q1Prediction;
import uk.ac.imperial.lsds.seep.gc14.operator.Sink;
import uk.ac.imperial.lsds.seep.gc14.operator.Source;
import uk.ac.imperial.lsds.seep.operator.Connectable;
import uk.ac.imperial.lsds.seep.state.StateWrapper;
public class Base implements QueryComposer {
@Override
public QueryPlan compose() {
// Declare src
List<String> srcFields = new ArrayList<String>();
srcFields.add("id"); //int
srcFields.add("timestamp"); // int
srcFields.add("value"); // float
srcFields.add("property"); // int
srcFields.add("plug_id"); // int
srcFields.add("household_id"); // int
srcFields.add("house_id"); // int
Connectable src = QueryBuilder.newStatelessSource(new Source(), 0, srcFields);
//Declare filter
Connectable filter = QueryBuilder.newStatelessOperator(new Filter(), 1, srcFields);
/*
* Query 1
*/
//Declare q1
StateWrapper sw = new StateWrapper(2, 5000, null); // let's use this only if we do dynamic scale out
Connectable q1 = QueryBuilder.newStatefulOperator(new Q1Prediction(), 2, sw, srcFields);
//Declare sink
List<String> snkFields = new ArrayList<String>();
snkFields.add("startTimeForPrediction");
snkFields.add("house_id");
snkFields.add("household_id");
snkFields.add("plug_id");
snkFields.add("predictedLoadForPlug");
Connectable snk = QueryBuilder.newStatelessSink(new Sink(), 5, snkFields);
//Connect operators
src.connectTo(filter, true, 0);
filter.connectTo(q1, true, 0);
q1.connectTo(snk, true, 0);
return QueryBuilder.build();
}
}