Prepare netconf to support YANG 1.1 actions
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / sal / NetconfDeviceSalProvider.java
index b24eb89c9927bcc3da6d7dcd1b8bcc4405de9e75..b215f882d23bf212e811f0fd56495df679c21458 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
+import org.opendaylight.controller.md.sal.dom.api.DOMActionService;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
@@ -53,20 +54,19 @@ public class NetconfDeviceSalProvider implements AutoCloseable {
         }
     };
 
-    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService,
-                                    final DataBroker dataBroker) {
-        this.id = deviceId;
-        mountInstance = new MountInstance(mountService, id);
-        this.dataBroker = dataBroker;
-        txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener);
-
-        topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain);
+    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService) {
+        this(deviceId, mountService, null);
     }
 
-    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService) {
+    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService,
+            final DataBroker dataBroker) {
         this.id = deviceId;
         mountInstance = new MountInstance(mountService, id);
-        this.dataBroker = null;
+        this.dataBroker = dataBroker;
+        if (dataBroker != null) {
+            txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener);
+            topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain);
+        }
     }
 
     public MountInstance getMountInstance() {
@@ -106,8 +106,8 @@ public class NetconfDeviceSalProvider implements AutoCloseable {
 
         private final DOMMountPointService mountService;
         private final RemoteDeviceId id;
-        private NetconfDeviceNotificationService notificationService;
 
+        private NetconfDeviceNotificationService notificationService;
         private ObjectRegistration<DOMMountPoint> topologyRegistration;
 
         MountInstance(final DOMMountPointService mountService, final RemoteDeviceId id) {
@@ -115,9 +115,15 @@ public class NetconfDeviceSalProvider implements AutoCloseable {
             this.id = Preconditions.checkNotNull(id);
         }
 
-        public synchronized void onTopologyDeviceConnected(final SchemaContext initialCtx,
+        public void onTopologyDeviceConnected(final SchemaContext initialCtx,
                 final DOMDataBroker broker, final DOMRpcService rpc,
                 final NetconfDeviceNotificationService newNotificationService) {
+            onTopologyDeviceConnected(initialCtx, broker, rpc, newNotificationService, null);
+        }
+
+        public synchronized void onTopologyDeviceConnected(final SchemaContext initialCtx,
+                final DOMDataBroker broker, final DOMRpcService rpc,
+                final NetconfDeviceNotificationService newNotificationService, DOMActionService deviceAction) {
             Preconditions.checkNotNull(mountService, "Closed");
             Preconditions.checkState(topologyRegistration == null, "Already initialized");
 
@@ -128,11 +134,13 @@ public class NetconfDeviceSalProvider implements AutoCloseable {
             mountBuilder.addService(DOMDataBroker.class, broker);
             mountBuilder.addService(DOMRpcService.class, rpc);
             mountBuilder.addService(DOMNotificationService.class, newNotificationService);
+            if (deviceAction != null) {
+                mountBuilder.addService(DOMActionService.class, deviceAction);
+            }
             this.notificationService = newNotificationService;
 
             topologyRegistration = mountBuilder.register();
             LOG.debug("{}: TOPOLOGY Mountpoint exposed into MD-SAL {}", id, topologyRegistration);
-
         }
 
         @SuppressWarnings("checkstyle:IllegalCatch")