package com.ripple.core.formats;
import com.ripple.core.fields.Field;
import com.ripple.core.serialized.enums.LedgerEntryType;
import java.util.EnumMap;
public class LEFormat extends Format {
static public EnumMap<LedgerEntryType, LEFormat> formats = new EnumMap<LedgerEntryType, LEFormat>(LedgerEntryType.class);
static public LEFormat fromString(String name) {
return getLedgerFormat(LedgerEntryType.valueOf(name));
}
static public LEFormat fromNumber(Number ord) {
return getLedgerFormat(LedgerEntryType.fromNumber(ord));
}
static public LEFormat fromValue(Object o) {
if (o instanceof Number) {
return fromNumber(((Number) o).intValue());
} else if (o instanceof String){
return fromString((String) o);
}
else {
return null;
}
}
public static LEFormat getLedgerFormat(LedgerEntryType key) {
if (key == null) return null;
return formats.get(key);
}
public final LedgerEntryType ledgerEntryType;
public LEFormat(LedgerEntryType type, Object... args) {
super(args);
ledgerEntryType = type;
addCommonFields();
formats.put(type, this);
}
@Override
public void addCommonFields() {
put(Field.LedgerIndex, Requirement.OPTIONAL);
put(Field.LedgerEntryType, Requirement.REQUIRED);
put(Field.Flags, Requirement.REQUIRED);
}
@Override
public String name() {
return ledgerEntryType.toString();
}
public static LEFormat AccountRoot = new LEFormat(
LedgerEntryType.AccountRoot,
Field.Account, Requirement.REQUIRED,
Field.Sequence, Requirement.REQUIRED,
Field.Balance, Requirement.REQUIRED,
Field.OwnerCount, Requirement.REQUIRED,
Field.PreviousTxnID, Requirement.REQUIRED,
Field.PreviousTxnLgrSeq, Requirement.REQUIRED,
Field.RegularKey, Requirement.OPTIONAL,
Field.EmailHash, Requirement.OPTIONAL,
Field.WalletLocator, Requirement.OPTIONAL,
Field.WalletSize, Requirement.OPTIONAL,
Field.MessageKey, Requirement.OPTIONAL,
Field.TransferRate, Requirement.OPTIONAL,
Field.Domain, Requirement.OPTIONAL
);
public static LEFormat Contract = new LEFormat(
LedgerEntryType.Contract,
Field.Account, Requirement.REQUIRED,
Field.Balance, Requirement.REQUIRED,
Field.PreviousTxnID, Requirement.REQUIRED,
Field.PreviousTxnLgrSeq, Requirement.REQUIRED,
Field.Issuer, Requirement.REQUIRED,
Field.Owner, Requirement.REQUIRED,
Field.Expiration, Requirement.REQUIRED,
Field.BondAmount, Requirement.REQUIRED,
Field.CreateCode, Requirement.OPTIONAL,
Field.FundCode, Requirement.OPTIONAL,
Field.RemoveCode, Requirement.OPTIONAL,
Field.ExpireCode, Requirement.OPTIONAL
);
public static LEFormat DirectoryNode = new LEFormat(
LedgerEntryType.DirectoryNode,
Field.Owner, Requirement.OPTIONAL, // for owner directories
Field.TakerPaysCurrency, Requirement.OPTIONAL, // for order book directories
Field.TakerPaysIssuer, Requirement.OPTIONAL, // for order book directories
Field.TakerGetsCurrency, Requirement.OPTIONAL, // for order book directories
Field.TakerGetsIssuer, Requirement.OPTIONAL, // for order book directories
Field.ExchangeRate, Requirement.OPTIONAL, // for order book directories
Field.Indexes, Requirement.REQUIRED,
Field.RootIndex, Requirement.REQUIRED,
Field.IndexNext, Requirement.OPTIONAL,
Field.IndexPrevious, Requirement.OPTIONAL
);
public static LEFormat GeneratorMap = new LEFormat(
LedgerEntryType.GeneratorMap,
Field.Generator, Requirement.REQUIRED
);
public static LEFormat Offer = new LEFormat(
LedgerEntryType.Offer,
Field.Account, Requirement.REQUIRED,
Field.Sequence, Requirement.REQUIRED,
Field.TakerPays, Requirement.REQUIRED,
Field.TakerGets, Requirement.REQUIRED,
Field.BookDirectory, Requirement.REQUIRED,
Field.BookNode, Requirement.REQUIRED,
Field.OwnerNode, Requirement.REQUIRED,
Field.PreviousTxnID, Requirement.REQUIRED,
Field.PreviousTxnLgrSeq, Requirement.REQUIRED,
Field.Expiration, Requirement.OPTIONAL
);
public static LEFormat Ticket = new LEFormat(
LedgerEntryType.Ticket,
Field.PreviousTxnID, Requirement.REQUIRED,
Field.PreviousTxnLgrSeq, Requirement.REQUIRED,
Field.Account, Requirement.REQUIRED,
Field.Sequence, Requirement.REQUIRED,
Field.OwnerNode, Requirement.REQUIRED,
Field.Target, Requirement.OPTIONAL,
Field.Expiration, Requirement.OPTIONAL
);
public static LEFormat RippleState = new LEFormat(
LedgerEntryType.RippleState,
Field.Balance, Requirement.REQUIRED,
Field.LowLimit, Requirement.REQUIRED,
Field.HighLimit, Requirement.REQUIRED,
Field.PreviousTxnID, Requirement.REQUIRED,
Field.PreviousTxnLgrSeq, Requirement.REQUIRED,
Field.LowNode, Requirement.OPTIONAL,
Field.LowQualityIn, Requirement.OPTIONAL,
Field.LowQualityOut, Requirement.OPTIONAL,
Field.HighNode, Requirement.OPTIONAL,
Field.HighQualityIn, Requirement.OPTIONAL,
Field.HighQualityOut, Requirement.OPTIONAL
);
public static LEFormat LedgerHashes = new LEFormat(
LedgerEntryType.LedgerHashes,
Field.FirstLedgerSequence, Requirement.OPTIONAL, // Remove if we do a ledger restart
Field.LastLedgerSequence, Requirement.OPTIONAL,
Field.Hashes, Requirement.REQUIRED
);
public static LEFormat EnabledAmendments = new LEFormat(
LedgerEntryType.EnabledAmendments,
Field.Features, Requirement.REQUIRED
);
public static LEFormat FeeSettings = new LEFormat(
LedgerEntryType.FeeSettings,
Field.BaseFee, Requirement.REQUIRED,
Field.ReferenceFeeUnits, Requirement.REQUIRED,
Field.ReserveBase, Requirement.REQUIRED,
Field.ReserveIncrement, Requirement.REQUIRED
);
}