Split out TransactionContext classes
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / modification / MutableCompositeModification.java
index 9f37ba42d3c97076af0dfff3146c61338036968d..04854d26b2c060ae3b231481d1933a663e6d0b49 100644 (file)
@@ -8,9 +8,10 @@
 
 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.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -20,7 +21,7 @@ import java.util.List;
  * CompositeModification {@link org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification#addModification(Modification)}
  */
 public class MutableCompositeModification
-    implements CompositeModification, Serializable {
+    implements CompositeModification {
 
     private static final long serialVersionUID = 1163377899140186790L;
 
@@ -46,4 +47,35 @@ public class MutableCompositeModification
     public List<Modification> getModifications() {
         return Collections.unmodifiableList(modifications);
     }
+
+    @Override public Object toSerializable() {
+        PersistentMessages.CompositeModification.Builder builder =
+            PersistentMessages.CompositeModification.newBuilder();
+
+        builder.setTimeStamp(System.nanoTime());
+
+        for (Modification m : modifications) {
+            builder.addModification(
+                (PersistentMessages.Modification) m.toSerializable());
+        }
+
+        return builder.build();
+    }
+
+    public static MutableCompositeModification fromSerializable(Object serializable, SchemaContext schemaContext){
+        PersistentMessages.CompositeModification o = (PersistentMessages.CompositeModification) serializable;
+        MutableCompositeModification compositeModification = new MutableCompositeModification();
+
+        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;
+    }
 }