Migrate netconf to MD-SAL APIs
[netconf.git] / netconf / mdsal-netconf-notification / src / main / java / org / opendaylight / controller / config / yang / netconf / mdsal / notification / NotificationToMdsalWriter.java
index 1535b987f983eb718aee58984bc0511d78f1d755..d19fa0b77746980800f62d1c829cc10ed33e352e 100644 (file)
@@ -5,16 +5,15 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.config.yang.netconf.mdsal.notification;
 
-import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import com.google.common.util.concurrent.MoreExecutors;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netconf.notifications.NetconfNotificationCollector;
 import org.opendaylight.netconf.notifications.NotificationRegistration;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
@@ -34,6 +33,8 @@ public final class NotificationToMdsalWriter implements AutoCloseable, NetconfNo
         .NetconfNotificationStreamListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(NotificationToMdsalWriter.class);
+    private static final InstanceIdentifier<Streams> STREAMS = InstanceIdentifier.builder(Netconf.class)
+            .child(Streams.class).build();
 
     private final NetconfNotificationCollector netconfNotificationCollector;
     private final DataBroker dataBroker;
@@ -49,19 +50,18 @@ public final class NotificationToMdsalWriter implements AutoCloseable, NetconfNo
     public void close() {
         final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         tx.delete(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Netconf.class));
-        final CheckedFuture<Void, TransactionCommitFailedException> submit = tx.submit();
 
-        Futures.addCallback(submit, new FutureCallback<Void>() {
+        tx.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(Void avoid) {
+            public void onSuccess(final CommitInfo info) {
                 LOG.debug("Streams cleared successfully");
             }
 
             @Override
-            public void onFailure(Throwable throwable) {
+            public void onFailure(final Throwable throwable) {
                 LOG.warn("Unable to clear streams", throwable);
             }
-        });
+        }, MoreExecutors.directExecutor());
 
         notificationRegistration.close();
     }
@@ -74,36 +74,33 @@ public final class NotificationToMdsalWriter implements AutoCloseable, NetconfNo
     }
 
     @Override
-    public void onStreamRegistered(Stream stream) {
+    public void onStreamRegistered(final Stream stream) {
         final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
 
-        final InstanceIdentifier streamIdentifier = InstanceIdentifier.create(Netconf.class).child(Streams.class)
-                .builder().child(Stream.class, stream.getKey()).build();
+        final InstanceIdentifier<Stream> streamIdentifier = STREAMS.child(Stream.class, stream.key());
         tx.merge(LogicalDatastoreType.OPERATIONAL, streamIdentifier, stream, true);
 
         try {
-            tx.submit().checkedGet();
-            LOG.debug("Stream %s registered successfully.", stream.getName());
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Unable to register stream.", e);
+            tx.commit().get();
+            LOG.debug("Stream {} registered successfully.", stream.getName());
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.warn("Unable to register stream {}.", stream, e);
         }
     }
 
     @Override
-    public void onStreamUnregistered(StreamNameType stream) {
+    public void onStreamUnregistered(final StreamNameType stream) {
         final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
 
-        final StreamKey streamKey = new StreamKey(stream);
-        final InstanceIdentifier streamIdentifier = InstanceIdentifier.create(Netconf.class).child(Streams.class)
-                .builder().child(Stream.class, streamKey).build();
+        final InstanceIdentifier<Stream> streamIdentifier = STREAMS.child(Stream.class, new StreamKey(stream));
 
         tx.delete(LogicalDatastoreType.OPERATIONAL, streamIdentifier);
 
         try {
-            tx.submit().checkedGet();
-            LOG.debug("Stream %s unregistered successfully.", stream);
-        } catch (TransactionCommitFailedException e) {
-            LOG.warn("Unable to unregister stream", e);
+            tx.commit().get();
+            LOG.debug("Stream {} unregistered successfully.", stream);
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.warn("Unable to unregister stream {}", stream, e);
         }
     }
 }