Add a PathIntents class.
- maintains a list of PathIntent instances
- maintains pointers to PathIntent instances from a link
- calculates available bandwidth for each link
Change-Id: Ibb6f5883c3a0d54c601a4a587a19983da90e4fd4
diff --git a/src/main/java/net/onrc/onos/intent/PathIntents.java b/src/main/java/net/onrc/onos/intent/PathIntents.java
new file mode 100644
index 0000000..1a8deab
--- /dev/null
+++ b/src/main/java/net/onrc/onos/intent/PathIntents.java
@@ -0,0 +1,61 @@
+package net.onrc.onos.intent;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+
+import net.onrc.onos.ofcontroller.networkgraph.Link;
+
+/**
+ * @author Toshio Koide (t-koide@onlab.us)
+ */
+public class PathIntents {
+ protected LinkedList<PathIntent> intents = new LinkedList<PathIntent>();
+ protected HashMap<Link, HashSet<PathIntent>> linkToIntents = new HashMap<Link, HashSet<PathIntent>>();
+
+ public void addIntent(PathIntent intent) {
+ intents.add(intent);
+ for (Link link: intent.getPath()) {
+ HashSet<PathIntent> value = linkToIntents.get(link);
+ if (value == null) {
+ value = new HashSet<PathIntent>();
+ linkToIntents.put(link, value);
+ }
+ value.add(intent);
+ }
+ }
+
+ public void addIntents(PathIntents intents) {
+ for(PathIntent intent: intents.getIntents()) {
+ addIntent(intent);
+ }
+ }
+
+ public Collection<PathIntent> getIntentByLink(Link link) {
+ return Collections.unmodifiableCollection(linkToIntents.get(link));
+ }
+
+ public Collection<PathIntent> getIntents() {
+ return Collections.unmodifiableCollection(intents);
+ }
+
+ /**
+ * calculate available bandwidth of specified link
+ * @param link
+ * @return
+ */
+ public Double getAvailableBandwidth(Link link) {
+ Double bandwidth = link.getCapacity();
+ if (!bandwidth.isInfinite() && linkToIntents.containsKey(link)) {
+ for (PathIntent intent: getIntentByLink(link)) {
+ Double intentBandwidth = intent.getBandwidth();
+ if (intentBandwidth == null || intentBandwidth.isInfinite() || intentBandwidth.isNaN())
+ continue;
+ bandwidth -= intentBandwidth;
+ }
+ }
+ return bandwidth;
+ }
+}