X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fmodification%2FMutableCompositeModification.java;h=f2a8c00d19035120b8bcac7b522d3d97465cd29e;hb=583f30d1c7a8199b401c9393745c62fe27b5ced8;hp=0c9a73a0d0dd913538beb5bf8f3279866f46bba3;hpb=24c074a4b32ac97980a652b78824b7c2f97ffb78;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java index 0c9a73a0d0..f2a8c00d19 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java @@ -13,23 +13,24 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.opendaylight.controller.cluster.datastore.DataStoreVersions; import org.opendaylight.controller.cluster.datastore.messages.VersionedExternalizableMessage; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput; import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputStreamReader; -import org.opendaylight.controller.cluster.datastore.utils.SerializationUtils; +import org.opendaylight.controller.cluster.datastore.node.utils.stream.SerializationUtils; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; /** - * MutableCompositeModification is just a mutable version of a - * CompositeModification {@link org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification#addModification(Modification)} + * MutableCompositeModification is just a mutable version of a CompositeModification. */ public class MutableCompositeModification extends VersionedExternalizableMessage implements CompositeModification { private static final long serialVersionUID = 1L; private final List modifications = new ArrayList<>(); + private List immutableModifications = null; public MutableCompositeModification() { this(DataStoreVersions.CURRENT_VERSION); @@ -59,18 +60,28 @@ public class MutableCompositeModification extends VersionedExternalizableMessage } /** - * Add a new Modification to the list of Modifications represented by this - * composite + * Add a new Modification to the list of Modifications represented by this composite. * - * @param modification + * @param modification the modification to add. */ public void addModification(Modification modification) { + Preconditions.checkNotNull(modification); modifications.add(modification); } + public void addModifications(Iterable newMods) { + for (Modification mod : newMods) { + addModification(mod); + } + } + @Override public List getModifications() { - return modifications; + if (immutableModifications == null) { + immutableModifications = Collections.unmodifiableList(modifications); + } + + return immutableModifications; } @Override @@ -79,25 +90,27 @@ public class MutableCompositeModification extends VersionedExternalizableMessage int size = in.readInt(); - if(size > 1) { + if (size > 1) { SerializationUtils.REUSABLE_READER_TL.set(new NormalizedNodeInputStreamReader(in)); } try { - for(int i = 0; i < size; i++) { + for (int i = 0; i < size; i++) { byte type = in.readByte(); - switch(type) { - case Modification.WRITE: - modifications.add(WriteModification.fromStream(in, getVersion())); - break; - - case Modification.MERGE: - modifications.add(MergeModification.fromStream(in, getVersion())); - break; - - case Modification.DELETE: - modifications.add(DeleteModification.fromStream(in, getVersion())); - break; + switch (type) { + case Modification.WRITE: + modifications.add(WriteModification.fromStream(in, getVersion())); + break; + + case Modification.MERGE: + modifications.add(MergeModification.fromStream(in, getVersion())); + break; + + case Modification.DELETE: + modifications.add(DeleteModification.fromStream(in, getVersion())); + break; + default: + break; } } } finally { @@ -111,12 +124,12 @@ public class MutableCompositeModification extends VersionedExternalizableMessage out.writeInt(modifications.size()); - if(modifications.size() > 1) { + if (modifications.size() > 1) { SerializationUtils.REUSABLE_WRITER_TL.set(NormalizedNodeInputOutput.newDataOutput(out)); } try { - for(Modification mod: modifications) { + for (Modification mod: modifications) { out.writeByte(mod.getType()); mod.writeExternal(out); }