Stuff
[iotcloud.git] / version2 / src / java / iotcloud / CommitPart.java
1
2
3 package iotcloud;
4
5 import java.nio.ByteBuffer;
6
7 class CommitPart extends Entry{
8
9     // Max size of the part excluding the fixed size header
10     public static final int MAX_NON_HEADER_SIZE = 512;
11
12
13     // Sequence number of the transaction this commit is for, -1 if not a cloud transaction
14     private long machineId = -1; // Machine Id of the device that made the commit
15     private long sequenceNumber = -1; // commit sequence number for this arbitrator
16     private long transactionSequenceNumber = -1;
17     private int partNumber = -1; // Parts position in the
18     private Boolean isLastPart = false;
19     private byte[] data = null;
20
21     private Pair<Long, Integer> partId = null;
22     private Pair<Long, Long> commitId = null;
23
24
25     public CommitPart(Slot s, long _machineId, long _sequenceNumber, long _transactionSequenceNumber, int _partNumber, byte[] _data, Boolean _isLastPart) {
26         super(s);
27         machineId = _machineId;
28         sequenceNumber = _sequenceNumber;
29         transactionSequenceNumber = _transactionSequenceNumber;
30         partNumber = _partNumber;
31         isLastPart = _isLastPart;
32         data = _data;
33
34         partId = new Pair<Long, Integer>(sequenceNumber, partNumber);
35         commitId = new Pair<Long, Long>(machineId, sequenceNumber);
36     }
37
38     public int getSize() {
39         if (data == null) {
40             return (3 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES);
41         }
42         return (3 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
43     }
44
45     public void setSlot(Slot s) {
46         parentslot = s;
47     }
48
49     public int getPartNumber() {
50         return partNumber;
51     }
52
53     public int getDataSize() {
54         return data.length;
55     }
56
57     public byte[] getData() {
58         return data;
59     }
60
61     public Pair<Long, Integer> getPartId() {
62         return partId;
63     }
64
65     public Pair<Long, Long> getCommitId() {
66         return commitId;
67     }
68
69     public Boolean isLastPart() {
70         return isLastPart;
71     }
72
73     public long getMachineId() {
74         return machineId;
75     }
76
77     public long getTransactionSequenceNumber() {
78         return transactionSequenceNumber;
79     }
80
81     public long getSequenceNumber() {
82         return sequenceNumber;
83     }
84
85     static Entry decode(Slot s, ByteBuffer bb) {
86         long machineId = bb.getLong();
87         long sequenceNumber = bb.getLong();
88         long transactionSequenceNumber = bb.getLong();
89         int partNumber = bb.getInt();
90         int dataSize = bb.getInt();
91         Boolean isLastPart = bb.get() == 1;
92
93         // Get the data
94         byte[] data = new byte[dataSize];
95         bb.get(data);
96
97         return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
98     }
99
100     public void encode(ByteBuffer bb) {
101         bb.put(Entry.TypeCommitPart);
102         bb.putLong(machineId);
103         bb.putLong(sequenceNumber);
104         bb.putLong(transactionSequenceNumber);
105         bb.putInt(partNumber);
106         bb.putInt(data.length);
107
108         if (isLastPart) {
109             bb.put((byte)1);
110         } else {
111             bb.put((byte)0);
112         }
113
114         bb.put(data);
115     }
116
117     public byte getType() {
118         return Entry.TypeCommitPart;
119     }
120
121     public Entry getCopy(Slot s) {
122         return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
123     }
124 }