Bump versions to 6.0.1-SNAPSHOT
[mdsal.git] / dom / mdsal-dom-broker / src / main / java / org / opendaylight / mdsal / dom / broker / ProducerLayout.java
index fccf22ddb8d6d6ded0ccddce39eaa343d42abf8b..6b5a0a531bd116122bfba2f76df6e679f45673bb 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.collect.ArrayListMultimap;
 import com.google.common.collect.BiMap;
@@ -23,9 +25,9 @@ import java.util.Set;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShard;
-import org.opendaylight.mdsal.dom.store.inmemory.DOMDataTreeShardProducer;
-import org.opendaylight.mdsal.dom.store.inmemory.DOMDataTreeShardWriteTransaction;
-import org.opendaylight.mdsal.dom.store.inmemory.WriteableDOMDataTreeShard;
+import org.opendaylight.mdsal.dom.spi.shard.DOMDataTreeShardProducer;
+import org.opendaylight.mdsal.dom.spi.shard.DOMDataTreeShardWriteTransaction;
+import org.opendaylight.mdsal.dom.spi.shard.WriteableDOMDataTreeShard;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.slf4j.Logger;
@@ -42,8 +44,8 @@ final class ProducerLayout {
             final BiMap<DOMDataTreeIdentifier, DOMDataTreeShardProducer> idToProducer,
             final Map<DOMDataTreeIdentifier, DOMDataTreeProducer> children) {
         this.shardMap = ImmutableMap.copyOf(shardMap);
-        this.idToProducer = Preconditions.checkNotNull(idToProducer);
-        this.children = Preconditions.checkNotNull(children);
+        this.idToProducer = requireNonNull(idToProducer);
+        this.children = requireNonNull(children);
     }
 
     static ProducerLayout create(final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
@@ -86,8 +88,9 @@ final class ProducerLayout {
         return new ProducerLayout(shardMap, idToProducer, cb.build());
     }
 
-    ProducerLayout reshard(final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
-        return new ProducerLayout(shardMap, mapIdsToProducer(shardMap), children);
+    ProducerLayout reshard(final Map<DOMDataTreeIdentifier, DOMDataTreeShard> newShardMap) {
+        close();
+        return new ProducerLayout(newShardMap, mapIdsToProducer(newShardMap), children);
     }
 
     boolean haveSubtree(final DOMDataTreeIdentifier subtree) {
@@ -130,6 +133,13 @@ final class ProducerLayout {
     }
 
     Map<DOMDataTreeIdentifier, DOMDataTreeShardWriteTransaction> createTransactions() {
+        Preconditions.checkState(!idToProducer.isEmpty(),
+                "Cannot create transaction since the producer is not mapped to any shard");
         return Maps.transformValues(idToProducer, DOMDataTreeShardProducer::createTransaction);
     }
+
+    void close() {
+        idToProducer.values().forEach(DOMDataTreeShardProducer::close);
+    }
+
 }