Search in sources :

Example 1 with Fields

use of com.bluenimble.platform.db.DatabaseObjectSerializer.Fields in project serverless by bluenimble.

the class DatabaseObjectImpl method toJson.

@SuppressWarnings({ "unchecked", "rawtypes" })
private JsonObject toJson(DatabaseObjectImpl dbo, DatabaseObjectSerializer serializer, int level) {
    if (serializer == null) {
        serializer = DatabaseObjectSerializer.Default;
    }
    String entity = dbo.entity();
    Fields fields = serializer.fields(level);
    if (fields == null || Fields.None.equals(fields)) {
        return null;
    }
    String[] fieldNames = null;
    if (Fields.All.equals(fields)) {
        fieldNames = dbo.document.fieldNames();
    } else {
        fieldNames = MinimalFields;
    }
    JsonObject json = serializer.create(entity, level);
    if (json == null) {
        return null;
    }
    for (String f : fieldNames) {
        Object v = dbo.get(f);
        if (v == null) {
            continue;
        }
        if (v instanceof Date) {
            v = Lang.toUTC((Date) v);
        } else if (v instanceof Map) {
            v = new JsonObject((Map<String, Object>) v, true);
        } else if (v instanceof List) {
            List<Object> list = (List<Object>) v;
            if (list.isEmpty()) {
                continue;
            }
            JsonArray arr = new JsonArray();
            for (Object o : list) {
                if (o == null) {
                    continue;
                }
                if (o instanceof DatabaseObjectImpl) {
                    arr.add(toJson((DatabaseObjectImpl) o, serializer, level + 1));
                } else {
                    if (o instanceof Date) {
                        arr.add(Lang.toUTC((Date) o));
                    } else if (Map.class.isAssignableFrom(o.getClass())) {
                        arr.add(new JsonObject((Map) o, true));
                    } else {
                        arr.add(o);
                    }
                }
            }
            v = arr;
        } else if (v instanceof DatabaseObjectImpl) {
            v = toJson((DatabaseObjectImpl) v, serializer, level + 1);
        }
        serializer.set(entity, json, f, v);
    }
    return json;
}
Also used : JsonArray(com.bluenimble.platform.json.JsonArray) Fields(com.bluenimble.platform.db.DatabaseObjectSerializer.Fields) JsonObject(com.bluenimble.platform.json.JsonObject) JsonObject(com.bluenimble.platform.json.JsonObject) DatabaseObject(com.bluenimble.platform.db.DatabaseObject) ArrayList(java.util.ArrayList) List(java.util.List) Map(java.util.Map) Date(java.util.Date)

Example 2 with Fields

use of com.bluenimble.platform.db.DatabaseObjectSerializer.Fields in project serverless by bluenimble.

the class DatabaseObjectImpl method toJson.

@SuppressWarnings({ "unchecked", "rawtypes" })
private JsonObject toJson(DatabaseObjectImpl dbo, DatabaseObjectSerializer serializer, int level, boolean refresh) {
    if (serializer == null) {
        serializer = DatabaseObjectSerializer.Default;
    }
    String entity = dbo.entity();
    Fields fields = serializer.fields(level);
    if (fields == null || Fields.None.equals(fields)) {
        return null;
    }
    Set<String> keys = dbo.document.keySet();
    if (keys == null || keys.isEmpty()) {
        return null;
    }
    String[] fieldNames = null;
    if (Fields.All.equals(fields)) {
        fieldNames = keys.toArray(new String[keys.size()]);
    } else {
        fieldNames = MinimalFields;
    }
    // If object is partial and more than minimal fields are requested
    if (dbo.partial && Fields.All.equals(fields) && refresh) {
        dbo.refresh();
        keys = dbo.document.keySet();
        fieldNames = keys.toArray(new String[keys.size()]);
    }
    JsonObject json = serializer.create(entity, level);
    if (json == null) {
        return null;
    }
    for (String f : fieldNames) {
        Object v = dbo.get(f);
        if (v == null) {
            continue;
        }
        if (ObjectIdKey.equals(f)) {
            f = Database.Fields.Id;
        }
        if (v instanceof Date) {
            v = Lang.toUTC((Date) v);
        } else if (v instanceof Map) {
            v = new JsonObject((Map<String, Object>) v, true);
        } else if (v instanceof DatabaseObjectImpl) {
            v = toJson(((DatabaseObjectImpl) v), serializer, level + 1, true);
        } else if (v instanceof DatabaseObjectList) {
            List<Object> list = (List<Object>) v;
            if (list.isEmpty()) {
                continue;
            }
            JsonArray arr = new JsonArray();
            for (Object o : list) {
                if (o == null) {
                    continue;
                }
                if (o instanceof DatabaseObjectImpl) {
                    arr.add(toJson(((DatabaseObjectImpl) o), serializer, level + 1, true));
                } else {
                    if (o instanceof Date) {
                        arr.add(Lang.toUTC((Date) o));
                    } else if (Map.class.isAssignableFrom(o.getClass())) {
                        arr.add(new JsonObject((Map) o, true));
                    } else if (List.class.isAssignableFrom(o.getClass())) {
                        arr.add(new JsonArray((List<Object>) o));
                    } else {
                        arr.add(o);
                    }
                }
            }
            v = arr;
        }
        serializer.set(entity, json, f, v);
    }
    return json;
}
Also used : JsonArray(com.bluenimble.platform.json.JsonArray) Fields(com.bluenimble.platform.db.DatabaseObjectSerializer.Fields) JsonObject(com.bluenimble.platform.json.JsonObject) JsonObject(com.bluenimble.platform.json.JsonObject) DatabaseObject(com.bluenimble.platform.db.DatabaseObject) ArrayList(java.util.ArrayList) List(java.util.List) Map(java.util.Map) Date(java.util.Date)

Aggregations

DatabaseObject (com.bluenimble.platform.db.DatabaseObject)2 Fields (com.bluenimble.platform.db.DatabaseObjectSerializer.Fields)2 JsonArray (com.bluenimble.platform.json.JsonArray)2 JsonObject (com.bluenimble.platform.json.JsonObject)2 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 List (java.util.List)2 Map (java.util.Map)2