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