package com.ripple.core.coretypes;
import com.ripple.core.fields.Field;
import com.ripple.core.serialized.enums.LedgerEntryType;
import com.ripple.core.serialized.enums.TransactionType;
import com.ripple.core.types.known.sle.LedgerEntry;
import com.ripple.core.types.known.sle.LedgerHashes;
import com.ripple.core.types.known.sle.entries.*;
import com.ripple.core.types.known.tx.Transaction;
import com.ripple.core.types.known.tx.result.AffectedNode;
import com.ripple.core.types.known.tx.result.TransactionMeta;
import com.ripple.core.types.known.tx.txns.*;
public class STObjectFormatter {
public static STObject doFormatted(STObject source) {
// This would need to go before the test that just checks
// for ledgerEntryType
if (AffectedNode.isAffectedNode(source)) {
return new AffectedNode(source);
}
if (TransactionMeta.isTransactionMeta(source)) {
TransactionMeta meta = new TransactionMeta();
meta.fields = source.fields;
return meta;
}
LedgerEntryType ledgerEntryType = STObject.ledgerEntryType(source);
if (ledgerEntryType != null) {
return ledgerFormatted(source, ledgerEntryType);
}
TransactionType transactionType = STObject.transactionType(source);
if (transactionType != null) {
return transactionFormatted(source, transactionType);
}
return source;
}
private static STObject transactionFormatted(STObject source, TransactionType transactionType) {
STObject constructed = null;
switch (transactionType) {
case Invalid:
break;
case Payment:
constructed = new Payment();
break;
case Claim:
break;
case WalletAdd:
break;
case AccountSet:
constructed = new AccountSet();
break;
case PasswordFund:
break;
case SetRegularKey:
break;
case NickNameSet:
break;
case OfferCreate:
constructed = new OfferCreate();
break;
case OfferCancel:
constructed = new OfferCancel();
break;
case Contract:
break;
case TicketCreate:
constructed = new TicketCreate();
break;
case TicketCancel:
constructed = new TicketCancel();
break;
case TrustSet:
constructed = new TrustSet();
break;
case EnableAmendment:
break;
case SetFee:
break;
}
if (constructed == null) {
constructed = new Transaction(transactionType);
}
constructed.fields = source.fields;
return constructed;
}
private static STObject ledgerFormatted(STObject source, LedgerEntryType ledgerEntryType) {
STObject constructed = null;
switch (ledgerEntryType) {
case Offer:
constructed = new Offer();
break;
case RippleState:
constructed = new RippleState();
break;
case AccountRoot:
constructed = new AccountRoot();
break;
case Invalid:
break;
case DirectoryNode:
if (source.has(Field.Owner)) {
constructed = new DirectoryNode();
} else {
constructed = new OfferDirectory();
}
break;
case GeneratorMap:
break;
case Contract:
break;
case LedgerHashes:
constructed = new LedgerHashes();
break;
case EnabledAmendments:
break;
case FeeSettings:
break;
}
if (constructed == null) {
constructed = new LedgerEntry(ledgerEntryType);
}
constructed.fields = source.fields;
return constructed;
}
}