Thomas Vachuska
Committed by Gerrit Code Review

Merge "Filter paths not satisfying the specified constraints"

...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onlab.onos.net.intent.impl; 16 package org.onlab.onos.net.intent.impl;
17 17
18 +import com.google.common.base.Predicate;
19 +import com.google.common.collect.FluentIterable;
18 import com.google.common.collect.ImmutableList; 20 import com.google.common.collect.ImmutableList;
19 import org.apache.felix.scr.annotations.Component; 21 import org.apache.felix.scr.annotations.Component;
20 import org.apache.felix.scr.annotations.Reference; 22 import org.apache.felix.scr.annotations.Reference;
...@@ -94,11 +96,19 @@ public abstract class ConnectivityIntentCompiler<T extends ConnectivityIntent> ...@@ -94,11 +96,19 @@ public abstract class ConnectivityIntentCompiler<T extends ConnectivityIntent>
94 protected Path getPath(ConnectivityIntent intent, 96 protected Path getPath(ConnectivityIntent intent,
95 ElementId one, ElementId two) { 97 ElementId one, ElementId two) {
96 Set<Path> paths = pathService.getPaths(one, two, weight(intent.constraints())); 98 Set<Path> paths = pathService.getPaths(one, two, weight(intent.constraints()));
97 - if (paths.isEmpty()) { 99 + final List<Constraint> constraints = intent.constraints();
98 - throw new PathNotFoundException("No packet path from " + one + " to " + two); 100 + ImmutableList<Path> filtered = FluentIterable.from(paths)
101 + .filter(new Predicate<Path>() {
102 + @Override
103 + public boolean apply(Path path) {
104 + return checkPath(path, constraints);
105 + }
106 + }).toList();
107 + if (filtered.isEmpty()) {
108 + throw new PathNotFoundException("No packet path form " + one + " to " + two);
99 } 109 }
100 // TODO: let's be more intelligent about this eventually 110 // TODO: let's be more intelligent about this eventually
101 - return paths.iterator().next(); 111 + return filtered.iterator().next();
102 } 112 }
103 113
104 /** 114 /**
......