Simple(Source<Ex2> master, Source<Ex1> model) {
   OperatorDescription.Builder builder = new OperatorDescription.Builder(MasterBranch.class);
   builder.declare(MasterBranchFlow.class, MasterBranchFlowImpl.class, "simple");
   builder.declareParameter(Ex2.class);
   builder.declareParameter(Ex1.class);
   builder.addInput(
       "master",
       Ex2.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder.addInput(
       "model",
       Ex1.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder.addOutput("high", Ex1.class);
   builder.addOutput("low", Ex1.class);
   builder.addOutput("stop", Ex1.class);
   builder.addAttribute(FlowBoundary.SHUFFLE);
   FlowElementResolver resolver = builder.toResolver();
   resolver.resolveInput("master", master);
   resolver.resolveInput("model", model);
   this.high = resolver.resolveOutput("high");
   this.low = resolver.resolveOutput("low");
   this.stop = resolver.resolveOutput("stop");
 }
 Selection(Source<Ex2> master, Source<Ex1> model) {
   OperatorDescription.Builder builder0 = new OperatorDescription.Builder(MasterCheck.class);
   builder0.declare(MasterCheckFlow.class, MasterCheckFlowImpl.class, "selection");
   builder0.declareParameter(Ex2.class);
   builder0.declareParameter(Ex1.class);
   builder0.addInput(
       "master",
       Ex2.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder0.addInput(
       "model",
       Ex1.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder0.addOutput("found", Ex1.class);
   builder0.addOutput("missed", Ex1.class);
   builder0.addAttribute(
       new OperatorHelper("selector", Arrays.asList(new Class<?>[] {List.class, Ex1.class})));
   builder0.addAttribute(FlowBoundary.SHUFFLE);
   FlowElementResolver resolver0 = builder0.toResolver();
   resolver0.resolveInput("master", master);
   resolver0.resolveInput("model", model);
   this.found = resolver0.resolveOutput("found");
   this.missed = resolver0.resolveOutput("missed");
 }
 SelectionWithParameter1(Source<Ex2> master, Source<Ex1> model, int parameter) {
   OperatorDescription.Builder builder3 = new OperatorDescription.Builder(MasterBranch.class);
   builder3.declare(
       MasterBranchFlow.class, MasterBranchFlowImpl.class, "selectionWithParameter1");
   builder3.declareParameter(Ex2.class);
   builder3.declareParameter(Ex1.class);
   builder3.declareParameter(int.class);
   builder3.addInput(
       "master",
       Ex2.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder3.addInput(
       "model",
       Ex1.class,
       new ShuffleKey(
           Arrays.asList(new String[] {"string"}), Arrays.asList(new ShuffleKey.Order[] {})));
   builder3.addOutput("high", Ex1.class);
   builder3.addOutput("low", Ex1.class);
   builder3.addOutput("stop", Ex1.class);
   builder3.addParameter("parameter", int.class, parameter);
   builder3.addAttribute(
       new OperatorHelper(
           "selectorWithParameter",
           Arrays.asList(new Class<?>[] {List.class, Ex1.class, int.class})));
   builder3.addAttribute(FlowBoundary.SHUFFLE);
   FlowElementResolver resolver3 = builder3.toResolver();
   resolver3.resolveInput("master", master);
   resolver3.resolveInput("model", model);
   this.high = resolver3.resolveOutput("high");
   this.low = resolver3.resolveOutput("low");
   this.stop = resolver3.resolveOutput("stop");
 }