+ public Iterator<NameVersion> nameVersions() {
+ List<NameVersion> nameVersions = new ArrayList<NameVersion>();
+ for (Object module : modules) {
+ // extract runnable from execution flow
+ if (module instanceof ExecutionFlow)
+ module = ((ExecutionFlow) module).getRunnable();
+
+ if (module instanceof ModuleSet)
+ addNameVersions(nameVersions, (ModuleSet) module);
+ else if (module instanceof NameVersion) {
+ NameVersion nv = (NameVersion) module;
+ if (!nameVersions.contains(nv))
+ nameVersions.add(nv);
+ } else
+ log.warn("Ignored " + module);
+ }
+ return nameVersions.iterator();
+ }
+
+ private void addNameVersions(List<NameVersion> nameVersions,
+ ModuleSet moduleSet) {
+ Iterator<? extends NameVersion> it = moduleSet.nameVersions();
+ while (it.hasNext()) {
+ NameVersion nv = it.next();
+ if (!nameVersions.contains(nv))
+ nameVersions.add(nv);
+ }