GUI -- Fixing related-intents when device(s) are included in selection.
Change-Id: I736838c2e828a9a8cc81961980b9a9762be870f3
Showing
1 changed file
with
26 additions
and
5 deletions
... | @@ -22,7 +22,9 @@ import org.onosproject.net.Host; | ... | @@ -22,7 +22,9 @@ import org.onosproject.net.Host; |
22 | import org.onosproject.net.HostId; | 22 | import org.onosproject.net.HostId; |
23 | import org.onosproject.net.Link; | 23 | import org.onosproject.net.Link; |
24 | import org.onosproject.net.device.DeviceService; | 24 | import org.onosproject.net.device.DeviceService; |
25 | +import org.onosproject.net.flow.FlowRule; | ||
25 | import org.onosproject.net.host.HostService; | 26 | import org.onosproject.net.host.HostService; |
27 | +import org.onosproject.net.intent.FlowRuleIntent; | ||
26 | import org.onosproject.net.intent.HostToHostIntent; | 28 | import org.onosproject.net.intent.HostToHostIntent; |
27 | import org.onosproject.net.intent.Intent; | 29 | import org.onosproject.net.intent.Intent; |
28 | import org.onosproject.net.intent.IntentService; | 30 | import org.onosproject.net.intent.IntentService; |
... | @@ -34,8 +36,10 @@ import org.onosproject.net.intent.PointToPointIntent; | ... | @@ -34,8 +36,10 @@ import org.onosproject.net.intent.PointToPointIntent; |
34 | import org.onosproject.net.link.LinkService; | 36 | import org.onosproject.net.link.LinkService; |
35 | 37 | ||
36 | import java.util.ArrayList; | 38 | import java.util.ArrayList; |
39 | +import java.util.Collection; | ||
37 | import java.util.HashSet; | 40 | import java.util.HashSet; |
38 | import java.util.List; | 41 | import java.util.List; |
42 | +import java.util.Objects; | ||
39 | import java.util.Set; | 43 | import java.util.Set; |
40 | 44 | ||
41 | import static org.onosproject.net.intent.IntentState.INSTALLED; | 45 | import static org.onosproject.net.intent.IntentState.INSTALLED; |
... | @@ -59,8 +63,7 @@ public class TopologyViewIntentFilter { | ... | @@ -59,8 +63,7 @@ public class TopologyViewIntentFilter { |
59 | * @param hostService host service reference | 63 | * @param hostService host service reference |
60 | * @param linkService link service reference | 64 | * @param linkService link service reference |
61 | */ | 65 | */ |
62 | - TopologyViewIntentFilter(IntentService intentService, | 66 | + TopologyViewIntentFilter(IntentService intentService, DeviceService deviceService, |
63 | - DeviceService deviceService, | ||
64 | HostService hostService, LinkService linkService) { | 67 | HostService hostService, LinkService linkService) { |
65 | this.intentService = intentService; | 68 | this.intentService = intentService; |
66 | this.deviceService = deviceService; | 69 | this.deviceService = deviceService; |
... | @@ -175,6 +178,11 @@ public class TopologyViewIntentFilter { | ... | @@ -175,6 +178,11 @@ public class TopologyViewIntentFilter { |
175 | if (pathContainsDevice(pathIntent.path().links(), device.id())) { | 178 | if (pathContainsDevice(pathIntent.path().links(), device.id())) { |
176 | return true; | 179 | return true; |
177 | } | 180 | } |
181 | + } else if (installable instanceof FlowRuleIntent) { | ||
182 | + FlowRuleIntent flowRuleIntent = (FlowRuleIntent) installable; | ||
183 | + if (rulesContainDevice(flowRuleIntent.flowRules(), device.id())) { | ||
184 | + return true; | ||
185 | + } | ||
178 | } else if (installable instanceof LinkCollectionIntent) { | 186 | } else if (installable instanceof LinkCollectionIntent) { |
179 | LinkCollectionIntent linksIntent = (LinkCollectionIntent) installable; | 187 | LinkCollectionIntent linksIntent = (LinkCollectionIntent) installable; |
180 | if (pathContainsDevice(linksIntent.links(), device.id())) { | 188 | if (pathContainsDevice(linksIntent.links(), device.id())) { |
... | @@ -186,7 +194,7 @@ public class TopologyViewIntentFilter { | ... | @@ -186,7 +194,7 @@ public class TopologyViewIntentFilter { |
186 | return false; | 194 | return false; |
187 | } | 195 | } |
188 | 196 | ||
189 | - // Indicates whether the specified intent involves the given device. | 197 | + // Indicates whether the specified links involve the given device. |
190 | private boolean pathContainsDevice(Iterable<Link> links, DeviceId id) { | 198 | private boolean pathContainsDevice(Iterable<Link> links, DeviceId id) { |
191 | for (Link link : links) { | 199 | for (Link link : links) { |
192 | if (link.src().elementId().equals(id) || link.dst().elementId().equals(id)) { | 200 | if (link.src().elementId().equals(id) || link.dst().elementId().equals(id)) { |
... | @@ -196,6 +204,16 @@ public class TopologyViewIntentFilter { | ... | @@ -196,6 +204,16 @@ public class TopologyViewIntentFilter { |
196 | return false; | 204 | return false; |
197 | } | 205 | } |
198 | 206 | ||
207 | + // Indicates whether the specified flow rules involvesthe given device. | ||
208 | + private boolean rulesContainDevice(Collection<FlowRule> flowRules, DeviceId id) { | ||
209 | + for (FlowRule rule : flowRules) { | ||
210 | + if (rule.deviceId().equals(id)) { | ||
211 | + return true; | ||
212 | + } | ||
213 | + } | ||
214 | + return false; | ||
215 | + } | ||
216 | + | ||
199 | private boolean isIntentRelevant(PointToPointIntent intent, | 217 | private boolean isIntentRelevant(PointToPointIntent intent, |
200 | Iterable<ConnectPoint> edgePoints) { | 218 | Iterable<ConnectPoint> edgePoints) { |
201 | for (ConnectPoint point : edgePoints) { | 219 | for (ConnectPoint point : edgePoints) { |
... | @@ -226,6 +244,9 @@ public class TopologyViewIntentFilter { | ... | @@ -226,6 +244,9 @@ public class TopologyViewIntentFilter { |
226 | Iterable<Intent> intents) { | 244 | Iterable<Intent> intents) { |
227 | Link ccSrc = getFirstLink(opticalIntent.getSrc(), false); | 245 | Link ccSrc = getFirstLink(opticalIntent.getSrc(), false); |
228 | Link ccDst = getFirstLink(opticalIntent.getDst(), true); | 246 | Link ccDst = getFirstLink(opticalIntent.getDst(), true); |
247 | + if (ccSrc == null || ccDst == null) { | ||
248 | + return false; | ||
249 | + } | ||
229 | 250 | ||
230 | for (Intent intent : intents) { | 251 | for (Intent intent : intents) { |
231 | List<Intent> installables = intentService.getInstallableIntents(intent.key()); | 252 | List<Intent> installables = intentService.getInstallableIntents(intent.key()); |
... | @@ -234,8 +255,8 @@ public class TopologyViewIntentFilter { | ... | @@ -234,8 +255,8 @@ public class TopologyViewIntentFilter { |
234 | List<Link> links = ((PathIntent) installable).path().links(); | 255 | List<Link> links = ((PathIntent) installable).path().links(); |
235 | if (links.size() == 3) { | 256 | if (links.size() == 3) { |
236 | Link tunnel = links.get(1); | 257 | Link tunnel = links.get(1); |
237 | - if (tunnel.src().equals(ccSrc.src()) && | 258 | + if (Objects.equals(tunnel.src(), ccSrc.src()) && |
238 | - tunnel.dst().equals(ccDst.dst())) { | 259 | + Objects.equals(tunnel.dst(), ccDst.dst())) { |
239 | return true; | 260 | return true; |
240 | } | 261 | } |
241 | } | 262 | } | ... | ... |
-
Please register or login to post a comment