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

com.hurence.logisland.util.avro.eventgenerator.SchemaFiller Maven / Gradle / Ivy

There is a newer version: 1.4.1
Show newest version
/**
 * Copyright (C) 2016 Hurence ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hurence.logisland.util.avro.eventgenerator;
/*
 *
 * Copyright 2013 LinkedIn Corp. All rights reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
*/


import org.apache.avro.Schema;
import org.apache.avro.Schema.Field;
import org.apache.avro.generic.GenericRecord;


/*
 * The class is a factory which returns an instance based on which random data can be written to the record
 */
public abstract class SchemaFiller {

  protected Field field;
  protected RandomDataGenerator randGenerator;

  /*
   * Constructor to create an schema filler instance of the given field.
   * @param field The type of field to create an filler for.
   */
  public SchemaFiller(Field field)
  {
    this.field = field;
    this.randGenerator = new DefaultRandomGenerator();
  }
  
  /*
   * Constructor to create an schema filler instance of the given field and also lets you define an random generator
   * @param field The type of field to create an filler for.
   * @param randGen The random generator to be used to generate this field (Implement the interface RandomDataGenerator to use your own).
   */
  public SchemaFiller(Field field, RandomDataGenerator randGenerator)
  {
    this.field = field;
    this.randGenerator =  randGenerator;
  }

  /*
   * Factory method to generate random data according to type
   * @param field The field based on which random data is be generated
   * @return SchemaFiller The Schemafiller instance let's you write data to the record based on the field passed to the function.
   */
  public static SchemaFiller createRandomField(Field field) throws UnknownTypeException
  {

    Schema.Type type = field.schema().getType();
    if(type == Schema.Type.ARRAY)
    {
      return new ArrayFieldGenerate(field);
    }
    else if(type == Schema.Type.BOOLEAN)
    {
      return new BooleanFieldGenerate(field);
    }
    else if(type == Schema.Type.BYTES)
    {
      return new BytesFieldGenerate(field);
    }
    else if(type == Schema.Type.DOUBLE)
    {
      return new DoubleFieldGenerate(field);
    }
    else if(type == Schema.Type.ENUM)
    {
      return new EnumFieldGenerate(field);
    }
    else if(type == Schema.Type.FIXED)
    {
      return new FixedLengthFieldGenerate(field);
    }
    else if(type == Schema.Type.FLOAT)
    {
      return new FloatFieldGenerate(field);
    }
    else if(type == Schema.Type.INT)
    {
      return new IntegerFieldGenerate(field);
    }
    else if(type == Schema.Type.LONG)
    {
      return new LongFieldGenerate(field);
    }
    else if(type == Schema.Type.MAP)
    {
      return new MapFieldGenerate(field);
    }
    else if(type == Schema.Type.NULL)
    {
      return new NullFieldGenerate(field);
    }
    else if(type == Schema.Type.RECORD)
    {
      return new RecordFieldGenerate(field);
    }
    else if(type == Schema.Type.STRING)
    {
      return new StringFieldGenerate(field);
    }
    else if(type == Schema.Type.UNION)
    {
      return new UnionFieldGenerate(field);
    }
    else
    {
      throw new UnknownTypeException();
    }
  }


  /*
   * Override to write data
   * @param  record  The Genericrecord to which the data is to be written.
   */
  public abstract void writeToRecord(GenericRecord record) throws UnknownTypeException;

  /*
   * return the random generated object. Use this to fetch the object instead of writing to an record.
   */
  public abstract Object generateRandomObject()  throws UnknownTypeException;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy