public Object retrieveFieldValue()

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


        public Object retrieveFieldValue(Object obj, int[] fieldPathIdx, int idx) {
            Object fieldObject;

            if(idx < fieldPathIdx.length - 1) {
                if(fieldType != MappedFieldType.REFERENCE)
                    throw new IllegalArgumentException("Expected REFERENCE mapped field type but found " + fieldType);
                fieldObject = unsafe.getObject(obj, fieldOffset);
                if(fieldObject == null)
                    return null;
                return ((HollowObjectTypeMapper)subTypeMapper).retrieveFieldValue(fieldObject, fieldPathIdx, idx+1);
            }
            
            switch(fieldType) {
            case BOOLEAN:
                return unsafe.getBoolean(obj, fieldOffset);
            case INT:
                return Integer.valueOf(unsafe.getInt(obj, fieldOffset));
            case SHORT:
                return Integer.valueOf(unsafe.getShort(obj, fieldOffset));
            case BYTE:
                return Integer.valueOf(unsafe.getByte(obj, fieldOffset));
            case CHAR:
                return Integer.valueOf(unsafe.getChar(obj, fieldOffset));
            case LONG:
                return Long.valueOf(unsafe.getLong(obj, fieldOffset));
            case DOUBLE:
                double d = unsafe.getDouble(obj, fieldOffset);
                if(Double.isNaN(d))
                    return null;
                return Double.valueOf(d);
            case FLOAT:
                float f = unsafe.getFloat(obj, fieldOffset);
                if(Float.isNaN(f))
                    return null;
                return Float.valueOf(f);
            case STRING:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : getStringFromField(obj, fieldObject);
            case BYTES:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : (byte[])fieldObject;
            case INLINED_BOOLEAN:
            case INLINED_INT:
            case INLINED_LONG:
            case INLINED_DOUBLE:
            case INLINED_FLOAT:
            case INLINED_STRING:
                return unsafe.getObject(obj, fieldOffset);
            case INLINED_SHORT:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : Integer.valueOf((Short)fieldObject);
            case INLINED_BYTE:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : Integer.valueOf((Byte)fieldObject);
            case INLINED_CHAR:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : Integer.valueOf((Character)fieldObject);
            case NULLABLE_PRIMITIVE_BOOLEAN:
                fieldObject = unsafe.getObject(obj, fieldOffset);
                return fieldObject == null ? null : Boolean.valueOf(((NullablePrimitiveBoolean)fieldObject).getBooleanValue());
            case DATE_TIME:
                return Long.valueOf(((Date)obj).getTime());
            case ENUM_NAME:
                return String.valueOf(((Enum<?>)obj).name());
            default:
                throw new IllegalArgumentException("Cannot extract POJO primary key from a " + fieldType + " mapped field type");
            }
        }