package org.calrissian.flowbox.model.builder; import com.google.common.base.Preconditions; import org.calrissian.flowbox.model.FlowOp; import org.calrissian.flowbox.model.StreamDef; import java.util.ArrayList; import java.util.List; import static com.google.common.base.Preconditions.checkNotNull; public class StreamBuilder { private String name; private List<FlowOp> flowOpList = new ArrayList<FlowOp>(); FlowDefsBuilder flowOpsBuilder; boolean stdInput; public StreamBuilder(FlowDefsBuilder flowOpsBuilder, String name, boolean stdInput) { this.flowOpsBuilder = flowOpsBuilder; this.name = name; this.stdInput = stdInput; } public boolean isStdInput() { return stdInput; } protected void addFlowOp(FlowOp flowOp) { flowOpList.add(flowOp); } public FilterBuilder filter() { return new FilterBuilder(this); } public SelectBuilder select() { return new SelectBuilder(this); } public AggregateBuilder aggregate() { return new AggregateBuilder(this); } public PartitionBuilder partition() { return new PartitionBuilder(this); } public StopGateBuilder stopGate() { return new StopGateBuilder(this); } public JoinBuilder join(String stream1, String stream2) { return new JoinBuilder(this, stream1, stream2); } public SortBuilder sort() { return new SortBuilder(this); } public EachBuilder each() { return new EachBuilder(this); } public FlowDefsBuilder endStream() { return endStream(true, null); } public FlowDefsBuilder endStream(boolean stdOutput, String... outputs) { StreamDef def = new StreamDef(name, flowOpList, stdInput, stdOutput, outputs); if(!def.isStdOutput() && def.getOutputs().length == 0) throw new RuntimeException("You must specify at least one output. Offending stream: " + name); flowOpsBuilder.addStream(def); return flowOpsBuilder; } public FlowDefsBuilder endStream(String... outputs) { return endStream(true, outputs); } }