Decouple config and netconf subsystems.
[controller.git] / opendaylight / config / config-manager-facade-xml / src / main / java / org / opendaylight / controller / config / facade / xml / transactions / TransactionProvider.java
@@ -1,12 +1,12 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * 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.netconf.confignetconfconnector.transactions;
+package org.opendaylight.controller.config.facade.xml.transactions;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
@@ -18,10 +18,10 @@ import javax.management.ObjectName;
 import org.opendaylight.controller.config.api.ConflictingVersionException;
 import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.facade.xml.exception.NoTransactionFoundException;
 import org.opendaylight.controller.config.util.ConfigRegistryClient;
 import org.opendaylight.controller.config.util.ConfigTransactionClient;
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-import org.opendaylight.controller.netconf.confignetconfconnector.exception.NoTransactionFoundException;
+import org.opendaylight.controller.config.util.xml.DocumentedException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -30,15 +30,15 @@ public class TransactionProvider implements AutoCloseable {
 
     private final ConfigRegistryClient configRegistryClient;
 
-    private final String netconfSessionIdForReporting;
+    private final String sessionIdForReporting;
     private ObjectName candidateTx;
     private ObjectName readTx;
     private final List<ObjectName> allOpenedTransactions = new ArrayList<>();
-    private static final String  NO_TRANSACTION_FOUND_FOR_SESSION = "No transaction found for session ";
+    private static final String NO_TRANSACTION_FOUND_FOR_SESSION = "No transaction found for session ";
 
-    public TransactionProvider(ConfigRegistryClient configRegistryClient, String netconfSessionIdForReporting) {
+    public TransactionProvider(ConfigRegistryClient configRegistryClient, String sessionIdForReporting) {
         this.configRegistryClient = configRegistryClient;
-        this.netconfSessionIdForReporting = netconfSessionIdForReporting;
+        this.sessionIdForReporting = sessionIdForReporting;
     }
 
     @Override
@@ -63,8 +63,7 @@ public class TransactionProvider implements AutoCloseable {
 
         // Transaction was already closed somehow
         if (!isStillOpenTransaction(candidateTx)) {
-            LOG.warn("Fixing illegal state: transaction {} was closed in {}", candidateTx,
-                    netconfSessionIdForReporting);
+            LOG.warn("Fixing illegal state: transaction {} was closed in {}", candidateTx, sessionIdForReporting);
             candidateTx = null;
             return Optional.absent();
         }
@@ -79,8 +78,7 @@ public class TransactionProvider implements AutoCloseable {
 
         // Transaction was already closed somehow
         if (!isStillOpenTransaction(readTx)) {
-            LOG.warn("Fixing illegal state: transaction {} was closed in {}", readTx,
-                    netconfSessionIdForReporting);
+            LOG.warn("Fixing illegal state: transaction {} was closed in {}", readTx, sessionIdForReporting);
             readTx = null;
             return Optional.absent();
         }
@@ -125,12 +123,21 @@ public class TransactionProvider implements AutoCloseable {
     /**
      * Commit and notification send must be atomic
      */
-    public synchronized CommitStatus commitTransaction() throws ValidationException, ConflictingVersionException, NoTransactionFoundException {
+    public CommitStatus commitTransaction() throws ValidationException, ConflictingVersionException,
+        NoTransactionFoundException {
+        return commitTransaction(configRegistryClient);
+    }
+
+    /**
+     * Commit and notification send must be atomic
+     * @param configRegistryClient
+     */
+    public synchronized CommitStatus commitTransaction(final ConfigRegistryClient configRegistryClient) throws ValidationException, ConflictingVersionException, NoTransactionFoundException {
         if (!getTransaction().isPresent()){
-            throw new NoTransactionFoundException("No transaction found for session " + netconfSessionIdForReporting,
-                    NetconfDocumentedException.ErrorType.application,
-                    NetconfDocumentedException.ErrorTag.operation_failed,
-                    NetconfDocumentedException.ErrorSeverity.error);
+            throw new NoTransactionFoundException("No transaction found for session " + sessionIdForReporting,
+                    DocumentedException.ErrorType.application,
+                    DocumentedException.ErrorTag.operation_failed,
+                    DocumentedException.ErrorSeverity.error);
         }
         final Optional<ObjectName> maybeTaON = getTransaction();
         ObjectName taON = maybeTaON.get();
@@ -155,7 +162,7 @@ public class TransactionProvider implements AutoCloseable {
     public synchronized void abortTransaction() {
         LOG.debug("Aborting current transaction");
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + sessionIdForReporting);
 
         ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON.get());
         transactionClient.abortConfig();
@@ -166,7 +173,7 @@ public class TransactionProvider implements AutoCloseable {
     public synchronized void closeReadTransaction() {
         LOG.debug("Closing read transaction");
         Optional<ObjectName> taON = getReadTransaction();
-        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + sessionIdForReporting);
 
         ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON.get());
         transactionClient.abortConfig();
@@ -183,7 +190,7 @@ public class TransactionProvider implements AutoCloseable {
 
     public void validateTransaction() throws ValidationException {
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + sessionIdForReporting);
 
         ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON.get());
         transactionClient.validateConfig();
@@ -227,7 +234,7 @@ public class TransactionProvider implements AutoCloseable {
 
     public void wipeTransaction() {
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + sessionIdForReporting);
         wipeInternal(taON.get(), false);
     }