Do not generate 'isFoo()' methods
[mdsal.git] / dom / mdsal-dom-broker / src / main / java / org / opendaylight / mdsal / dom / broker / ShardedDOMDataTreeProducer.java
index b7c2e58e523a653a1135bf5be87ceb9f36b44c16..748ed71af3274438b8441650bcaf26811f5c503a 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.mdsal.dom.broker;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.Preconditions;
 import com.google.common.base.Verify;
 import com.google.common.collect.ImmutableSet;
@@ -15,9 +17,12 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import javax.annotation.concurrent.GuardedBy;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.checkerframework.checker.lock.qual.Holding;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerBusyException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
@@ -50,13 +55,13 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
             AtomicIntegerFieldUpdater.newUpdater(ShardedDOMDataTreeProducer.class, "closed");
     private volatile int closed;
 
-    private volatile ShardedDOMDataTreeListenerContext<?> attachedListener;
+    private volatile DOMDataTreeListener attachedListener;
     private volatile ProducerLayout layout;
 
-    private ShardedDOMDataTreeProducer(final ShardedDOMDataTree dataTree,
+    ShardedDOMDataTreeProducer(final ShardedDOMDataTree dataTree,
                                final Collection<DOMDataTreeIdentifier> subtrees,
                                final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
-        this.dataTree = Preconditions.checkNotNull(dataTree);
+        this.dataTree = requireNonNull(dataTree);
         this.subtrees = ImmutableSet.copyOf(subtrees);
         this.layout = ProducerLayout.create(shardMap);
     }
@@ -77,7 +82,6 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
 
     void subshardAdded(final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
         checkIdle();
-
         layout = layout.reshard(shardMap);
     }
 
@@ -142,13 +146,14 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
         }
     }
 
-    @GuardedBy("this")
+    @Holding("this")
     private void submitTransaction(final ShardedDOMDataTreeWriteTransaction tx) {
         lastTx = tx;
         tx.doSubmit(this::transactionSuccessful, this::transactionFailed);
     }
 
     @Override
+    @SuppressWarnings("checkstyle:hiddenField")
     public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
         checkNotClosed();
         checkIdle();
@@ -192,6 +197,7 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
         if (CLOSED_UPDATER.compareAndSet(this, 0, 1)) {
             synchronized (this) {
                 dataTree.destroyProducer(this);
+                layout.close();
             }
         }
     }
@@ -249,7 +255,7 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
     private void transactionSuccessful(final ShardedDOMDataTreeWriteTransaction tx) {
         LOG.debug("Transaction {} completed successfully", tx.getIdentifier());
 
-        tx.onTransactionSuccess(null);
+        tx.onTransactionSuccess(CommitInfo.empty());
         transactionCompleted(tx);
     }
 
@@ -268,15 +274,9 @@ class ShardedDOMDataTreeProducer implements DOMDataTreeProducer {
         }
     }
 
-    void bindToListener(final ShardedDOMDataTreeListenerContext<?> listener) {
-        Preconditions.checkNotNull(listener);
-
-        final ShardedDOMDataTreeListenerContext<?> local = attachedListener;
-        if (local != null) {
-            throw new IllegalStateException(String.format("Producer %s is already attached to listener %s", this,
-                local.getListener()));
-        }
-
-        this.attachedListener = listener;
+    void bindToListener(final DOMDataTreeListener listener) {
+        final DOMDataTreeListener local = attachedListener;
+        Preconditions.checkState(local == null, "Producer %s is already attached to listener %s", this, local);
+        this.attachedListener = requireNonNull(listener);
     }
 }