private HollowObjectSchema getHollowObjectSchema()

in hollow-zenoadapter/src/main/java/com/netflix/hollow/zenoadapter/HollowSerializationFramework.java [178:239]


    private HollowObjectSchema getHollowObjectSchema(FastBlobSchema schema) {
        HollowObjectSchema hollowSchema = new HollowObjectSchema(schema.getName(), schema.numFields());

        for(int i=0;i<schema.numFields();i++) {
            FieldDefinition def = schema.getFieldDefinition(i);
            switch(def.getFieldType()) {
            case OBJECT:
                hollowSchema.addField(schema.getFieldName(i), FieldType.REFERENCE, ((TypedFieldDefinition)def).getSubType());
                break;
            case LIST:
                String listTypeName = schema.getName() + "_" + schema.getFieldName(i);
                String listElementType = ((TypedFieldDefinition)def).getSubType();
                hollowSchema.addField(schema.getFieldName(i), FieldType.REFERENCE, listTypeName);
                HollowListSchema listSchema = new HollowListSchema(listTypeName, listElementType);
                HollowTypeWriteState listWriteState = new HollowListTypeWriteState(listSchema);
                stateEngine.addTypeState(listWriteState);
                break;
            case SET:
                String setTypeName = schema.getName() + "_" + schema.getFieldName(i);
                String setElementType = ((TypedFieldDefinition)def).getSubType();
                hollowSchema.addField(schema.getFieldName(i), FieldType.REFERENCE, setTypeName);
                HollowSetSchema setSchema = new HollowSetSchema(setTypeName, setElementType);
                HollowTypeWriteState setWriteState = new HollowSetTypeWriteState(setSchema);
                stateEngine.addTypeState(setWriteState);
                break;
            case MAP:
                String mapTypeName = schema.getName() + "_" + schema.getFieldName(i);
                String keyType = ((MapFieldDefinition)def).getKeyType();
                String valueType = ((MapFieldDefinition)def).getValueType();
                hollowSchema.addField(schema.getFieldName(i), FieldType.REFERENCE, mapTypeName);
                HollowMapSchema mapSchema = new HollowMapSchema(mapTypeName, keyType, valueType);
                HollowTypeWriteState mapWriteState = new HollowMapTypeWriteState(mapSchema);
                stateEngine.addTypeState(mapWriteState);
                break;
            case BOOLEAN:
                hollowSchema.addField(schema.getFieldName(i), FieldType.BOOLEAN);
                break;
            case BYTES:
                hollowSchema.addField(schema.getFieldName(i), FieldType.BYTES);
                break;
            case DOUBLE:
                hollowSchema.addField(schema.getFieldName(i), FieldType.DOUBLE);
                break;
            case FLOAT:
                hollowSchema.addField(schema.getFieldName(i), FieldType.FLOAT);
                break;
            case INT:
                hollowSchema.addField(schema.getFieldName(i), FieldType.INT);
                break;
            case LONG:
                hollowSchema.addField(schema.getFieldName(i), FieldType.LONG);
                break;
            case STRING:
                hollowSchema.addField(schema.getFieldName(i), FieldType.STRING);
                break;
            default:
                throw new IllegalArgumentException("Field " + schema.getName() + "." + schema.getFieldName(i) + " is declared with illegal type " + schema.getFieldType(i));
            }
        }

        return hollowSchema;
    }