com.adgear.anoa.read.AvroReader Maven / Gradle / Ivy
package com.adgear.anoa.read;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.generic.IndexedRecord;
import org.apache.avro.specific.SpecificData;
import org.apache.avro.specific.SpecificRecord;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.stream.Stream;
abstract class AvroReader
extends AbstractRecordReader {
@SuppressWarnings("unchecked")
private AvroReader(Schema schema) {
super(buildFieldWrappers(schema));
}
static private Stream buildFieldWrappers(Schema schema) {
ArrayList list = new ArrayList<>();
int index = 0;
for (Schema.Field field : schema.getFields()) {
list.add(new AvroFieldWrapper(index++, field));
}
return list.stream();
}
static class GenericReader extends AvroReader {
final private Schema schema;
GenericReader(Schema schema) {
super(schema);
this.schema = schema;
}
@Override
protected RecordWrapper newWrappedInstance() {
return new AvroRecordWrapper<>(new GenericData.Record(schema), fieldWrappers);
}
}
static class SpecificReader extends AvroReader {
final private Constructor constructor;
SpecificReader(Class recordClass) {
super(SpecificData.get().getSchema(recordClass));
try {
this.constructor = recordClass.getDeclaredConstructor();
constructor.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
protected RecordWrapper newWrappedInstance() {
try {
return new AvroRecordWrapper<>(constructor.newInstance(), fieldWrappers);
} catch (InstantiationException | IllegalAccessException |InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy