Initial Working version of IoTCloudv2, needs more testing
[iotcloud.git] / src2 / java / iotcloud / Transaction.java
index d1a993389bf6ac4ef63f2079ff084bb1d7e0f25b..5acd5c2d0afa0ffc67435c42af198352ad69c1b8 100644 (file)
@@ -8,15 +8,22 @@ class Transaction extends Entry {
 
     private long seqnum;
     private long machineid;
-    private Set<KeyValue> keyValueUpdateSet;
+    private Set<KeyValue> keyValueUpdateSet = null;
     private Guard guard;
 
     public Transaction(Slot slot, long _seqnum, long _machineid, Set<KeyValue> _keyValueUpdateSet, Guard _guard) {
         super(slot);
         seqnum = _seqnum;
         machineid = _machineid;
-        keyValueUpdateSet = _keyValueUpdateSet;
-        guard = _guard;
+
+        keyValueUpdateSet = new HashSet<KeyValue>();
+
+        for (KeyValue kv : _keyValueUpdateSet) {
+            KeyValue kvCopy = kv.getCopy();
+            keyValueUpdateSet.add(kvCopy);
+        }
+
+        guard = _guard.getCopy();
     }
 
     public long getMachineID() {
@@ -27,8 +34,16 @@ class Transaction extends Entry {
         return seqnum;
     }
 
+    public Set<KeyValue> getkeyValueUpdateSet() {
+        return keyValueUpdateSet;
+    }
+
+    public Guard getGuard() {
+        return guard;
+    }
+
     public byte getType() {
-        return Entry.TypeLastMessage;
+        return Entry.TypeTransaction;
     }
 
     public int getSize() {
@@ -52,6 +67,7 @@ class Transaction extends Entry {
         bb.putLong(seqnum);
         bb.putLong(machineid);
 
+        bb.putInt(keyValueUpdateSet.size());
         for (KeyValue kv : keyValueUpdateSet) {
             kv.encode(bb);
         }
@@ -65,7 +81,6 @@ class Transaction extends Entry {
         int numberOfKeys = bb.getInt();
 
         Set<KeyValue> kvSet = new HashSet<KeyValue>();
-
         for (int i = 0; i < numberOfKeys; i++) {
             KeyValue kv = KeyValue.decode(bb);
             kvSet.add(kv);
@@ -76,8 +91,6 @@ class Transaction extends Entry {
         return new Transaction(slot, seqnum, machineid, kvSet, guard);
     }
 
-
-
     public Entry getCopy(Slot s) {
         return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);
     }