Filter paths not satisfying the specified constraints

Change-Id: I683ba7cdfa3b792dda51a0bb45d7b000666c8c54
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/ConnectivityIntentCompiler.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/ConnectivityIntentCompiler.java
index d66e849..405366d 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/ConnectivityIntentCompiler.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/ConnectivityIntentCompiler.java
@@ -15,6 +15,8 @@
  */
 package org.onlab.onos.net.intent.impl;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
@@ -94,11 +96,19 @@
     protected Path getPath(ConnectivityIntent intent,
                            ElementId one, ElementId two) {
         Set<Path> paths = pathService.getPaths(one, two, weight(intent.constraints()));
-        if (paths.isEmpty()) {
-            throw new PathNotFoundException("No packet path from " + one + " to " + two);
+        final List<Constraint> constraints = intent.constraints();
+        ImmutableList<Path> filtered = FluentIterable.from(paths)
+                .filter(new Predicate<Path>() {
+                    @Override
+                    public boolean apply(Path path) {
+                        return checkPath(path, constraints);
+                    }
+                }).toList();
+        if (filtered.isEmpty()) {
+            throw new PathNotFoundException("No packet path form " + one + " to " + two);
         }
         // TODO: let's be more intelligent about this eventually
-        return paths.iterator().next();
+        return filtered.iterator().next();
     }
 
     /**