package com.ripple.core.formats; import com.ripple.core.fields.Field; import com.ripple.core.serialized.enums.TransactionType; import java.util.EnumMap; public class TxFormat extends Format { static public EnumMap<TransactionType, TxFormat> formats = new EnumMap<TransactionType, TxFormat>(TransactionType.class); public final TransactionType transactionType; static public TxFormat fromString(String name) { return getTxFormat(TransactionType.valueOf(name)); } static public TxFormat fromNumber(Number ord) { return getTxFormat(TransactionType.fromNumber(ord)); } static public TxFormat fromValue(Object o) { if (o instanceof Number) { return fromNumber(((Number) o).intValue()); } else if (o instanceof String){ return fromString((String) o); } else { return null; } } private static TxFormat getTxFormat(TransactionType key) { if (key == null) return null; return formats.get(key); } public TxFormat(TransactionType type, Object... args) { super(args); transactionType = type; addCommonFields(); formats.put(transactionType, this); } @Override public void addCommonFields() { put(Field.TransactionType, Requirement.REQUIRED); put(Field.Account, Requirement.REQUIRED); put(Field.Sequence, Requirement.REQUIRED); put(Field.Fee, Requirement.REQUIRED); put(Field.SigningPubKey, Requirement.REQUIRED); put(Field.Flags, Requirement.OPTIONAL); put(Field.SourceTag, Requirement.OPTIONAL); put(Field.PreviousTxnID, Requirement.OPTIONAL); put(Field.OperationLimit, Requirement.OPTIONAL); put(Field.TxnSignature, Requirement.OPTIONAL); put(Field.AccountTxnID, Requirement.OPTIONAL); put(Field.LastLedgerSequence, Requirement.OPTIONAL); put(Field.Memos, Requirement.OPTIONAL); } @Override public String name() { return transactionType.toString(); } static public TxFormat AccountSet = new TxFormat( TransactionType.AccountSet, Field.EmailHash, Requirement.OPTIONAL, Field.WalletLocator, Requirement.OPTIONAL, Field.WalletSize, Requirement.OPTIONAL, Field.MessageKey, Requirement.OPTIONAL, Field.Domain, Requirement.OPTIONAL, Field.TransferRate, Requirement.OPTIONAL, Field.SetFlag, Requirement.OPTIONAL, Field.ClearFlag, Requirement.OPTIONAL); static public TxFormat TrustSet = new TxFormat( TransactionType.TrustSet, Field.LimitAmount, Requirement.OPTIONAL, Field.QualityIn, Requirement.OPTIONAL, Field.QualityOut, Requirement.OPTIONAL); static public TxFormat OfferCreate = new TxFormat( TransactionType.OfferCreate, Field.TakerPays, Requirement.REQUIRED, Field.TakerGets, Requirement.REQUIRED, Field.Expiration, Requirement.OPTIONAL, Field.OfferSequence, Requirement.OPTIONAL); static public TxFormat OfferCancel = new TxFormat( TransactionType.OfferCancel, Field.OfferSequence, Requirement.REQUIRED); static public TxFormat TicketCreate = new TxFormat( TransactionType.TicketCreate, Field.Target, Requirement.OPTIONAL, Field.Expiration, Requirement.OPTIONAL); static public TxFormat TicketCancel = new TxFormat( TransactionType.TicketCancel, Field.TicketID, Requirement.REQUIRED); static public TxFormat SetRegularKey = new TxFormat( TransactionType.SetRegularKey, Field.RegularKey, Requirement.OPTIONAL); static public TxFormat Payment = new TxFormat( TransactionType.Payment, Field.Destination, Requirement.REQUIRED, Field.Amount, Requirement.REQUIRED, Field.SendMax, Requirement.OPTIONAL, Field.Paths, Requirement.DEFAULT, Field.InvoiceID, Requirement.OPTIONAL, Field.DestinationTag, Requirement.OPTIONAL); static public TxFormat Contract = new TxFormat( TransactionType.Contract, Field.Expiration, Requirement.REQUIRED, Field.BondAmount, Requirement.REQUIRED, Field.StampEscrow, Requirement.REQUIRED, Field.RippleEscrow, Requirement.REQUIRED, Field.CreateCode, Requirement.OPTIONAL, Field.FundCode, Requirement.OPTIONAL, Field.RemoveCode, Requirement.OPTIONAL, Field.ExpireCode, Requirement.OPTIONAL); static public TxFormat EnableAmendment = new TxFormat( TransactionType.EnableAmendment, Field.Amendment, Requirement.REQUIRED); static public TxFormat SetFee = new TxFormat( TransactionType.SetFee, Field.BaseFee, Requirement.REQUIRED, Field.ReferenceFeeUnits, Requirement.REQUIRED, Field.ReserveBase, Requirement.REQUIRED, Field.ReserveIncrement, Requirement.REQUIRED); }