public ExampleIterator(OperatorDescription description) {
    super(description, "Example Process");
    outExtender.start();

    getTransformer().addPassThroughRule(exampleSetInput, exampleSetInnerSource);
    getTransformer().addRule(new SubprocessTransformRule(getSubprocess(0)));
    getTransformer()
        .addRule(
            new PassThroughRule(exampleSetInput, exampleSetOutput, false) {

              @Override
              public MetaData modifyMetaData(MetaData unmodifiedMetaData) {
                if (exampleSetInnerSink.isConnected()) {
                  return exampleSetInnerSink.getMetaData();
                } else {
                  // due to side effects, we cannot make any guarantee about the output.
                  return new ExampleSetMetaData();
                }
              }
            });
    getTransformer().addRule(outExtender.makePassThroughRule());

    addValue(
        new ValueDouble("iteration", "The number of the current iteration / loop / example.") {

          @Override
          public double getDoubleValue() {
            return iteration;
          }
        });
  }
 public MultipleLabelIterator(OperatorDescription description) {
   super(description, "Iteration");
   outExtender.start();
   getTransformer()
       .addRule(
           new ExampleSetPassThroughRule(exampleSetInput, exampleInnerSource, SetRelation.EQUAL) {
             @Override
             public ExampleSetMetaData modifyExampleSet(ExampleSetMetaData metaData)
                 throws UndefinedParameterError {
               AttributeMetaData myLabel = metaData.getLabelMetaData();
               if (myLabel != null) metaData.removeAttribute(myLabel);
               for (AttributeMetaData amd : metaData.getAllAttributes()) {
                 if (amd.getName().startsWith(Attributes.LABEL_NAME)) {
                   amd.setRole(Attributes.LABEL_NAME);
                   break;
                 }
               }
               return metaData;
             }
           });
   getTransformer().addRule(new SubprocessTransformRule(getSubprocess(0)));
   getTransformer().addRule(outExtender.makePassThroughRule());
 }