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;
}