public void visit(PipelineVisitor visitor,Set<PValue> visitedValues){
  if (!finishedSpecifying) {
    finishSpecifying();
  }
  for (  Map.Entry<PValue,TransformTreeNode> entry : inputs.entrySet()) {
    if (visitedValues.add(entry.getKey())) {
      visitor.visitValue(entry.getKey(),entry.getValue());
    }
  }
  if (isCompositeNode()) {
    PipelineVisitor.CompositeBehavior recurse=visitor.enterCompositeTransform(this);
    if (recurse.equals(CompositeBehavior.ENTER_TRANSFORM)) {
      for (      TransformTreeNode child : parts) {
        child.visit(visitor,visitedValues);
      }
    }
    visitor.leaveCompositeTransform(this);
  }
 else {
    visitor.visitPrimitiveTransform(this);
  }
  for (  PValue pValue : getExpandedOutputs()) {
    if (visitedValues.add(pValue)) {
      visitor.visitValue(pValue,this);
    }
  }
}

public void visit ( PipelineVisitor visitor , Set < PValue > visitedValues ) { if ( ! finishedSpecifying ) { finishSpecifying ( ) ; } for ( Map . Entry < PValue , TransformTreeNode > entry : inputs . entrySet ( ) ) { if ( visitedValues . add ( entry . getKey ( ) ) ) { visitor . visitValue ( entry . getKey ( ) , entry . getValue ( ) ) ; } } if ( isCompositeNode ( ) ) { PipelineVisitor . CompositeBehavior recurse = visitor . enterCompositeTransform ( this ) ; if ( recurse . equals ( CompositeBehavior . ENTER_TRANSFORM ) ) { for ( TransformTreeNode child : parts ) { child . visit ( visitor , visitedValues ) ; } } visitor . leaveCompositeTransform ( this ) ; } else { visitor . visitPrimitiveTransform ( this ) ; } for ( PValue pValue : getExpandedOutputs ( ) ) { if ( visitedValues . add ( pValue ) ) { visitor . visitValue ( pValue , this ) ; } } }
visit the transform node . < p > provides an ordered visit of the input values , the primitive transform ( or child nodes for composite transforms ) , then the output values .
