Search in sources :

Example 1 with Blob

use of com.google.firebase.firestore.Blob in project firebase-android-sdk by firebase.

the class CustomClassMapper method serialize.

@SuppressWarnings("unchecked")
private static <T> Object serialize(T o, ErrorPath path) {
    if (path.getLength() > MAX_DEPTH) {
        throw serializeError(path, "Exceeded maximum depth of " + MAX_DEPTH + ", which likely indicates there's an object cycle");
    }
    if (o == null) {
        return null;
    } else if (o instanceof Number) {
        if (o instanceof Long || o instanceof Integer || o instanceof Double || o instanceof Float) {
            return o;
        } else {
            throw serializeError(path, String.format("Numbers of type %s are not supported, please use an int, long, float or double", o.getClass().getSimpleName()));
        }
    } else if (o instanceof String) {
        return o;
    } else if (o instanceof Boolean) {
        return o;
    } else if (o instanceof Character) {
        throw serializeError(path, "Characters are not supported, please use Strings");
    } else if (o instanceof Map) {
        Map<String, Object> result = new HashMap<>();
        for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) o).entrySet()) {
            Object key = entry.getKey();
            if (key instanceof String) {
                String keyString = (String) key;
                result.put(keyString, serialize(entry.getValue(), path.child(keyString)));
            } else {
                throw serializeError(path, "Maps with non-string keys are not supported");
            }
        }
        return result;
    } else if (o instanceof Collection) {
        if (o instanceof List) {
            List<Object> list = (List<Object>) o;
            List<Object> result = new ArrayList<>(list.size());
            for (int i = 0; i < list.size(); i++) {
                result.add(serialize(list.get(i), path.child("[" + i + "]")));
            }
            return result;
        } else {
            throw serializeError(path, "Serializing Collections is not supported, please use Lists instead");
        }
    } else if (o.getClass().isArray()) {
        throw serializeError(path, "Serializing Arrays is not supported, please use Lists instead");
    } else if (o instanceof Enum) {
        String enumName = ((Enum<?>) o).name();
        try {
            Field enumField = o.getClass().getField(enumName);
            return BeanMapper.propertyName(enumField);
        } catch (NoSuchFieldException ex) {
            return enumName;
        }
    } else if (o instanceof Date || o instanceof Timestamp || o instanceof GeoPoint || o instanceof Blob || o instanceof DocumentReference || o instanceof FieldValue) {
        return o;
    } else {
        Class<T> clazz = (Class<T>) o.getClass();
        BeanMapper<T> mapper = loadOrCreateBeanMapperForClass(clazz);
        return mapper.serialize(o, path);
    }
}
Also used : ArrayList(java.util.ArrayList) ServerTimestamp(com.google.firebase.firestore.ServerTimestamp) Timestamp(com.google.firebase.Timestamp) Field(java.lang.reflect.Field) GeoPoint(com.google.firebase.firestore.GeoPoint) ArrayList(java.util.ArrayList) List(java.util.List) FieldValue(com.google.firebase.firestore.FieldValue) DocumentReference(com.google.firebase.firestore.DocumentReference) Blob(com.google.firebase.firestore.Blob) GeoPoint(com.google.firebase.firestore.GeoPoint) Date(java.util.Date) Collection(java.util.Collection) AccessibleObject(java.lang.reflect.AccessibleObject) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Aggregations

Timestamp (com.google.firebase.Timestamp)1 Blob (com.google.firebase.firestore.Blob)1 DocumentReference (com.google.firebase.firestore.DocumentReference)1 FieldValue (com.google.firebase.firestore.FieldValue)1 GeoPoint (com.google.firebase.firestore.GeoPoint)1 ServerTimestamp (com.google.firebase.firestore.ServerTimestamp)1 AccessibleObject (java.lang.reflect.AccessibleObject)1 Field (java.lang.reflect.Field)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1