import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;
import uk.ac.imperial.lsds.seep.api.DataReference;
import uk.ac.imperial.lsds.seep.api.ScheduleComposer;
import uk.ac.imperial.lsds.seep.api.operator.LogicalOperator;
import uk.ac.imperial.lsds.seep.infrastructure.ControlEndPoint;
import uk.ac.imperial.lsds.seep.scheduler.ScheduleDescription;
import uk.ac.imperial.lsds.seep.scheduler.Stage;
import uk.ac.imperial.lsds.seep.scheduler.StageType;
import uk.ac.imperial.lsds.seep.util.Utils;
public class Base implements ScheduleComposer {
@Override
public ScheduleDescription compose() {
// First declare the general operators we need
// Declare Source
LogicalOperator src = schedAPI.newStatelessSource(new CustomSource(), 0);
// Declare processor
LogicalOperator p = schedAPI.newStatelessOperator(new Processor(), 1);
// Declare sink
LogicalOperator snk = schedAPI.newStatelessSink(new CustomSink(), 2);
// Then add the operators in stages
InetAddress ip = null;
try {
ip = InetAddress.getByName("127.0.0.1");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int idl1 = Utils.computeIdFromIpAndPort(ip, 3501);
ControlEndPoint location = new ControlEndPoint(idl1, "127.0.0.1", 3501);
Stage source = schedAPI.createStage(2, src.getOperatorId(), StageType.SOURCE_STAGE, location);
Set<DataReference> dRefs = new HashSet<>();
DataReference dr = DataReference.makeEmptyDataReference(location);
dRefs.add(dr);
source.addInputDataReference(0, dRefs);
int idl2 = Utils.computeIdFromIpAndPort(ip, 3502);
ControlEndPoint location2 = new ControlEndPoint(idl2, "127.0.0.1", 3502);
Stage intermediate = schedAPI.createStage(1, p.getOperatorId(), StageType.INTERMEDIATE_STAGE, location2);
Set<DataReference> dRefs2 = new HashSet<>();
DataReference dr2 = DataReference.makeEmptyDataReference(location2);
dRefs2.add(dr2);
intermediate.addInputDataReference(0, dRefs2);
ControlEndPoint location3 = new ControlEndPoint(idl1, "127.0.0.1", 3501);
Stage sink = schedAPI.createStage(0, snk.getOperatorId(), StageType.SINK_STAGE, location3);
sink.addInputDataReference(0, dRefs);
schedAPI.declareStages(source, intermediate, sink);
// Create the schedule by chaining the stages
sink.dependsOn(intermediate);
intermediate.dependsOn(source);
return schedAPI.build();
}
}