in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/HollowObjectTypeMapper.java [589:711]
public void copy(Object pojo, GenericHollowObject rec) {
switch (fieldType) {
case BOOLEAN:
unsafe.putBoolean(pojo, fieldOffset, rec.getBoolean(fieldName));
break;
case INT:
int intValue = rec.getInt(fieldName);
unsafe.putInt(pojo, fieldOffset, intValue);
break;
case SHORT:
int shortValue = rec.getInt(fieldName);
if (shortValue == Integer.MIN_VALUE) {
unsafe.putShort(pojo, fieldOffset, Short.MIN_VALUE);
} else {
unsafe.putShort(pojo, fieldOffset, (short) shortValue);
}
break;
case BYTE:
int byteValue = rec.getInt(fieldName);
if (byteValue == Integer.MIN_VALUE) {
unsafe.putByte(pojo, fieldOffset, Byte.MIN_VALUE);
} else {
unsafe.putByte(pojo, fieldOffset, (byte) byteValue);
}
break;
case CHAR:
int charValue = rec.getInt(fieldName);
if (charValue == Integer.MIN_VALUE) {
unsafe.putChar(pojo, fieldOffset, Character.MIN_VALUE);
} else {
unsafe.putChar(pojo, fieldOffset, (char) charValue);
}
break;
case LONG:
long longValue = rec.getLong(fieldName);
unsafe.putLong(pojo, fieldOffset, longValue);
break;
case DOUBLE:
double doubleValue = rec.getDouble(fieldName);
unsafe.putDouble(pojo, fieldOffset, doubleValue);
break;
case FLOAT:
float floatValue = rec.getFloat(fieldName);
unsafe.putFloat(pojo, fieldOffset, floatValue);
break;
case STRING:
unsafe.putObject(pojo, fieldOffset, rec.getString(fieldName));
break;
case BYTES:
unsafe.putObject(pojo, fieldOffset, rec.getBytes(fieldName));
break;
case INLINED_BOOLEAN:
if (!rec.isNull(fieldName)) {
unsafe.putObject(pojo, fieldOffset, Boolean.valueOf(rec.getBoolean(fieldName)));
}
break;
case INLINED_INT:
int inlinedIntValue = rec.getInt(fieldName);
if (inlinedIntValue != Integer.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, Integer.valueOf(inlinedIntValue));
}
break;
case INLINED_SHORT:
int inlinedShortValue = rec.getInt(fieldName);
if (inlinedShortValue != Integer.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, Short.valueOf((short) inlinedShortValue));
}
break;
case INLINED_BYTE:
int inlinedByteValue = rec.getInt(fieldName);
if (inlinedByteValue != Integer.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, Byte.valueOf((byte) inlinedByteValue));
}
break;
case INLINED_CHAR:
int inlinedCharValue = rec.getInt(fieldName);
if (inlinedCharValue != Integer.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, Character.valueOf((char) inlinedCharValue));
}
break;
case INLINED_LONG:
long inlinedLongValue = rec.getLong(fieldName);
if (inlinedLongValue != Long.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, Long.valueOf(inlinedLongValue));
}
break;
case INLINED_DOUBLE:
double inlinedDoubleValue = rec.getDouble(fieldName);
if (!Double.isNaN(inlinedDoubleValue)) {
unsafe.putObject(pojo, fieldOffset, Double.valueOf(inlinedDoubleValue));
}
break;
case INLINED_FLOAT:
float inlinedFloatValue = rec.getFloat(fieldName);
if (!Float.isNaN(inlinedFloatValue)) {
unsafe.putObject(pojo, fieldOffset, Float.valueOf(inlinedFloatValue));
}
break;
case INLINED_STRING:
unsafe.putObject(pojo, fieldOffset, rec.getString(fieldName));
break;
case DATE_TIME:
long dateValue = rec.getLong(fieldName);
if (dateValue != Long.MIN_VALUE) {
unsafe.putObject(pojo, fieldOffset, new Date(dateValue));
}
break;
case ENUM_NAME:
String enumNameValue = rec.getString(fieldName);
if (enumNameValue != null) {
unsafe.putObject(pojo, fieldOffset, Enum.valueOf((Class<Enum>) type, enumNameValue));
}
break;
case REFERENCE:
HollowRecord fieldRecord = rec.getReferencedGenericRecord(fieldName);
if(fieldRecord != null) {
unsafe.putObject(pojo, fieldOffset, subTypeMapper.parseHollowRecord(fieldRecord));
}
break;
default:
throw new IllegalArgumentException("Unexpected field type " + fieldType + " for field " + fieldName);
}
}