*/
public static Schema toPangoolSchema(org.apache.avro.Schema avroSchema) {
List<Field> fields = new ArrayList<Field>();
for(org.apache.avro.Schema.Field avroField : avroSchema.getFields()) {
org.apache.avro.Schema.Type type = avroField.schema().getType();
Field pangoolField;
switch(type){
case INT: pangoolField = Field.create(avroField.name(),Type.INT); break;
case LONG: pangoolField = Field.create(avroField.name(),Type.LONG); break;
case FLOAT: pangoolField = Field.create(avroField.name(),Type.FLOAT); break;
case DOUBLE: pangoolField = Field.create(avroField.name(),Type.DOUBLE); break;
case BOOLEAN: pangoolField = Field.create(avroField.name(),Type.BOOLEAN); break;
case STRING: pangoolField = Field.create(avroField.name(),Type.STRING); break;
case BYTES:
if (avroField.getProp(Field.METADATA_BYTES_AS_OBJECT) == null){
pangoolField = Field.create(avroField.name(),Type.BYTES);
} else {
try {
String objectClazz = avroField.getProp(Field.METADATA_OBJECT_CLASS);
if (objectClazz != null){
pangoolField = Field.createObject(avroField.name(),Class.forName(objectClazz));
} else {
String serializerString = avroField.getProp(Field.METADATA_OBJECT_SERIALIZER);
String deserializerString = avroField.getProp(Field.METADATA_OBJECT_DESERIALIZER);
Class<? extends FieldSerializer> ser=
(serializerString == null) ? null :
(Class<? extends FieldSerializer>)Class.forName(serializerString);
Class<? extends FieldDeserializer> deser = (deserializerString == null) ? null:
(Class<? extends FieldDeserializer>)Class.forName(deserializerString);
pangoolField = Field.createObject(avroField.name(),ser,deser);
}
} catch(ClassNotFoundException e) {
throw new PangoolRuntimeException(e);
}
}
break;
case ENUM:
String objectClazz = avroField.getProp(Field.METADATA_OBJECT_CLASS);
try{
pangoolField = Field.createEnum(avroField.name(),Class.forName(objectClazz));
} catch(ClassNotFoundException e){
throw new PangoolRuntimeException(e);
}
break;
default:
throw new PangoolRuntimeException("Avro type:" + type + " can't be converted to Pangool Schema type");
}
//add properties
for(Map.Entry<String,String> entry : avroField.props().entrySet()){
if (!Field.RESERVED_KEYWORDS.contains(entry.getKey())){
pangoolField.addProp(entry.getKey(),entry.getValue());
}
}
fields.add(pangoolField);
}