List createObjectFields()

in hollow-diff-ui/src/main/java/com/netflix/hollow/diffview/effigy/HollowEffigyFactory.java [80:136]


    List<Field> createObjectFields(HollowEffigy effigy) {
        List<Field>fields = new ArrayList<Field>(); 
        
        HollowObjectTypeDataAccess typeDataAccess = (HollowObjectTypeDataAccess)effigy.dataAccess;
        
        HollowObjectSchema schema = typeDataAccess.getSchema();
        for(int i=0;i<schema.numFields();i++) {
            String fieldName = schema.getFieldName(i);
            String fieldType = schema.getFieldType(i) == FieldType.REFERENCE ? schema.getReferencedType(i) : schema.getFieldType(i).toString();
            Object fieldValue = null;

            switch(schema.getFieldType(i)) {
            case BOOLEAN:
                fieldValue = typeDataAccess.readBoolean(effigy.ordinal, i);
                break;
            case BYTES:
                byte[] fieldValueBytes = typeDataAccess.readBytes(effigy.ordinal, i);
                if (fieldValueBytes == null || fieldValueBytes.length == 0) {
                    fieldValue = fieldValueBytes;
                } else {
                    fieldValue = base64.encodeToString(fieldValueBytes);
                }
                break;
            case DOUBLE:
                fieldValue = Double.valueOf(typeDataAccess.readDouble(effigy.ordinal, i));
                break;
            case FLOAT:
                fieldValue = Float.valueOf(typeDataAccess.readFloat(effigy.ordinal, i));
                break;
            case INT:
                fieldValue = Integer.valueOf(typeDataAccess.readInt(effigy.ordinal, i));
                break;
            case LONG:
                long longVal = typeDataAccess.readLong(effigy.ordinal, i);
                if(longVal != Long.MIN_VALUE && "Date".equals(typeDataAccess.getSchema().getName())) {
                    SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss.SSS z yyyy");
                    fieldValue = formatter.format(new Date(longVal));
                } else {
                    fieldValue = Long.valueOf(typeDataAccess.readLong(effigy.ordinal, i));
                }
                break;
            case STRING:
                fieldValue = typeDataAccess.readString(effigy.ordinal, i);
                break;
            case REFERENCE:
                fieldValue = effigy(typeDataAccess.getDataAccess(), schema.getReferencedType(i), typeDataAccess.readOrdinal(effigy.ordinal, i));
            }

            Field field = new Field(fieldName, fieldType, fieldValue);
            if(schema.getFieldType(i) != FieldType.REFERENCE)
                field = memoize(field);
            
            fields.add(field);
        }
        
        return fields;
    }