package org.ripple.power;
import java.util.ArrayList;
import java.util.HashMap;
public class RippleSchemas {
public enum PrimitiveTypes {
UNKOWN(-2), DONE(-1), NOTPRESENT(0), UINT16(1), UINT32(2), UINT64(3), HASH128(
4), HASH256(5), AMOUNT(6), VARIABLE_LENGTH(7), ACCOUNT(8), OBJECT(
14), ARRAY(15), UINT8(16), HASH160(17), PATHSET(18), VECTOR256(
19), Transaction(10001), LedgerEntry(10002), Validation(10003);
public int typeCode;
PrimitiveTypes(int typeCode) {
this.typeCode = typeCode;
}
static int MAXBYTEVALUE = 0;
static final ArrayList<PrimitiveTypes> reverseLookups;
static {
for (PrimitiveTypes type : values()) {
MAXBYTEVALUE = Math.max(MAXBYTEVALUE, type.typeCode);
}
MAXBYTEVALUE++;
reverseLookups = new ArrayList<PrimitiveTypes>(MAXBYTEVALUE);
for (PrimitiveTypes type : values()) {
reverseLookups.add(type);
}
}
public static PrimitiveTypes fromByteValue(int type) {
if (type < 0 || type >= MAXBYTEVALUE) {
return null;
}
for (int i = 0; i < reverseLookups.size(); i++) {
PrimitiveTypes types = reverseLookups.get(i);
if (types.typeCode == type) {
return types;
}
}
return null;
}
};
public enum BinaryFormatField {
Generic(PrimitiveTypes.UNKOWN, 0), Invalid(PrimitiveTypes.UNKOWN, -1),
CloseResolution(PrimitiveTypes.UINT8, 1), TemplateEntryType(
PrimitiveTypes.UINT8, 2), TransactionResult(
PrimitiveTypes.UINT8, 3),
LedgerEntryType(PrimitiveTypes.UINT16, 1), TransactionType(
PrimitiveTypes.UINT16, 2),
Flags(PrimitiveTypes.UINT32, 2), SourceTag(PrimitiveTypes.UINT32, 3), Sequence(
PrimitiveTypes.UINT32, 4), PreviousTxnLgrSeq(
PrimitiveTypes.UINT32, 5), LedgerSequence(
PrimitiveTypes.UINT32, 6), CloseTime(PrimitiveTypes.UINT32, 7), ParentCloseTime(
PrimitiveTypes.UINT32, 8), SigningTime(PrimitiveTypes.UINT32, 9), Expiration(
PrimitiveTypes.UINT32, 10), TransferRate(PrimitiveTypes.UINT32,
11), WalletSize(PrimitiveTypes.UINT32, 12), OwnerCount(
PrimitiveTypes.UINT32, 13), DestinationTag(
PrimitiveTypes.UINT32, 14),
HighQualityIn(PrimitiveTypes.UINT32, 16), HighQualityOut(
PrimitiveTypes.UINT32, 17), LowQualityIn(PrimitiveTypes.UINT32,
18), LowQualityOut(PrimitiveTypes.UINT32, 19), QualityIn(
PrimitiveTypes.UINT32, 20), QualityOut(PrimitiveTypes.UINT32,
21), StampEscrow(PrimitiveTypes.UINT32, 22), BondAmount(
PrimitiveTypes.UINT32, 23), LoadFee(PrimitiveTypes.UINT32, 24), OfferSequence(
PrimitiveTypes.UINT32, 25), FirstLedgerSequence(
PrimitiveTypes.UINT32, 26), LastLedgerSequence(
PrimitiveTypes.UINT32, 27), TransactionIndex(
PrimitiveTypes.UINT32, 28), OperationLimit(
PrimitiveTypes.UINT32, 29), ReferenceFeeUnits(
PrimitiveTypes.UINT32, 30), ReserveBase(PrimitiveTypes.UINT32,
31), ReserveIncrement(PrimitiveTypes.UINT32, 32), SetFlag(
PrimitiveTypes.UINT32, 33), ClearFlag(PrimitiveTypes.UINT32, 34),
IndexNext(PrimitiveTypes.UINT64, 1), IndexPrevious(
PrimitiveTypes.UINT64, 2), BookNode(PrimitiveTypes.UINT64, 3), OwnerNode(
PrimitiveTypes.UINT64, 4), BaseFee(PrimitiveTypes.UINT64, 5), ExchangeRate(
PrimitiveTypes.UINT64, 6), LowNode(PrimitiveTypes.UINT64, 7), HighNode(
PrimitiveTypes.UINT64, 8),
EmailHash(PrimitiveTypes.HASH128, 1),
LedgerHash(PrimitiveTypes.HASH256, 1), ParentHash(
PrimitiveTypes.HASH256, 2), TransactionHash(
PrimitiveTypes.HASH256, 3), AccountHash(PrimitiveTypes.HASH256,
4), PreviousTxnID(PrimitiveTypes.HASH256, 5), LedgerIndex(
PrimitiveTypes.HASH256, 6), WalletLocator(
PrimitiveTypes.HASH256, 7), RootIndex(PrimitiveTypes.HASH256, 8), BookDirectory(
PrimitiveTypes.HASH256, 16), InvoiceID(PrimitiveTypes.HASH256,
17), Nickname(PrimitiveTypes.HASH256, 18), Feature(
PrimitiveTypes.HASH256, 19),
TakerPaysCurrency(PrimitiveTypes.HASH160, 1), TakerPaysIssuer(
PrimitiveTypes.HASH160, 2), TakerGetsCurrency(
PrimitiveTypes.HASH160, 3), TakerGetsIssuer(
PrimitiveTypes.HASH160, 4),
Amount(PrimitiveTypes.AMOUNT, 1), Balance(PrimitiveTypes.AMOUNT, 2), LimitAmount(
PrimitiveTypes.AMOUNT, 3), TakerPays(PrimitiveTypes.AMOUNT, 4), TakerGets(
PrimitiveTypes.AMOUNT, 5), LowLimit(PrimitiveTypes.AMOUNT, 6), HighLimit(
PrimitiveTypes.AMOUNT, 7), Fee(PrimitiveTypes.AMOUNT, 8), SendMax(
PrimitiveTypes.AMOUNT, 9), MinimumOffer(PrimitiveTypes.AMOUNT,
16), RippleEscrow(PrimitiveTypes.AMOUNT, 17),
PublicKey(PrimitiveTypes.VARIABLE_LENGTH, 1), MessageKey(
PrimitiveTypes.VARIABLE_LENGTH, 2), SigningPubKey(
PrimitiveTypes.VARIABLE_LENGTH, 3), TxnSignature(
PrimitiveTypes.VARIABLE_LENGTH, 4), Generator(
PrimitiveTypes.VARIABLE_LENGTH, 5), Signature(
PrimitiveTypes.VARIABLE_LENGTH, 6), Domain(
PrimitiveTypes.VARIABLE_LENGTH, 7), FundCode(
PrimitiveTypes.VARIABLE_LENGTH, 8), RemoveCode(
PrimitiveTypes.VARIABLE_LENGTH, 9), ExpireCode(
PrimitiveTypes.VARIABLE_LENGTH, 10), CreateCode(
PrimitiveTypes.VARIABLE_LENGTH, 11), MemoType(
PrimitiveTypes.VARIABLE_LENGTH, 12), MemoData(
PrimitiveTypes.VARIABLE_LENGTH, 13), MemoFormat(
PrimitiveTypes.VARIABLE_LENGTH, 14),
Account(PrimitiveTypes.ACCOUNT, 1), Owner(PrimitiveTypes.ACCOUNT, 2), Destination(
PrimitiveTypes.ACCOUNT, 3), Issuer(PrimitiveTypes.ACCOUNT, 4), Target(
PrimitiveTypes.ACCOUNT, 7), RegularKey(PrimitiveTypes.ACCOUNT,
8),
Paths(PrimitiveTypes.PATHSET, 1),
Indexes(PrimitiveTypes.VECTOR256, 1), Hashes(PrimitiveTypes.VECTOR256,
2), Features(PrimitiveTypes.VECTOR256, 3),
TransactionMetaData(PrimitiveTypes.OBJECT, 2), CreatedNode(
PrimitiveTypes.OBJECT, 3), DeletedNode(PrimitiveTypes.OBJECT, 4), ModifiedNode(
PrimitiveTypes.OBJECT, 5), PreviousFields(
PrimitiveTypes.OBJECT, 6), FinalFields(PrimitiveTypes.OBJECT, 7), NewFields(
PrimitiveTypes.OBJECT, 8), TemplateEntry(PrimitiveTypes.OBJECT,
9), Memo(PrimitiveTypes.OBJECT, 10),
SigningAccounts(PrimitiveTypes.ARRAY, 2), TxnSignatures(
PrimitiveTypes.ARRAY, 3), Signatures(PrimitiveTypes.ARRAY, 4), Template(
PrimitiveTypes.ARRAY, 5), Necessary(PrimitiveTypes.ARRAY, 6), Sufficient(
PrimitiveTypes.ARRAY, 7), AffectedNodes(PrimitiveTypes.ARRAY, 8), Memos(
PrimitiveTypes.ARRAY, 9);
PrimitiveTypes primitive;
int fieldId;
BinaryFormatField(PrimitiveTypes primitve, int fieldValue) {
this.primitive = primitve;
this.fieldId = fieldValue;
}
static int MAXBYTEVALUE = 0;
static private HashMap<Integer, ArrayList<BinaryFormatField>> typeFieldLookups;
static {
for (BinaryFormatField f : values()) {
MAXBYTEVALUE = Math.max(MAXBYTEVALUE, f.fieldId);
}
MAXBYTEVALUE++;
typeFieldLookups = new HashMap<Integer, ArrayList<BinaryFormatField>>(
PrimitiveTypes.MAXBYTEVALUE);
for (BinaryFormatField f : values()) {
ArrayList<BinaryFormatField> result = typeFieldLookups
.get(f.primitive.typeCode);
if (result == null) {
result = new ArrayList<RippleSchemas.BinaryFormatField>(
PrimitiveTypes.MAXBYTEVALUE);
typeFieldLookups.put(f.primitive.typeCode, result);
}
result.add(f);
}
}
public static BinaryFormatField lookup(int type, int fieldType) {
BinaryFormatField fieldToReturn = null;
if (type < 0 || type >= PrimitiveTypes.MAXBYTEVALUE) {
fieldToReturn = null;
} else if (fieldType < 0
|| fieldType >= BinaryFormatField.MAXBYTEVALUE) {
fieldToReturn = null;
} else {
ArrayList<BinaryFormatField> result = typeFieldLookups
.get(type);
if (result != null) {
for (int i = 0; i < result.size(); i++) {
BinaryFormatField field = result.get(i);
if (field.primitive.typeCode == type
&& field.fieldId == fieldType) {
fieldToReturn = field;
break;
}
}
}
}
if (fieldToReturn == null) {
throw new RuntimeException("Could not find type " + type
+ ", field " + fieldType);
}
return fieldToReturn;
}
}
public enum TransactionTypes {
INVALID(-1), PAYMENT(0), CLAIM(1), WALLET_ADD(2), ACCOUNT_SET(3), PASSWORD_FUND(
4), REGULAR_KEY_SET(5), NICKNAME_SET(6), OFFER_CREATE(7), OFFER_CANCEL(
8), CONTRACT(9), CONTRACT_REMOVE(10), TRUST_SET(20), FEATURE(
100), FEE(101);
static int MAXBYTEVALUE = 0;
static ArrayList<TransactionTypes> reverseLookups;
static {
for (TransactionTypes type : values()) {
MAXBYTEVALUE = Math.max(MAXBYTEVALUE, type.byteValue);
}
MAXBYTEVALUE++;
reverseLookups = new ArrayList<TransactionTypes>(MAXBYTEVALUE);
for (TransactionTypes type : values()) {
reverseLookups.add(type);
}
}
public byte byteValue;
TransactionTypes(int txTypeByteValue) {
this.byteValue = (byte) txTypeByteValue;
}
public static TransactionTypes fromType(int txType) {
if (txType < 0 || txType >= MAXBYTEVALUE) {
return null;
}
for (int i = 0; i < reverseLookups.size(); i++) {
TransactionTypes types = reverseLookups.get(i);
if (types.byteValue == (byte) txType) {
return types;
}
}
return null;
}
};
}