All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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