Fixed REST API bug in Xconnect

In addition,
- Deprecated old XConnectHandler
- Fixed equals() of XconnectDesc and XconnectKey
- Implemented unit tests for XconnectCodec

Change-Id: I1b5f2c1f389523e3b65a3d9acaf75bc06e39fdda
diff --git a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index c8c88c7..98ee40c 100644
--- a/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -96,7 +96,6 @@
 import org.onosproject.segmentrouting.config.DeviceConfiguration;
 import org.onosproject.segmentrouting.config.SegmentRoutingAppConfig;
 import org.onosproject.segmentrouting.config.SegmentRoutingDeviceConfig;
-import org.onosproject.segmentrouting.config.XConnectConfig;
 import org.onosproject.segmentrouting.grouphandler.DefaultGroupHandler;
 import org.onosproject.segmentrouting.grouphandler.DestinationSet;
 import org.onosproject.segmentrouting.grouphandler.NextNeighbors;
@@ -303,7 +302,6 @@
     private InternalLinkListener linkListener = null;
     private InternalDeviceListener deviceListener = null;
     private AppConfigHandler appCfgHandler = null;
-    public XConnectHandler xConnectHandler = null;
     McastHandler mcastHandler = null;
     HostHandler hostHandler = null;
     private RouteHandler routeHandler = null;
@@ -392,16 +390,6 @@
                 }
             };
 
-    private final ConfigFactory<ApplicationId, XConnectConfig> xConnectConfigFactory =
-            new ConfigFactory<ApplicationId, XConnectConfig>(
-                    SubjectFactories.APP_SUBJECT_FACTORY,
-                    XConnectConfig.class, "xconnect") {
-                @Override
-                public XConnectConfig createConfig() {
-                    return new XConnectConfig();
-                }
-            };
-
     private ConfigFactory<ApplicationId, McastConfig> mcastConfigFactory =
             new ConfigFactory<ApplicationId, McastConfig>(
                     SubjectFactories.APP_SUBJECT_FACTORY,
@@ -556,7 +544,6 @@
         linkListener = new InternalLinkListener();
         deviceListener = new InternalDeviceListener();
         appCfgHandler = new AppConfigHandler(this);
-        xConnectHandler = new XConnectHandler(this);
         mcastHandler = new McastHandler(this);
         hostHandler = new HostHandler(this);
         linkHandler = new LinkHandler(this);
@@ -568,7 +555,6 @@
         cfgService.addListener(cfgListener);
         cfgService.registerConfigFactory(deviceConfigFactory);
         cfgService.registerConfigFactory(appConfigFactory);
-        cfgService.registerConfigFactory(xConnectConfigFactory);
         cfgService.registerConfigFactory(mcastConfigFactory);
         log.info("Configuring network before adding listeners");
 
@@ -644,7 +630,6 @@
         cfgService.removeListener(cfgListener);
         cfgService.unregisterConfigFactory(deviceConfigFactory);
         cfgService.unregisterConfigFactory(appConfigFactory);
-        cfgService.unregisterConfigFactory(xConnectConfigFactory);
         cfgService.unregisterConfigFactory(mcastConfigFactory);
         compCfgService.unregisterProperties(getClass(), false);
 
@@ -1548,8 +1533,6 @@
                     } else if (configClass.equals(SegmentRoutingDeviceConfig.class)) {
                         log.info("Segment Routing Device Config added for {}", event.subject());
                         cfgListener.configureNetwork();
-                    } else if (configClass.equals(XConnectConfig.class)) {
-                        xConnectHandler.processXConnectConfigAdded(netcfgEvent);
                     } else if (configClass.equals(InterfaceConfig.class)) {
                         log.info("Interface Config added for {}", event.subject());
                         cfgListener.configureNetwork();
@@ -1566,8 +1549,6 @@
                     } else if (configClass.equals(SegmentRoutingDeviceConfig.class)) {
                         log.info("Segment Routing Device Config updated for {}", event.subject());
                         createOrUpdateDeviceConfiguration();
-                    } else if (configClass.equals(XConnectConfig.class)) {
-                        xConnectHandler.processXConnectConfigUpdated(netcfgEvent);
                     } else if (configClass.equals(InterfaceConfig.class)) {
                         log.info("Interface Config updated for {}", event.subject());
                         createOrUpdateDeviceConfiguration();
@@ -1586,8 +1567,6 @@
                     } else if (configClass.equals(SegmentRoutingDeviceConfig.class)) {
                         // TODO Handle sr device config removal
                         log.info("SegmentRoutingDeviceConfig removal is not handled in current implementation");
-                    } else if (configClass.equals(XConnectConfig.class)) {
-                        xConnectHandler.processXConnectConfigRemoved(netcfgEvent);
                     } else if (configClass.equals(InterfaceConfig.class)) {
                         // TODO Handle interface removal
                         log.info("InterfaceConfig removal is not handled in current implementation");
@@ -1658,7 +1637,6 @@
 
         if (mastershipService.isLocalMaster(deviceId)) {
             defaultRoutingHandler.populatePortAddressingRules(deviceId);
-            xConnectHandler.init(deviceId);
             DefaultGroupHandler groupHandler = groupHandlerMap.get(deviceId);
             groupHandler.createGroupsFromVlanConfig();
             routingRulePopulator.populateSubnetBroadcastRule(deviceId);
@@ -1697,7 +1675,6 @@
         defaultRoutingHandler
             .populateRoutingRulesForLinkStatusChange(null, null, device.id(), true);
         defaultRoutingHandler.purgeEcmpGraph(device.id());
-        xConnectHandler.removeDevice(device.id());
 
         // Cleanup all internal groupHandler stores for this device. Should be
         // done after all rerouting or rehashing has been completed
@@ -1897,7 +1874,6 @@
                 return;
             }
             checkState(appCfgHandler != null, "NetworkConfigEventHandler is not initialized");
-            checkState(xConnectHandler != null, "XConnectHandler is not initialized");
             switch (event.type()) {
                 case CONFIG_ADDED:
                 case CONFIG_UPDATED:
@@ -1924,8 +1900,7 @@
 
             if (!event.configClass().equals(SegmentRoutingDeviceConfig.class) &&
                     !event.configClass().equals(SegmentRoutingAppConfig.class) &&
-                    !event.configClass().equals(InterfaceConfig.class) &&
-                    !event.configClass().equals(XConnectConfig.class)) {
+                    !event.configClass().equals(InterfaceConfig.class)) {
                 log.debug("Ignore event {} due to class mismatch", event);
                 return false;
             }