Add path intent compiler that generates flow objective intents
Change-Id: I11bee398d927f0e3f32b7cf81d98cfe5816db477
diff --git a/core/api/src/main/java/org/onosproject/net/intent/FlowObjectiveIntent.java b/core/api/src/main/java/org/onosproject/net/intent/FlowObjectiveIntent.java
index 18dcb6e..55c883a 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/FlowObjectiveIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/FlowObjectiveIntent.java
@@ -17,19 +17,25 @@
package org.onosproject.net.intent;
import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
import org.onosproject.net.NetworkResource;
import org.onosproject.net.flowobjective.Objective;
import java.util.Collection;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkArgument;
/**
* Intent expressed as (and backed by) a collection of flow objectives through
* which the intent is to be accomplished.
*/
-public class FlowObjectiveIntent extends Intent {
+public final class FlowObjectiveIntent extends Intent {
- private final Collection<Objective> objectives;
+ private final List<Objective> objectives;
+ private final List<DeviceId> devices;
/**
* Constructor for serialization.
@@ -37,6 +43,7 @@
protected FlowObjectiveIntent() {
super();
this.objectives = null;
+ this.devices = null;
}
/**
@@ -44,13 +51,15 @@
* resources.
*
* @param appId application id
+ * @param devices list of target devices; in same order as the objectives
* @param objectives backing flow objectives
* @param resources backing network resources
*/
public FlowObjectiveIntent(ApplicationId appId,
- Collection<Objective> objectives,
+ List<DeviceId> devices,
+ List<Objective> objectives,
Collection<NetworkResource> resources) {
- this(appId, null, objectives, resources);
+ this(appId, null, devices, objectives, resources);
}
/**
@@ -59,14 +68,20 @@
*
* @param appId application id
* @param key intent key
+ * @param devices list of target devices; in same order as the objectives
* @param objectives backing flow objectives
* @param resources backing network resources
*/
- public FlowObjectiveIntent(ApplicationId appId, Key key,
- Collection<Objective> objectives,
+ public FlowObjectiveIntent(ApplicationId appId,
+ Key key,
+ List<DeviceId> devices,
+ List<Objective> objectives,
Collection<NetworkResource> resources) {
super(appId, key, resources, DEFAULT_INTENT_PRIORITY);
- this.objectives = objectives;
+ checkArgument(devices.size() == objectives.size(),
+ "Number of devices and objectives does not match");
+ this.objectives = ImmutableList.copyOf(objectives);
+ this.devices = ImmutableList.copyOf(devices);
}
/**
@@ -74,10 +89,19 @@
*
* @return flow objectives
*/
- Collection<Objective> objectives() {
+ public List<Objective> objectives() {
return objectives;
}
+ /**
+ * Returns the list of devices for the flow objectives.
+ *
+ * @return devices
+ */
+ public List<DeviceId> devices() {
+ return devices;
+ }
+
@Override
public boolean isInstallable() {
@@ -91,7 +115,8 @@
.add("key", key())
.add("appId", appId())
.add("resources", resources())
- .add("objectives", objectives)
+ .add("device", devices())
+ .add("objectives", objectives())
.toString();
}
}