Fix DOMRpcRouter breakage 12/74312/1
authorTom Pantelis <tompantelis@gmail.com>
Sun, 22 Jul 2018 15:18:26 +0000 (11:18 -0400)
committerTom Pantelis <tompantelis@gmail.com>
Sun, 22 Jul 2018 15:18:26 +0000 (11:18 -0400)
https://git.opendaylight.org/gerrit/#/c/74209/ broke the DOMRpcRouter
for UTs that use the empty constructor. The mdsal DOMRpcRouter no longer
implements DOMRpcProviderService directly so the SchemaContext was not
getting set via onGlobalContextUpdated.

Change-Id: Ic9381742f43b05264724eb80eef41201a1285c2a
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRouter.java

index f95ef1a9367c9cb9bd62daaeb8456a10af06a889..6446cbd3ae617a6c7939937885787307471e794b 100644 (file)
@@ -43,17 +43,24 @@ public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcP
     private final org.opendaylight.mdsal.dom.api.DOMRpcService delegateRpcService;
     private final org.opendaylight.mdsal.dom.api.DOMRpcProviderService delegateRpcProviderService;
 
+    // Note - this is only used for backward compatibility for UTs that use the empty constructor which creates
+    // a local mdsal DOMRpcRouter that needs to be updated with the SchemaContext. In production, the mdsal API
+    // services are passed via the constructor and are set up externally with the SchemaContext.
+    private final SchemaContextListener delegateSchemaContextListener;
+
     @VisibleForTesting
     public DOMRpcRouter() {
         org.opendaylight.mdsal.dom.broker.DOMRpcRouter delegate = new org.opendaylight.mdsal.dom.broker.DOMRpcRouter();
         this.delegateRpcService = delegate.getRpcService();
         this.delegateRpcProviderService = delegate.getRpcProviderService();
+        this.delegateSchemaContextListener = delegate;
     }
 
     public DOMRpcRouter(final org.opendaylight.mdsal.dom.api.DOMRpcService delegateRpcService,
             final org.opendaylight.mdsal.dom.api.DOMRpcProviderService delegateRpcProviderService) {
         this.delegateRpcService = delegateRpcService;
         this.delegateRpcProviderService = delegateRpcProviderService;
+        this.delegateSchemaContextListener = null;
     }
 
     @Override
@@ -159,8 +166,8 @@ public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcP
     @Override
     @VisibleForTesting
     public void onGlobalContextUpdated(final SchemaContext context) {
-        if (delegateRpcService instanceof SchemaContextListener) {
-            ((SchemaContextListener)delegateRpcService).onGlobalContextUpdated(context);
+        if (delegateSchemaContextListener != null) {
+            delegateSchemaContextListener.onGlobalContextUpdated(context);
         }
     }
 }