package common; import PBFT.TTransaction; import PBFT.Viewstamp; import gameengine.ChineseCheckersOperationFactory; import gameengine.ChineseCheckersState; import statemachine.Operation; /** * Created by andrew on 11/27/14. */ public class Transaction<T> { private Viewstamp id; private final int targetIndex; private final T value; private boolean prepared; private boolean committed; private int replicaID; public Transaction(Viewstamp id, int targetIndex, T value, int replicaID) { this.id = id; this.targetIndex = targetIndex; this.value = value; this.committed = false; this.replicaID = replicaID; } public T getValue() { return value; } public int getReplicaId() { return replicaID; } public void prepare() { prepared = true; } public void commit() { committed = true; } public boolean isPrepared() { return prepared; } public boolean isCommitted() { return committed; } public Viewstamp getViewstamp() { return id; } public static Transaction<Operation<ChineseCheckersState>> getTransactionForPBFTTransaction(TTransaction transaction) { Transaction<Operation<ChineseCheckersState>> commonTransaction = new Transaction<Operation<ChineseCheckersState>>( transaction.getViewstamp(), transaction.viewstamp.getSequenceNumber(), ChineseCheckersOperationFactory.hydrate(transaction.getOperation()), transaction.getReplicaId()); return commonTransaction; } public static TTransaction serialize(Transaction<Operation<ChineseCheckersState>> transaction) { TTransaction thriftTransaction = new TTransaction(); thriftTransaction.setReplicaId(transaction.getReplicaId()); thriftTransaction.setViewstamp(transaction.getViewstamp()); thriftTransaction.setOperation(transaction.getValue().serialize()); return thriftTransaction; } }