public void copy()

in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/HollowObjectTypeMapper.java [464:587]


        public void copy(Object obj, HollowObjectWriteRecord rec, FlatRecordWriter flatRecordWriter) {
            Object fieldObject;
            
            switch(fieldType) {
                case BOOLEAN:
                    rec.setBoolean(fieldName, unsafe.getBoolean(obj, fieldOffset));
                    break;
                case INT:
                    rec.setInt(fieldName, unsafe.getInt(obj, fieldOffset));
                    break;
                case SHORT:
                    short shortValue = unsafe.getShort(obj, fieldOffset);
                    if (shortValue == Short.MIN_VALUE) {
                        rec.setInt(fieldName, Integer.MIN_VALUE);
                    } else {
                        rec.setInt(fieldName, shortValue);
                    }
                    break;
                case BYTE:
                    byte byteValue = unsafe.getByte(obj, fieldOffset);
                    if (byteValue == Byte.MIN_VALUE) {
                        rec.setInt(fieldName, Integer.MIN_VALUE);
                    } else {
                        rec.setInt(fieldName, byteValue);
                    }
                    break;
                case CHAR:
                    char charValue = unsafe.getChar(obj, fieldOffset);
                    if (charValue == Character.MIN_VALUE) {
                        rec.setInt(fieldName, Integer.MIN_VALUE);
                    } else {
                        rec.setInt(fieldName, charValue);
                    }
                    break;
                case LONG:
                    rec.setLong(fieldName, unsafe.getLong(obj, fieldOffset));
                    break;
                case DOUBLE:
                    double d = unsafe.getDouble(obj, fieldOffset);
                    if(!Double.isNaN(d))
                        rec.setDouble(fieldName, d);
                    break;
                case FLOAT:
                    float f = unsafe.getFloat(obj, fieldOffset);
                    if(!Float.isNaN(f))
                        rec.setFloat(fieldName, f);
                    break;
                case STRING:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setString(fieldName, getStringFromField(obj, fieldObject));
                    break;
                case BYTES:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setBytes(fieldName, (byte[])fieldObject);
                    break;
                case INLINED_BOOLEAN:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setBoolean(fieldName, ((Boolean)fieldObject).booleanValue());
                    break;
                case INLINED_INT:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setInt(fieldName, ((Integer)fieldObject).intValue());
                    break;
                case INLINED_SHORT:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setInt(fieldName, ((Short)fieldObject).intValue());
                    break;
                case INLINED_BYTE:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setInt(fieldName, ((Byte)fieldObject).intValue());
                    break;
                case INLINED_CHAR:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setInt(fieldName, (int)((Character)fieldObject).charValue());
                    break;
                case INLINED_LONG:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setLong(fieldName, ((Long)fieldObject).longValue());
                    break;
                case INLINED_DOUBLE:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setDouble(fieldName, ((Double)fieldObject).doubleValue());
                    break;
                case INLINED_FLOAT:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setFloat(fieldName, ((Float)fieldObject).floatValue());
                    break;
                case INLINED_STRING:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setString(fieldName, (String)fieldObject);
                    break;
                case NULLABLE_PRIMITIVE_BOOLEAN:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null)
                        rec.setBoolean(fieldName, ((NullablePrimitiveBoolean)fieldObject).getBooleanValue());
                    break;
                case DATE_TIME:
                    rec.setLong(fieldName, ((Date)obj).getTime());
                    break;
                case ENUM_NAME:
                    rec.setString(fieldName, ((Enum<?>)obj).name());
                    break;
                case REFERENCE:
                    fieldObject = unsafe.getObject(obj, fieldOffset);
                    if(fieldObject != null) {
                    	if(flatRecordWriter == null)
                    		rec.setReference(fieldName, subTypeMapper.write(fieldObject));
                    	else
                    		rec.setReference(fieldName, subTypeMapper.writeFlat(fieldObject, flatRecordWriter));
                    }
                    break;
            }
        }