Update xconnectService when the service is bound/unbound

Change-Id: Ic5a6cfc1db2437a410a27c0ec66e664f88cabb2d
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index e19a90e..d368433 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -27,6 +27,7 @@
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.ICMP6;
@@ -232,7 +233,10 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     public LeadershipService leadershipService;
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
+    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+            bind = "bindXconnectService",
+            unbind = "unbindXconnectService",
+            policy = ReferencePolicy.DYNAMIC)
     public XconnectService xconnectService;
 
     @Property(name = "activeProbing", boolValue = true,
@@ -394,6 +398,24 @@
 
     Instant lastEdgePortEvent = Instant.EPOCH;
 
+    protected void bindXconnectService(XconnectService xconnectService) {
+        if (this.xconnectService == null) {
+            log.info("Binding XconnectService");
+            this.xconnectService = xconnectService;
+        } else {
+            log.warn("Trying to bind XconnectService but it is already bound");
+        }
+    }
+
+    protected void unbindXconnectService(XconnectService xconnectService) {
+        if (this.xconnectService == xconnectService) {
+            log.info("Unbinding XconnectService");
+            this.xconnectService = null;
+        } else {
+            log.warn("Trying to unbind XconnectService but it is already unbound");
+        }
+    }
+
     @Activate
     protected void activate(ComponentContext context) {
         appId = coreService.registerApplication(APP_NAME);