Tex typo issues, Code
[iotcloud.git] / src2 / java / iotcloud / Transaction.java
1 package iotcloud;
2
3 import java.nio.ByteBuffer;
4 import java.util.Set;
5 import java.util.HashSet;
6
7 class Transaction extends Entry {
8
9     private long seqnum;
10     private long machineid;
11     private Set<KeyValue> keyValueUpdateSet = null;
12     private Guard guard;
13
14     public Transaction(Slot slot, long _seqnum, long _machineid, Set<KeyValue> _keyValueUpdateSet, Guard _guard) {
15         super(slot);
16         seqnum = _seqnum;
17         machineid = _machineid;
18
19         for (KeyValue kv : _keyValueUpdateSet) {
20             KeyValue kvCopy = kv.getCopy();
21             keyValueUpdateSet.add(kvCopy);
22         }
23
24         guard = _guard.getCopy();
25     }
26
27     public long getMachineID() {
28         return machineid;
29     }
30
31     public long getSequenceNumber() {
32         return seqnum;
33     }
34
35     public Set<KeyValue> getkeyValueUpdateSet() {
36         return keyValueUpdateSet;
37     }
38
39
40     public byte getType() {
41         return Entry.TypeTransaction;
42     }
43
44     public int getSize() {
45         int size = 2 * Long.BYTES + Byte.BYTES; // seq, machine id, entry type
46         size += Integer.BYTES; // number of KV's
47
48         // Size of each KV
49         for (KeyValue kv : keyValueUpdateSet) {
50             size += kv.getSize();
51         }
52
53         // Size of the guard
54         size += guard.getSize();
55
56         return size;
57     }
58
59
60     public void encode(ByteBuffer bb) {
61         bb.put(Entry.TypeTransaction);
62         bb.putLong(seqnum);
63         bb.putLong(machineid);
64
65         bb.putInt(keyValueUpdateSet.size());
66         for (KeyValue kv : keyValueUpdateSet) {
67             kv.encode(bb);
68         }
69
70         guard.encode(bb);
71     }
72
73     static Entry decode(Slot slot, ByteBuffer bb) {
74         long seqnum = bb.getLong();
75         long machineid = bb.getLong();
76         int numberOfKeys = bb.getInt();
77
78         Set<KeyValue> kvSet = new HashSet<KeyValue>();
79         for (int i = 0; i < numberOfKeys; i++) {
80             KeyValue kv = KeyValue.decode(bb);
81             kvSet.add(kv);
82         }
83
84         Guard guard = Guard.decode(bb);
85
86         return new Transaction(slot, seqnum, machineid, kvSet, guard);
87     }
88
89     public Entry getCopy(Slot s) {
90         return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);
91     }
92 }