Initial code drop of yang model driven configuration system
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / TransactionStatus.java
diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/TransactionStatus.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/TransactionStatus.java
new file mode 100644 (file)
index 0000000..a250620
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2013 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.config.manager.impl;
+
+import javax.annotation.concurrent.GuardedBy;
+
+public class TransactionStatus {
+    @GuardedBy("this")
+    private boolean secondPhaseCommitStarted = false;
+    // switches to true during abort or commit failure
+    @GuardedBy("this")
+    private boolean aborted;
+    // switches to true during second phase commit
+    @GuardedBy("this")
+    private boolean committed;
+
+    public synchronized boolean isSecondPhaseCommitStarted() {
+        return secondPhaseCommitStarted;
+    }
+
+    synchronized void setSecondPhaseCommitStarted() {
+        this.secondPhaseCommitStarted = true;
+    }
+
+    public synchronized boolean isAborted() {
+        return aborted;
+    }
+
+    synchronized void setAborted() {
+        this.aborted = true;
+    }
+
+    public synchronized boolean isCommitted() {
+        return committed;
+    }
+
+    synchronized void setCommitted() {
+        this.committed = true;
+    }
+
+    public synchronized boolean isAbortedOrCommitted() {
+        return aborted || committed;
+    }
+
+    public synchronized void checkNotCommitStarted() {
+        if (secondPhaseCommitStarted == true)
+            throw new IllegalStateException("Commit was triggered");
+    }
+
+    public synchronized void checkCommitStarted() {
+        if (secondPhaseCommitStarted == false)
+            throw new IllegalStateException("Commit was not triggered");
+    }
+
+    public synchronized void checkNotAborted() {
+        if (aborted == true)
+            throw new IllegalStateException("Configuration was aborted");
+    }
+
+    public synchronized void checkNotCommitted() {
+        if (committed == true) {
+            throw new IllegalStateException(
+                    "Cannot use this method after second phase commit");
+        }
+    }
+
+    public synchronized void checkCommitted() {
+        if (committed == false) {
+            throw new IllegalStateException(
+                    "Cannot use this method before second phase commit");
+        }
+    }
+}