package qora.transaction; import java.util.Arrays; import com.google.common.primitives.Ints; public class TransactionFactory { private static TransactionFactory instance; public static TransactionFactory getInstance() { if(instance == null) { instance = new TransactionFactory(); } return instance; } private TransactionFactory() { } public Transaction parse(byte[] data) throws Exception { //READ TYPE byte[] typeBytes = Arrays.copyOfRange(data, 0, Transaction.TYPE_LENGTH); int type = Ints.fromByteArray(typeBytes); switch(type) { case Transaction.GENESIS_TRANSACTION: //PARSE GENESIS TRANSACTION return GenesisTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.PAYMENT_TRANSACTION: //PARSE PAYMENT TRANSACTION return PaymentTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.REGISTER_NAME_TRANSACTION: //PARSE REGISTER NAME TRANSACTION return RegisterNameTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.UPDATE_NAME_TRANSACTION: //PARSE UPDATE NAME TRANSACTION return UpdateNameTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.SELL_NAME_TRANSACTION: //PARSE SELL NAME TRANSACTION return SellNameTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.CANCEL_SELL_NAME_TRANSACTION: //PARSE CANCEL SELL NAME TRANSACTION return CancelSellNameTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.BUY_NAME_TRANSACTION: //PARSE CANCEL SELL NAME TRANSACTION return BuyNameTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.CREATE_POLL_TRANSACTION: //PARSE CREATE POLL TRANSACTION return CreatePollTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.VOTE_ON_POLL_TRANSACTION: //PARSE CREATE POLL VOTE return VoteOnPollTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.ARBITRARY_TRANSACTION: //PARSE ARBITRARY TRANSACTION return ArbitraryTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.ISSUE_ASSET_TRANSACTION: //PARSE ISSUE ASSET TRANSACTION return IssueAssetTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.TRANSFER_ASSET_TRANSACTION: //PARSE TRANSFER ASSET TRANSACTION return TransferAssetTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.CREATE_ORDER_TRANSACTION: //PARSE ORDER CREATION TRANSACTION return CreateOrderTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.CANCEL_ORDER_TRANSACTION: //PARSE ORDER CANCEL return CancelOrderTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); case Transaction.MULTI_PAYMENT_TRANSACTION: //PARSE MULTI PAYMENT return MultiPaymentTransaction.Parse(Arrays.copyOfRange(data, 4, data.length)); } throw new Exception("Invalid transaction type"); } }