adding constaints to intent API
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
index 893b7ea..c32c8ee 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PointToPointIntentCompiler.java
@@ -15,31 +15,20 @@
*/
package org.onlab.onos.net.intent.impl;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DefaultEdgeLink;
import org.onlab.onos.net.DefaultPath;
import org.onlab.onos.net.Link;
import org.onlab.onos.net.Path;
import org.onlab.onos.net.intent.Intent;
-import org.onlab.onos.net.intent.IntentCompiler;
-import org.onlab.onos.net.intent.IntentExtensionService;
import org.onlab.onos.net.intent.PathIntent;
import org.onlab.onos.net.intent.PointToPointIntent;
import org.onlab.onos.net.provider.ProviderId;
-import org.onlab.onos.net.resource.LinkResourceRequest;
-import org.onlab.onos.net.topology.LinkWeight;
-import org.onlab.onos.net.topology.Topology;
-import org.onlab.onos.net.topology.TopologyEdge;
-import org.onlab.onos.net.topology.TopologyService;
+
+import java.util.ArrayList;
+import java.util.List;
import static java.util.Arrays.asList;
@@ -48,14 +37,11 @@
*/
@Component(immediate = true)
public class PointToPointIntentCompiler
- implements IntentCompiler<PointToPointIntent> {
+ extends ConnectivityIntentCompiler<PointToPointIntent> {
- private static final ProviderId PID = new ProviderId("core", "org.onlab.onos.core", true);
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected IntentExtensionService intentManager;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected TopologyService topologyService;
+ // TODO: use off-the-shell core provider ID
+ private static final ProviderId PID =
+ new ProviderId("core", "org.onlab.onos.core", true);
@Activate
public void activate() {
@@ -69,15 +55,16 @@
@Override
public List<Intent> compile(PointToPointIntent intent) {
- Path path = getPath(intent.ingressPoint(), intent.egressPoint());
+ Path path = getPath(intent, intent.ingressPoint().deviceId(),
+ intent.egressPoint().deviceId());
List<Link> links = new ArrayList<>();
links.add(DefaultEdgeLink.createEdgeLink(intent.ingressPoint(), true));
links.addAll(path.links());
links.add(DefaultEdgeLink.createEdgeLink(intent.egressPoint(), false));
- return asList(createPathIntent(new DefaultPath(PID, links, path.cost() + 2,
- path.annotations()), intent));
+ return asList(createPathIntent(new DefaultPath(PID, links, path.cost(),
+ path.annotations()), intent));
}
/**
@@ -90,34 +77,7 @@
private Intent createPathIntent(Path path,
PointToPointIntent intent) {
return new PathIntent(intent.appId(),
- intent.selector(), intent.treatment(), path,
- new LinkResourceRequest[0]);
+ intent.selector(), intent.treatment(), path);
}
- /**
- * Computes a path between two ConnectPoints.
- *
- * @param one start of the path
- * @param two end of the path
- * @return Path between the two
- * @throws PathNotFoundException if a path cannot be found
- */
- private Path getPath(ConnectPoint one, ConnectPoint two) {
- Topology topology = topologyService.currentTopology();
- LinkWeight weight = new LinkWeight() {
- @Override
- public double weight(TopologyEdge edge) {
- return edge.link().type() == Link.Type.OPTICAL ? -1 : +1;
- }
- };
-
- Set<Path> paths = topologyService.getPaths(topology, one.deviceId(),
- two.deviceId(), weight);
- if (paths.isEmpty()) {
- throw new PathNotFoundException("No packet path from " + one + " to " + two);
- }
-
- // TODO: let's be more intelligent about this eventually
- return paths.iterator().next();
- }
}