Fix logging arguments
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / util / NetconfSalKeystoreService.java
index 7cb9216a5748bd16014bb996dbae5262364442e2..6608f21e6e9db92ccc1b6123085b7eab3639c4bb 100644 (file)
@@ -5,31 +5,48 @@
  * 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.netconf.sal.connect.util;
 
-import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.List;
-import java.util.concurrent.Future;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
-import javax.annotation.Nullable;
 import org.opendaylight.aaa.encrypt.AAAEncryptionService;
-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 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.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.Keystore;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.KeystoreBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.NetconfKeystoreService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017._private.keys.PrivateKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017._private.keys.PrivateKeyKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredential;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.trusted.certificates.TrustedCertificate;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.trusted.certificates.TrustedCertificateKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -61,18 +78,17 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
         writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, keystoreIid, keystore);
 
-        final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
-
         try {
-            submit.checkedGet();
+            writeTransaction.commit().get();
             LOG.debug("init keystore done");
-        } catch (TransactionCommitFailedException exception) {
+        } catch (InterruptedException | ExecutionException exception) {
             LOG.error("Unable to initialize Netconf key-pair store.", exception);
         }
     }
 
     @Override
-    public Future<RpcResult<Void>> removeKeystoreEntry(final RemoveKeystoreEntryInput input) {
+    public ListenableFuture<RpcResult<RemoveKeystoreEntryOutput>> removeKeystoreEntry(
+            final RemoveKeystoreEntryInput input) {
         LOG.debug("Removing keypairs: {}", input);
 
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
@@ -83,15 +99,13 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
                     keystoreIid.child(KeyCredential.class, new KeyCredentialKey(id)));
         }
 
-        final SettableFuture<RpcResult<Void>> rpcResult = SettableFuture.create();
+        final SettableFuture<RpcResult<RemoveKeystoreEntryOutput>> rpcResult = SettableFuture.create();
 
-        final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
-        Futures.addCallback(submit, new FutureCallback<Void>() {
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(@Nullable final Void result) {
-                LOG.debug("remove-key-pair success. Input: {}");
-                final RpcResult<Void> success = RpcResultBuilder.<Void>success().build();
-                rpcResult.set(success);
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("remove-key-pair success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new RemoveKeystoreEntryOutputBuilder().build()).build());
             }
 
             @Override
@@ -105,7 +119,7 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
     }
 
     @Override
-    public Future<RpcResult<Void>> addKeystoreEntry(final AddKeystoreEntryInput input) {
+    public ListenableFuture<RpcResult<AddKeystoreEntryOutput>> addKeystoreEntry(final AddKeystoreEntryInput input) {
         LOG.debug("Adding keypairs: {}", input);
 
         final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
@@ -117,18 +131,16 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
 
         for (KeyCredential keypair : keypairs) {
             writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
-                    keystoreIid.child(KeyCredential.class, keypair.getKey()), keypair);
+                    keystoreIid.child(KeyCredential.class, keypair.key()), keypair);
         }
 
-        final SettableFuture<RpcResult<Void>> rpcResult = SettableFuture.create();
+        final SettableFuture<RpcResult<AddKeystoreEntryOutput>> rpcResult = SettableFuture.create();
 
-        final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
-        Futures.addCallback(submit, new FutureCallback<Void>() {
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
-            public void onSuccess(@Nullable final Void result) {
-                LOG.debug("add-key-pair success. Input: {}");
-                final RpcResult<Void> success = RpcResultBuilder.<Void>success().build();
-                rpcResult.set(success);
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("add-key-pair success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new AddKeystoreEntryOutputBuilder().build()).build());
             }
 
             @Override
@@ -140,4 +152,120 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService {
 
         return rpcResult;
     }
+
+    @Override
+    public ListenableFuture<RpcResult<AddTrustedCertificateOutput>> addTrustedCertificate(
+            final AddTrustedCertificateInput input) {
+        final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+
+        for (TrustedCertificate certificate : input.getTrustedCertificate()) {
+            writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
+                    keystoreIid.child(TrustedCertificate.class, certificate.key()), certificate);
+        }
+
+        final SettableFuture<RpcResult<AddTrustedCertificateOutput>> rpcResult = SettableFuture.create();
+
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
+            @Override
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("add-trusted-certificate success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new AddTrustedCertificateOutputBuilder().build()).build());
+            }
+
+            @Override
+            public void onFailure(final Throwable throwable) {
+                LOG.warn("add-trusted-certificate failed. Input: {}", input, throwable);
+                rpcResult.setException(throwable);
+            }
+        }, MoreExecutors.directExecutor());
+
+        return rpcResult;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<RemoveTrustedCertificateOutput>> removeTrustedCertificate(
+            final RemoveTrustedCertificateInput input) {
+        final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+        final List<String> names = input.getName();
+
+        for (final String name : names) {
+            writeTransaction.delete(LogicalDatastoreType.CONFIGURATION,
+                    keystoreIid.child(TrustedCertificate.class, new TrustedCertificateKey(name)));
+        }
+
+        final SettableFuture<RpcResult<RemoveTrustedCertificateOutput>> rpcResult = SettableFuture.create();
+
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
+            @Override
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("remove-trusted-certificate success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new RemoveTrustedCertificateOutputBuilder().build()).build());
+            }
+
+            @Override
+            public void onFailure(final Throwable throwable) {
+                LOG.warn("remove-trusted-certificate failed. Input: {}", input, throwable);
+                rpcResult.setException(throwable);
+            }
+        }, MoreExecutors.directExecutor());
+
+        return rpcResult;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<AddPrivateKeyOutput>> addPrivateKey(final AddPrivateKeyInput input) {
+        final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+
+        for (PrivateKey key: input.getPrivateKey()) {
+            writeTransaction.merge(LogicalDatastoreType.CONFIGURATION,
+                    keystoreIid.child(PrivateKey.class, key.key()), key);
+        }
+
+        final SettableFuture<RpcResult<AddPrivateKeyOutput>> rpcResult = SettableFuture.create();
+
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
+            @Override
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("add-private-key success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new AddPrivateKeyOutputBuilder().build()).build());
+            }
+
+            @Override
+            public void onFailure(final Throwable throwable) {
+                LOG.warn("add-private-key failed. Input: {}", input, throwable);
+                rpcResult.setException(throwable);
+            }
+        }, MoreExecutors.directExecutor());
+
+        return rpcResult;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<RemovePrivateKeyOutput>> removePrivateKey(final RemovePrivateKeyInput input) {
+        final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+        final List<String> names = input.getName();
+
+        for (final String name : names) {
+            writeTransaction.delete(LogicalDatastoreType.CONFIGURATION,
+                    keystoreIid.child(PrivateKey.class, new PrivateKeyKey(name)));
+        }
+
+        final SettableFuture<RpcResult<RemovePrivateKeyOutput>> rpcResult = SettableFuture.create();
+
+        writeTransaction.commit().addCallback(new FutureCallback<CommitInfo>() {
+            @Override
+            public void onSuccess(final CommitInfo result) {
+                LOG.debug("remove-private-key success. Input: {}", input);
+                rpcResult.set(RpcResultBuilder.success(new RemovePrivateKeyOutputBuilder().build()).build());
+            }
+
+            @Override
+            public void onFailure(final Throwable throwable) {
+                LOG.warn("remove-private-key failed. Input: {}", input, throwable);
+                rpcResult.setException(throwable);
+            }
+        }, MoreExecutors.directExecutor());
+
+        return rpcResult;
+    }
 }