You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2012/02/07 23:15:41 UTC

svn commit: r1241662 - in /avro/trunk: ./ lang/java/avro/src/main/java/org/apache/avro/data/ lang/java/avro/src/main/java/org/apache/avro/generic/ lang/java/avro/src/main/java/org/apache/avro/reflect/ lang/java/avro/src/main/java/org/apache/avro/specif...

Author: cutting
Date: Tue Feb  7 22:15:41 2012
New Revision: 1241662

URL: http://svn.apache.org/viewvc?rev=1241662&view=rev
Log:
AVRO-1020. Java: Fix builder API to correctly handle default values for enums.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
    avro/trunk/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java
    avro/trunk/lang/java/thrift/src/main/java/org/apache/avro/thrift/ThriftData.java
    avro/trunk/share/test/schemas/social.avdl

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Tue Feb  7 22:15:41 2012
@@ -102,6 +102,9 @@ Avro 1.6.2 (unreleased)
     AVRO-996. Java: SpecificRecord builder pattern object copy fails 
     with unions in some cases. (scottcarey and jbaldassari)
 
+    AVRO-1020. Java: Fix builder API to correctly handle default
+    values for enums.  (cutting)
+
 Avro 1.6.1 (8 November 2011)
 
   INCOMPATIBLE CHANGES

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/data/RecordBuilderBase.java Tue Feb  7 22:15:41 2012
@@ -28,7 +28,6 @@ import org.apache.avro.Schema;
 import org.apache.avro.Schema.Field;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericData;
-import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.IndexedRecord;
 import org.apache.avro.io.BinaryDecoder;
 import org.apache.avro.io.BinaryEncoder;
@@ -179,7 +178,7 @@ public abstract class RecordBuilderBase<
       encoder.flush();
       decoder = DecoderFactory.get().binaryDecoder(
           baos.toByteArray(), decoder);
-      defaultValue = new GenericDatumReader(
+      defaultValue = data.createDatumReader(
           field.schema()).read(null, decoder);
       defaultSchemaValues.putIfAbsent(field.pos(), defaultValue);
     }

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java Tue Feb  7 22:15:41 2012
@@ -33,6 +33,7 @@ import org.apache.avro.Schema.Field;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.UnresolvedUnionException;
 import org.apache.avro.io.BinaryData;
+import org.apache.avro.io.DatumReader;
 import org.apache.avro.util.Utf8;
 
 /** Utilities for generic Java data. */
@@ -299,6 +300,11 @@ public class GenericData {
     public String toString() { return symbol; }
   }
 
+  /** Returns a {@link DatumReader} for this kind of data. */
+  public DatumReader createDatumReader(Schema schema) {
+    return new GenericDatumReader(schema, schema, this);
+  }
+
   /** Returns true if a Java datum matches a schema. */
   public boolean validate(Schema schema, Object datum) {
     switch (schema.getType()) {

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java Tue Feb  7 22:15:41 2012
@@ -46,6 +46,7 @@ import org.apache.avro.generic.GenericCo
 import org.apache.avro.specific.SpecificData;
 import org.apache.avro.specific.FixedSize;
 import org.apache.avro.io.BinaryData;
+import org.apache.avro.io.DatumReader;
 import org.codehaus.jackson.JsonNode;
 import org.codehaus.jackson.node.NullNode;
 
@@ -79,6 +80,11 @@ public class ReflectData extends Specifi
   public static ReflectData get() { return INSTANCE; }
 
   @Override
+  public DatumReader createDatumReader(Schema schema) {
+    return new ReflectDatumReader(schema, schema, this);
+  }
+
+  @Override
   public void setField(Object record, String name, int position, Object o) {
     if (record instanceof IndexedRecord) {
       super.setField(record, name, position, o);

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java Tue Feb  7 22:15:41 2012
@@ -33,6 +33,7 @@ import org.apache.avro.AvroRuntimeExcept
 import org.apache.avro.AvroTypeException;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericData;
+import org.apache.avro.io.DatumReader;
 
 /** Utilities for generated Java classes and interfaces. */
 public class SpecificData extends GenericData {
@@ -54,6 +55,11 @@ public class SpecificData extends Generi
     this.classLoader = classLoader;
   }
   
+  @Override
+  public DatumReader createDatumReader(Schema schema) {
+    return new SpecificDatumReader(schema, schema, this);
+  }
+
   /** Return the singleton instance. */
   public static SpecificData get() { return INSTANCE; }
 

Modified: avro/trunk/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java (original)
+++ avro/trunk/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java Tue Feb  7 22:15:41 2012
@@ -31,6 +31,7 @@ import org.apache.avro.Schema;
 import org.apache.avro.Schema.Field;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.specific.SpecificData;
+import org.apache.avro.io.DatumReader;
 
 import com.google.protobuf.ByteString;
 import com.google.protobuf.Message;
@@ -61,6 +62,11 @@ public class ProtobufData extends Generi
   public static ProtobufData get() { return INSTANCE; }
 
   @Override
+  public DatumReader createDatumReader(Schema schema) {
+    return new ProtobufDatumReader(schema, schema, this);
+  }
+
+  @Override
   public void setField(Object r, String n, int pos, Object o) {
     setField(r, n, pos, o, getRecordState(r, getSchema(r.getClass())));
   }

Modified: avro/trunk/lang/java/thrift/src/main/java/org/apache/avro/thrift/ThriftData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/thrift/src/main/java/org/apache/avro/thrift/ThriftData.java?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/lang/java/thrift/src/main/java/org/apache/avro/thrift/ThriftData.java (original)
+++ avro/trunk/lang/java/thrift/src/main/java/org/apache/avro/thrift/ThriftData.java Tue Feb  7 22:15:41 2012
@@ -29,6 +29,7 @@ import org.apache.avro.AvroRuntimeExcept
 import org.apache.avro.Schema.Field;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.specific.SpecificData;
+import org.apache.avro.io.DatumReader;
 
 import org.apache.thrift.TBase;
 import org.apache.thrift.TEnum;
@@ -57,6 +58,11 @@ public class ThriftData extends GenericD
   public static ThriftData get() { return INSTANCE; }
 
   @Override
+  public DatumReader createDatumReader(Schema schema) {
+    return new ThriftDatumReader(schema, schema, this);
+  }
+
+  @Override
   public void setField(Object r, String n, int pos, Object o) {
     setField(r, n, pos, o, getRecordState(r, getSchema(r.getClass())));
   }

Modified: avro/trunk/share/test/schemas/social.avdl
URL: http://svn.apache.org/viewvc/avro/trunk/share/test/schemas/social.avdl?rev=1241662&r1=1241661&r2=1241662&view=diff
==============================================================================
--- avro/trunk/share/test/schemas/social.avdl (original)
+++ avro/trunk/share/test/schemas/social.avdl Tue Feb  7 22:15:41 2012
@@ -19,6 +19,8 @@
 @version("1.0.5")
 @namespace("org.apache.avro.ipc.specific")
 protocol Social {
+  enum PrivacyType { FRIENDS, FRIENDS_OF_FRIENDS, PUBLIC, CUSTOM } 
+  
   record Person {
     string name;
     int year_of_birth;
@@ -26,5 +28,6 @@ protocol Social {
     string state;
     array<Person> friends = [];
     array<string> languages = [ "English" , "Java" ];
+    PrivacyType defaultPrivacy = "FRIENDS";
   }
 }