## ## Licensed to the Apache Software Foundation (ASF) under one ## or more contributor license agreements. See the NOTICE file ## distributed with this work for additional information ## regarding copyright ownership. The ASF licenses this file ## to you 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. ## #if ($schema.getNamespace()) package $schema.getNamespace(); #end @SuppressWarnings("all") #if ($schema.getDoc()) /** $schema.getDoc() */ #end public class ${this.mangle($schema.getName())}#if ($schema.isError()) extends org.apache.avro.specific.SpecificExceptionBase#else extends org.apache.gora.persistency.impl.PersistentBase#end implements org.apache.avro.specific.SpecificRecord, org.apache.gora.persistency.Persistent { public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("${this.javaEscape($schema.toString())}"); /** Enum containing all data bean's fields. */ public static enum Field { #set ($i = 0) #foreach ($field in $schema.getFields()) ${this.toUpperCase($field.name())}($i, "${this.mangle($field.name(), $schema.isError())}"), #set ($i = $i + 1) #end ; /** * Field's index. */ private int index; /** * Field's name. */ private String name; /** * Field's constructor * @param index field's index. * @param name field's name. */ Field(int index, String name) {this.index=index;this.name=name;} /** * Gets field's index. * @return int field's index. */ public int getIndex() {return index;} /** * Gets field's name. * @return String field's name. */ public String getName() {return name;} /** * Gets field's attributes to string. * @return String field's attributes to string. */ public String toString() {return name;} }; public static final String[] _ALL_FIELDS = { #foreach ($field in $schema.getFields()) "${this.mangle($field.name(), $schema.isError())}", #end }; #foreach ($field in $schema.getFields()) #if ($field.doc()) /** $field.doc() */ #end private ${this.javaUnbox($field.schema())} ${this.mangle($field.name(), $schema.isError())}#if(! $this.isNotHiddenField($field.name()) ) = ${this.generateDefaultValueString($schema,$field.name())}#end; #end #if ($schema.isError()) public ${this.mangle($schema.getName())}() { super(); } public ${this.mangle($schema.getName())}(Object value) { super(value); } public ${this.mangle($schema.getName())}(Throwable cause) { super(cause); } public ${this.mangle($schema.getName())}(Object value, Throwable cause) { super(value, cause); } #end public org.apache.avro.Schema getSchema() { return SCHEMA$; } // Used by DatumWriter. Applications should not call. public java.lang.Object get(int field$) { switch (field$) { #set ($i = 0) #foreach ($field in $schema.getFields()) case $i: return ${this.mangle($field.name(), $schema.isError())}; #set ($i = $i + 1) #end default: throw new org.apache.avro.AvroRuntimeException("Bad index"); } } // Used by DatumReader. Applications should not call. @SuppressWarnings(value="unchecked") public void put(int field$, java.lang.Object value) { switch (field$) { #set ($i = 0) #foreach ($field in $schema.getFields()) case $i: ${this.mangle($field.name(), $schema.isError())} = (${this.javaType($field.schema())})(${this.generateAppropriateWrapperOrValueForPut($field.schema())}); break; #set ($i = $i + 1) #end default: throw new org.apache.avro.AvroRuntimeException("Bad index"); } } #foreach ($field in $schema.getFields()) #if ($this.isNotHiddenField($field.name())) /** * Gets the value of the '${this.mangle($field.name(), $schema.isError())}' field. #if ($field.doc()) * $field.doc()#end */ public ${this.javaType($field.schema())} ${this.generateGetMethod($schema, $field)}() { return ${this.mangle($field.name(), $schema.isError())}${this.generateAppropriateImmutabilityModifier($field.schema())}; } /** * Sets the value of the '${this.mangle($field.name(), $schema.isError())}' field. #if ($field.doc()) * $field.doc()#end * @param value the value to set. */ public void ${this.generateSetMethod($schema, $field)}(${this.javaType($field.schema())} value) { this.${this.mangle($field.name(), $schema.isError())} = ${this.generateAppropriateWrapperOrValue($field.schema())}; setDirty(${field.pos()}); } /** * Checks the dirty status of the '${this.mangle($field.name(), $schema.isError())}' field. A field is dirty if it represents a change that has not yet been written to the database. #if ($field.doc()) * $field.doc()#end * @param value the value to set. */ public boolean ${this.generateDirtyMethod($schema, $field)}(${this.javaType($field.schema())} value) { return isDirty(${field.pos()}); } #end #end /** Creates a new ${this.mangle($schema.getName())} RecordBuilder */ public static #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder newBuilder() { return new #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder(); } /** Creates a new ${this.mangle($schema.getName())} RecordBuilder by copying an existing Builder */ public static #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder newBuilder(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder other) { return new #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder(other); } /** Creates a new ${this.mangle($schema.getName())} RecordBuilder by copying an existing $this.mangle($schema.getName()) instance */ public static #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder newBuilder(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())} other) { return new #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder(other); } private static java.nio.ByteBuffer deepCopyToWriteOnlyBuffer( java.nio.ByteBuffer input) { java.nio.ByteBuffer copy = java.nio.ByteBuffer.allocate(input.capacity()); int position = input.position(); input.reset(); int mark = input.position(); int limit = input.limit(); input.rewind(); input.limit(input.capacity()); copy.put(input); input.rewind(); copy.rewind(); input.position(mark); input.mark(); copy.position(mark); copy.mark(); input.position(position); copy.position(position); input.limit(limit); copy.limit(limit); return copy.asReadOnlyBuffer(); } /** * RecordBuilder for ${this.mangle($schema.getName())} instances. */ public static class Builder extends#if ($schema.isError()) org.apache.avro.specific.SpecificErrorBuilderBase<${this.mangle($schema.getName())}>#else org.apache.avro.specific.SpecificRecordBuilderBase<${this.mangle($schema.getName())}>#end implements#if ($schema.isError()) org.apache.avro.data.ErrorBuilder<${this.mangle($schema.getName())}>#else org.apache.avro.data.RecordBuilder<${this.mangle($schema.getName())}>#end { #foreach ($field in $schema.getFields()) private ${this.javaUnbox($field.schema())} ${this.mangle($field.name(), $schema.isError())}; #end /** Creates a new Builder */ private Builder() { super(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.SCHEMA$); } /** Creates a Builder by copying an existing Builder */ private Builder(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder other) { super(other); } /** Creates a Builder by copying an existing $this.mangle($schema.getName()) instance */ private Builder(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())} other) { #if ($schema.isError())super(other)#else super(#if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.SCHEMA$)#end; #foreach ($field in $schema.getFields()) if (isValidValue(fields()[$field.pos()], other.${this.mangle($field.name(), $schema.isError())})) { this.${this.mangle($field.name(), $schema.isError())} = (${this.javaType($field.schema())}) data().deepCopy(fields()[$field.pos()].schema(), other.${this.mangle($field.name(), $schema.isError())}); fieldSetFlags()[$field.pos()] = true; } #end } #if ($schema.isError()) @Override public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder setValue(Object value) { super.setValue(value); return this; } @Override public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder clearValue() { super.clearValue(); return this; } @Override public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder setCause(Throwable cause) { super.setCause(cause); return this; } @Override public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder clearCause() { super.clearCause(); return this; } #end #foreach ($field in $schema.getFields()) #if ($this.isNotHiddenField($field.name())) /** Gets the value of the '${this.mangle($field.name(), $schema.isError())}' field */ public ${this.javaType($field.schema())} ${this.generateGetMethod($schema, $field)}() { return ${this.mangle($field.name(), $schema.isError())}; } /** Sets the value of the '${this.mangle($field.name(), $schema.isError())}' field */ public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateSetMethod($schema, $field)}(${this.javaUnbox($field.schema())} value) { validate(fields()[$field.pos()], value); this.${this.mangle($field.name(), $schema.isError())} = value; fieldSetFlags()[$field.pos()] = true; return this; } /** Checks whether the '${this.mangle($field.name(), $schema.isError())}' field has been set */ public boolean ${this.generateHasMethod($schema, $field)}() { return fieldSetFlags()[$field.pos()]; } /** Clears the value of the '${this.mangle($field.name(), $schema.isError())}' field */ public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateClearMethod($schema, $field)}() { #if (${this.isUnboxedJavaTypeNullable($field.schema())}) ${this.mangle($field.name(), $schema.isError())} = null; #end fieldSetFlags()[$field.pos()] = false; return this; } #end #end @Override public ${this.mangle($schema.getName())} build() { try { ${this.mangle($schema.getName())} record = new ${this.mangle($schema.getName())}(#if ($schema.isError())getValue(), getCause()#end); #foreach ($field in $schema.getFields()) record.${this.mangle($field.name(), $schema.isError())} = fieldSetFlags()[$field.pos()] ? this.${this.mangle($field.name(), $schema.isError())} : (${this.javaType($field.schema())}) ${this.generateAppropriateWrapper($schema,$field)}; #end return record; } catch (Exception e) { throw new org.apache.avro.AvroRuntimeException(e); } } } public ${this.mangle($schema.getName())}.Tombstone getTombstone(){ return TOMBSTONE; } public ${this.mangle($schema.getName())} newInstance(){ return newBuilder().build(); } private static final Tombstone TOMBSTONE = new Tombstone(); public static final class Tombstone extends ${this.mangle($schema.getName())} implements org.apache.gora.persistency.Tombstone { private Tombstone() { } #foreach ($field in $schema.getFields()) #if ($this.isNotHiddenField($field.name())) /** * Gets the value of the '${this.mangle($field.name(), $schema.isError())}' field. #if ($field.doc()) * $field.doc()#end */ public ${this.javaType($field.schema())} ${this.generateGetMethod($schema, $field)}() { throw new java.lang.UnsupportedOperationException("Get is not supported on tombstones"); } /** * Sets the value of the '${this.mangle($field.name(), $schema.isError())}' field. #if ($field.doc()) * $field.doc()#end * @param value the value to set. */ public void ${this.generateSetMethod($schema, $field)}(${this.javaType($field.schema())} value) { throw new java.lang.UnsupportedOperationException("Set is not supported on tombstones"); } /** * Checks the dirty status of the '${this.mangle($field.name(), $schema.isError())}' field. A field is dirty if it represents a change that has not yet been written to the database. #if ($field.doc()) * $field.doc()#end * @param value the value to set. */ public boolean ${this.generateDirtyMethod($schema, $field)}(${this.javaType($field.schema())} value) { throw new java.lang.UnsupportedOperationException("IsDirty is not supported on tombstones"); } #end #end } }