package com.ripple.core.serialized; import com.ripple.core.runtime.Value; import com.ripple.encodings.common.B16; import org.json.JSONArray; import org.json.JSONObject; /** * @param <T> The SerializedType class * TODO, this should only really have methods that each class over-rides * it's currently pretty NASTY */ public abstract class TypeTranslator<T extends SerializedType> { @SuppressWarnings("unchecked") public T fromValue(Object object) { switch (Value.typeOf(object)) { case STRING: return fromString((String) object); case DOUBLE: return fromDouble((Double) object); case INTEGER: return fromInteger((Integer) object); case LONG: return fromLong((Long) object); case BOOLEAN: return fromBoolean((Boolean) object); case JSON_ARRAY: return fromJSONArray((JSONArray) object); case JSON_OBJECT: return fromJSONObject((JSONObject) object); case BYTE_ARRAY: return fromBytes((byte[]) object); case UNKNOWN: default: return (T) object; } } public boolean toBoolean(T obj) { throw new UnsupportedOperationException(); } public long toLong(T obj) { throw new UnsupportedOperationException(); } public int toInteger(T obj) { throw new UnsupportedOperationException(); } public double toDouble(T obj) { throw new UnsupportedOperationException(); } public String toString(T obj) { return obj.toString(); } public T fromJSONObject(JSONObject jsonObject) { throw new UnsupportedOperationException(); } public T fromJSONArray(JSONArray jsonArray) { throw new UnsupportedOperationException(); } public T fromBoolean(boolean aBoolean) { throw new UnsupportedOperationException(); } public T fromLong(long aLong) { throw new UnsupportedOperationException(); } public T fromInteger(int integer) { throw new UnsupportedOperationException(); } public T fromDouble(double aDouble) { throw new UnsupportedOperationException(); } public T fromString(String value) { throw new UnsupportedOperationException(); } /** * @param hint Using a boxed integer, allowing null for no hint */ public abstract T fromParser(BinaryParser parser, Integer hint); public T fromParser(BinaryParser parser) { return fromParser(parser, null); } public T fromBytes(byte[] b) { return fromParser(new BinaryParser(b)); } public T fromHex(String hex) { return fromBytes(B16.decode(hex)); } public JSONObject toJSONObject(T obj) { throw new UnsupportedOperationException(); } public JSONArray toJSONArray(T obj) { throw new UnsupportedOperationException(); } public Object toJSON(T obj) { return obj.toJSON(); } public void toBytesSink(T obj, BytesSink to) { obj.toBytesSink(to); } public byte[] toBytes(T obj) { BytesList to = new BytesList(); toBytesSink(obj, to); return to.bytes(); } public String toHex(T obj) { BytesList to = new BytesList(); toBytesSink(obj, to); return to.bytesHex(); } }