The current model only present the result of the execution of a VTL expression as a stream.
Instead, we should use our own representation (probably extending stream) that includes information about how the data is processed, the other operations it is getting data from, etc.
interface VtlPlan {
Collection<? extends VtlStream<T>> getChildren();
? extends VtlStream<T> getParent();
VtlPipeline getPipeline();
}
class VtlStream<T> extends Stream<T> implements VtlPlan {
/* ... */
}