Package com.addthis.codec.reflection

Examples of com.addthis.codec.reflection.CodableFieldInfo


                encodeNative(object, buf);
            } else {
                buf.out.write(1);
                writeStringHelper(classInfo.getClassName(object), buf.out());
                for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
                    CodableFieldInfo field = fields.next();
                    long beginSize = buf.out.size();
                    encodeField(field.get(object), field, buf, statistics);
                    if (statistics != null) {
                        long endSize = buf.out.size();
                        statistics.getData().put(field.getName(), endSize - beginSize);
                    }
                }
            }
        } finally {
            if (lock) {
View Full Code Here


        }
        if (object == null) {
            object = type.newInstance();
        }
        for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
            CodableFieldInfo field = fields.next();
            field.set(object, decodeField(field, buf));
        }
        if (object instanceof SuperCodable) {
            ((SuperCodable) object).postDecode();
        }
        return object;
View Full Code Here

        String stype = fieldMap.getClassName(object);
        if (stype != null) {
            kv.putValue(fieldMap.getClassField(), stype);
        }
        for (Iterator<CodableFieldInfo> fields = fieldMap.values().iterator(); fields.hasNext(); ) {
            CodableFieldInfo field = fields.next();
            Object value = field.get(object);
            if (value == null) {
                continue;
            }
            String name = field.getName();
            if (field.isArray()) {
                int len = Array.getLength(value);
                if (field.getType() == byte.class) {
                    kv.putValue(name, new String(Base64.encode((byte[]) value)));
                } else {
                    for (int i = 0; i < len; i++) {
                        Object av = Array.get(value, i);
                        kv.putValue(name + i, encodeString(av));
                    }
                }
            } else if (field.isCollection()) {
                Collection<?> coll = (Collection<?>) value;
                int idx = 0;
                for (Iterator<?> iter = coll.iterator(); iter.hasNext(); idx++) {
                    kv.putValue(name + idx, encodeString(iter.next()));
                }
            } else if (field.isMap()) {
                Map<?, ?> map = (Map<?, ?>) value;
                KVPairs nv = new KVPairs();
                for (Entry<?, ?> entry : map.entrySet()) {
                    nv.putValue(entry.getKey().toString(), encodeString(entry.getValue()));
                }
                kv.putValue(field.getName(), nv.toString());
            } else if (field.isNative()) {
                kv.putValue(name, value.toString());
            } else if (field.isEnum()) {
                kv.putValue(name, value.toString());
            } else if (field.isCodable()) {
                kv.putValue(name, encodeString(value));
            }
        }
        return kv.toString();
    }
View Full Code Here

        return decodeString(fieldMap, object, data);
    }

    public static Object decodeString(CodableClassInfo fieldMap, Object object, KVPairs data) throws Exception {
        for (Iterator<CodableFieldInfo> fields = fieldMap.values().iterator(); fields.hasNext();) {
            CodableFieldInfo field = fields.next();
            String name = field.getName();
            if (field.isArray()) {
                field.set(object, decodeArray(field.getType(), data, name));
            } else if (field.isCollection()) {
                List<String> arr = getList(data, name);
                int size = arr.size();
                if (size > 0) {
                    Collection<Object> value = (Collection<Object>) field.getType().newInstance();
                    Class<?> vc = field.getCollectionClass();
                    boolean va = field.isCollectionArray();
                    for (int i = 0; i < size; i++) {
                        value.add(decodeString(vc, arr.get(i)));
                    }
                    field.set(object, value);
                }
            } else if (field.isMap()) {
                Map<String, Object> map = (Map<String, Object>) field.getType().newInstance();
                // value type, assume key is String
                Class<?> kc = field.getMapKeyClass();
                Class<?> vc = field.getMapValueClass();
                for (KVPair p : new KVPairs(data.getValue(name))) {
                    map.put(p.getKey(), decodeString(vc, p.getValue()));
                }
                field.set(object, map);
            } else if (field.isCodable()) {
                field.set(object, decodeString(field.getType(), data.getValue(name)));
            } else if (field.isEnum()) {
                field.set(object, decodeEnum((Class<Enum>) field.getType(),
                                             data.getValue(name)));
            } else if (field.isNative()) {
                field.set(object, decodeNative(field.getType(), data.getValue(name)));
            }
        }
        if (object instanceof SuperCodable) {
            ((SuperCodable) object).postDecode();
        }
View Full Code Here

            String altType = classInfo.getClassName(object);
            if (altType != null) {
                obj.put(classInfo.getClassField(), altType);
            }
            for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
                CodableFieldInfo field = fields.next();
                Object value = field.get(object);
                if (value == null || value == JSONObject.NULL || field.isReadOnly()) {
                    continue;
                }
                if (JSONCodable.class.isAssignableFrom(field.getType())) {
                    value = ((JSONCodable) value).toJSONObject();
                    obj.put(field.getName(), value);
                } else if (field.isArray()) {
                    obj.put(field.getName(), encodeArray(value));
                } else if (field.isMap()) {
                    Map<?, ?> map = (Map<?, ?>) value;
                    JSONObject jmap = new JSONObject();
                    for (Entry<?, ?> entry : map.entrySet()) {
                        Object mval = entry.getValue();
                        // TODO fails with null keys
                        jmap.put(entry.getKey().toString(), encodeObject(mval));
                    }
                    obj.put(field.getName(), jmap);
                } else if (field.isCollection()) {
                    JSONArray jarr = new JSONArray();
                    for (Iterator<?> iter = ((Collection<?>) value).iterator(); iter.hasNext();) {
                        jarr.put(encodeObject(iter.next()));
                    }
                    obj.put(field.getName(), jarr);
                } else if (field.isCodable()) {
                    obj.put(field.getName(), encodeObject(value));
                } else if (field.isEnum()) {
                    obj.put(field.getName(), value.toString());
                } else if (field.isNative()) {
                    obj.put(field.getName(), value);
                } else {
                    System.out.println("unmatched field '" + field.getName() + "' = " + field);
                }
            }
        } finally {
            if (lock) {
                ((ConcurrentCodable) object).encodeUnlock();
View Full Code Here

            String altType = classInfo.getClassName(object);
            if (altType != null) {
                obj.put(classInfo.getClassField(), altType);
            }
            for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
                CodableFieldInfo field = fields.next();
                Object value = field.get(object);
                if (value == null || value == JSONObject.NULL || field.isReadOnly()) {
                    continue;
                }
                if (JSONCodable.class.isAssignableFrom(field.getTypeOrComponentType())) {
                    value = ((JSONCodable) value).toJSONObject();
                    obj.put(field.getName(), value);
                } else if (field.isArray()) {
                    obj.put(field.getName(), encodeArray(value));
                } else if (field.isMap()) {
                    Map<?, ?> map = (Map<?, ?>) value;
                    JSONObject jmap = new JSONObject();
                    for (Entry<?, ?> entry : map.entrySet()) {
                        Object mval = entry.getValue();
                        // TODO fails with null keys
                        jmap.put(entry.getKey().toString(), encodeObject(mval));
                    }
                    obj.put(field.getName(), jmap);
                } else if (field.isCollection()) {
                    JSONArray jarr = new JSONArray();
                    for (Iterator<?> iter = ((Collection<?>) value).iterator(); iter.hasNext();) {
                        jarr.put(encodeObject(iter.next()));
                    }
                    obj.put(field.getName(), jarr);
                } else if (field.isCodable()) {
                    obj.put(field.getName(), encodeObject(value));
                } else if (field.isEnum()) {
                    obj.put(field.getName(), value.toString());
                } else if (field.isNative()) {
                    obj.put(field.getName(), value);
                } else {
                    System.out.println("unmatched field '" + field.getName() + "' = " + field);
                }
            }
        } finally {
            if (lock) {
                ((ConcurrentCodable) object).encodeUnlock();
View Full Code Here

        String stype = fieldMap.getClassName(object);
        if (stype != null) {
            kv.putValue(fieldMap.getClassField(), stype);
        }
        for (Iterator<CodableFieldInfo> fields = fieldMap.values().iterator(); fields.hasNext(); ) {
            CodableFieldInfo field = fields.next();
            Object value = field.get(object);
            if (value == null) {
                continue;
            }
            String name = field.getName();
            if (field.isArray()) {
                int len = Array.getLength(value);
                if (field.getTypeOrComponentType() == byte.class) {
                    kv.putValue(name, new String(Base64.encode((byte[]) value)));
                } else {
                    for (int i = 0; i < len; i++) {
                        Object av = Array.get(value, i);
                        kv.putValue(name + i, encodeString(av));
                    }
                }
            } else if (field.isCollection()) {
                Collection<?> coll = (Collection<?>) value;
                int idx = 0;
                for (Iterator<?> iter = coll.iterator(); iter.hasNext(); idx++) {
                    kv.putValue(name + idx, encodeString(iter.next()));
                }
            } else if (field.isMap()) {
                Map<?, ?> map = (Map<?, ?>) value;
                KVPairs nv = new KVPairs();
                for (Entry<?, ?> entry : map.entrySet()) {
                    nv.putValue(entry.getKey().toString(), encodeString(entry.getValue()));
                }
                kv.putValue(field.getName(), nv.toString());
            } else if (field.isNative()) {
                kv.putValue(name, value.toString());
            } else if (field.isEnum()) {
                kv.putValue(name, value.toString());
            } else if (field.isCodable()) {
                kv.putValue(name, encodeString(value));
            }
        }
        return kv.toString();
    }
View Full Code Here

        return decodeString(fieldMap, object, data);
    }

    public static Object decodeString(CodableClassInfo fieldMap, Object object, KVPairs data) throws Exception {
        for (Iterator<CodableFieldInfo> fields = fieldMap.values().iterator(); fields.hasNext();) {
            CodableFieldInfo field = fields.next();
            String name = field.getName();
            if (field.isArray()) {
                field.set(object, decodeArray(field.getTypeOrComponentType(), data, name));
            } else if (field.isCollection()) {
                List<String> arr = getList(data, name);
                int size = arr.size();
                if (size > 0) {
                    Collection<Object> value = (Collection<Object>) field.getTypeOrComponentType().newInstance();
                    Class<?> vc = field.getCollectionClass();
                    boolean va = field.isCollectionArray();
                    for (int i = 0; i < size; i++) {
                        value.add(decodeString(vc, arr.get(i)));
                    }
                    field.set(object, value);
                }
            } else if (field.isMap()) {
                Map<String, Object> map = (Map<String, Object>) field.getTypeOrComponentType().newInstance();
                // value type, assume key is String
                Class<?> kc = field.getMapKeyClass();
                Class<?> vc = field.getMapValueClass();
                for (KVPair p : new KVPairs(data.getValue(name))) {
                    map.put(p.getKey(), decodeString(vc, p.getValue()));
                }
                field.set(object, map);
            } else if (field.isCodable()) {
                field.set(object, decodeString(field.getTypeOrComponentType(), data.getValue(name)));
            } else if (field.isEnum()) {
                field.set(object, decodeEnum((Class<Enum>) field.getTypeOrComponentType(),
                                             data.getValue(name)));
            } else if (field.isNative()) {
                field.set(object, decodeNative(field.getTypeOrComponentType(), data.getValue(name)));
            }
        }
        if (object instanceof SuperCodable) {
            ((SuperCodable) object).postDecode();
        }
View Full Code Here

                encodeNative(object, buf);
            } else {
                buf.out.write(1);
                writeStringHelper(classInfo.getClassName(object), buf.out());
                for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
                    CodableFieldInfo field = fields.next();
                    long beginSize = buf.out.size();
                    encodeField(field.get(object), field, buf, statistics);
                    if (statistics != null) {
                        long endSize = buf.out.size();
                        statistics.getData().put(field.getName(), endSize - beginSize);
                    }
                }
            }
        } finally {
            if (lock) {
View Full Code Here

        }
        if (object == null) {
            object = type.newInstance();
        }
        for (Iterator<CodableFieldInfo> fields = classInfo.values().iterator(); fields.hasNext();) {
            CodableFieldInfo field = fields.next();
            field.set(object, decodeField(field, buf));
        }
        if (object instanceof SuperCodable) {
            ((SuperCodable) object).postDecode();
        }
        return object;
View Full Code Here

TOP

Related Classes of com.addthis.codec.reflection.CodableFieldInfo

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.