- public Iterator<Controlled> iterator() {
- return ImmutableSet.<Controlled>builder().add(source).addAll(sinks.values()).build().iterator();
+ public Iterator<Filter> iterator() {
+ return filters().iterator();
+ }
+
+ //
+ // PRIVATE METHODS
+ //
+
+ /**
+ * Returns all filters of this pipeline, listed breadth-first, starting with
+ * the source.
+ *
+ * @return All filters of this pipeline
+ */
+ public List<Filter> filters() {
+ ImmutableList.Builder<Filter> filters = ImmutableList.builder();
+ List<Filter> remainingFilters = Lists.newArrayList();
+ filters.add(source);
+ remainingFilters.add(source);
+ while (!remainingFilters.isEmpty()) {
+ Collection<Filter> sinks = this.filters(remainingFilters.remove(0));
+ for (Filter sink : sinks) {
+ filters.add(sink);
+ remainingFilters.add(sink);
+ }
+ }
+ return filters.build();