package org.opendaylight.controller.cluster.datastore.modification;
+import org.opendaylight.controller.protobuff.messages.persistent.PersistentMessages;
import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class MutableCompositeModification implements CompositeModification {
- private final List<Modification> modifications = new ArrayList<>();
+/**
+ * MutableCompositeModification is just a mutable version of a
+ * CompositeModification {@link org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification#addModification(Modification)}
+ */
+public class MutableCompositeModification
+ implements CompositeModification {
+
+ private static final long serialVersionUID = 1163377899140186790L;
+
+ private final List<Modification> modifications = new ArrayList<>();
+
+ @Override
+ public void apply(DOMStoreWriteTransaction transaction) {
+ for (Modification modification : modifications) {
+ modification.apply(transaction);
+ }
+ }
+
+ /**
+ * Add a new Modification to the list of Modifications represented by this
+ * composite
+ *
+ * @param modification
+ */
+ public void addModification(Modification modification) {
+ modifications.add(modification);
+ }
+
+ public List<Modification> getModifications() {
+ return Collections.unmodifiableList(modifications);
+ }
- @Override
- public void apply(DOMStoreWriteTransaction transaction) {
- for(Modification modification : modifications){
- modification.apply(transaction);
+ @Override public Object toSerializable() {
+ PersistentMessages.CompositeModification.Builder builder =
+ PersistentMessages.CompositeModification.newBuilder();
+
+ for (Modification m : modifications) {
+ builder.addModification(
+ (PersistentMessages.Modification) m.toSerializable());
+ }
+
+ return builder.build();
}
- }
- public void addModification(Modification modification){
- modifications.add(modification);
- }
+ public static MutableCompositeModification fromSerializable(Object serializable, SchemaContext schemaContext){
+ PersistentMessages.CompositeModification o = (PersistentMessages.CompositeModification) serializable;
+ MutableCompositeModification compositeModification = new MutableCompositeModification();
- public List<Modification> getModifications(){
- return Collections.unmodifiableList(modifications);
- }
+ for(PersistentMessages.Modification m : o.getModificationList()){
+ if(m.getType().equals(DeleteModification.class.toString())){
+ compositeModification.addModification(DeleteModification.fromSerializable(m));
+ } else if(m.getType().equals(WriteModification.class.toString())){
+ compositeModification.addModification(WriteModification.fromSerializable(m, schemaContext));
+ } else if(m.getType().equals(MergeModification.class.toString())){
+ compositeModification.addModification(MergeModification.fromSerializable(m, schemaContext));
+ }
+ }
+ return compositeModification;
+ }
}