Phone app (based on Ali's Control for iotcloud benchmark) to control alarm in the...
[iot2.git] / benchmarks / other / PhoneInterface / Control / app / src / main / java / iotcloud / TransactionPart.java
1 package iotcloud;
2
3 import java.nio.ByteBuffer;
4
5 class TransactionPart extends Entry {
6
7     // Max size of the part excluding the fixed size header
8     public static final int MAX_NON_HEADER_SIZE = 512;
9
10     private long sequenceNumber = -1;
11     private long machineId = -1;
12     private long arbitratorId = -1;
13     private long clientLocalSequenceNumber = -1; // Sequence number of the transaction that this is a part of
14     private int partNumber = -1; // Parts position in the
15     private Boolean isLastPart = false;
16
17     private Pair<Long, Long> transactionId = null;
18     private Pair<Long, Integer> partId = null;
19
20     private byte[] data = null;
21
22     public TransactionPart(Slot s, long _machineId, long _arbitratorId, long _clientLocalSequenceNumber, int _partNumber, byte[] _data, Boolean _isLastPart) {
23         super(s);
24         machineId = _machineId;
25         arbitratorId = _arbitratorId;
26         clientLocalSequenceNumber = _clientLocalSequenceNumber;
27         partNumber = _partNumber;
28         data = _data;
29         isLastPart = _isLastPart;
30
31         transactionId = new Pair<Long, Long>(machineId, clientLocalSequenceNumber);
32         partId = new Pair<Long, Integer>(clientLocalSequenceNumber, partNumber);
33
34     }
35
36     public int getSize() {
37         if (data == null) {
38             //return (4 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES);
39             return (4 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8);
40         }
41         //return (4 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
42         return (4 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8) + data.length;
43     }
44
45     public void setSlot(Slot s) {
46         parentslot = s;
47     }
48
49     public Pair<Long, Long> getTransactionId() {
50         return transactionId;
51     }
52
53     public long getArbitratorId() {
54         return arbitratorId;
55     }
56
57     public Pair<Long, Integer> getPartId() {
58         return partId;
59     }
60
61     public int getPartNumber() {
62         return partNumber;
63     }
64
65     public int getDataSize() {
66         return data.length;
67     }
68
69     public byte[] getData() {
70         return data;
71     }
72
73     public Boolean isLastPart() {
74         return isLastPart;
75     }
76
77     public long getMachineId() {
78         return machineId;
79     }
80
81     public long getClientLocalSequenceNumber() {
82         return clientLocalSequenceNumber;
83     }
84
85
86     public long getSequenceNumber() {
87         return sequenceNumber;
88     }
89
90     public void setSequenceNumber(long _sequenceNumber) {
91         sequenceNumber = _sequenceNumber;
92     }
93
94     static Entry decode(Slot s, ByteBuffer bb) {
95         long sequenceNumber = bb.getLong();
96         long machineId = bb.getLong();
97         long arbitratorId = bb.getLong();
98         long clientLocalSequenceNumber = bb.getLong();
99         int partNumber = bb.getInt();
100         int dataSize = bb.getInt();
101         Boolean isLastPart = (bb.get() == 1);
102         // Get the data
103         byte[] data = new byte[dataSize];
104         bb.get(data);
105
106         TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
107         returnTransactionPart.setSequenceNumber(sequenceNumber);
108
109         return returnTransactionPart;
110     }
111
112     public void encode(ByteBuffer bb) {
113         bb.put(Entry.TypeTransactionPart);
114         bb.putLong(sequenceNumber);
115         bb.putLong(machineId);
116         bb.putLong(arbitratorId);
117         bb.putLong(clientLocalSequenceNumber);
118         bb.putInt(partNumber);
119         bb.putInt(data.length);
120
121         if (isLastPart) {
122             bb.put((byte)1);
123         } else {
124             bb.put((byte)0);
125         }
126
127         bb.put(data);
128     }
129
130     public byte getType() {
131         return Entry.TypeTransactionPart;
132     }
133
134     public Entry getCopy(Slot s) {
135
136         TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
137         copyTransaction.setSequenceNumber(sequenceNumber);
138
139         return copyTransaction;
140     }
141 }