You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2016/12/02 16:51:28 UTC

arrow git commit: ARROW-335: Improve Type apis and toString() by encapsulating flatbuffers better

Repository: arrow
Updated Branches:
  refs/heads/master 06be7aed0 -> ebe7dc8f5


ARROW-335: Improve Type apis and toString() by encapsulating flatbuffers better

Author: Julien Le Dem <ju...@dremio.com>

Closes #172 from julienledem/tostring and squashes the following commits:

546aa02 [Julien Le Dem] fix rebase issues
262ae9f [Julien Le Dem] review feedback
41d5627 [Julien Le Dem] ARROW-335: Improve Type apis and toString() by encapsulating flatbuffers better


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/ebe7dc8f
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/ebe7dc8f
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/ebe7dc8f

Branch: refs/heads/master
Commit: ebe7dc8f5ff32f5fa86625d4c622b4e075e95ae0
Parents: 06be7ae
Author: Julien Le Dem <ju...@dremio.com>
Authored: Fri Dec 2 11:51:22 2016 -0500
Committer: Wes McKinney <we...@twosigma.com>
Committed: Fri Dec 2 11:51:22 2016 -0500

----------------------------------------------------------------------
 .../vector/src/main/codegen/data/ArrowTypes.tdd |   8 +-
 .../src/main/codegen/templates/ArrowType.java   | 172 ++++---------------
 .../codegen/templates/NullableValueVectors.java |  10 +-
 .../src/main/codegen/templates/UnionVector.java |   4 +-
 .../vector/complex/BaseRepeatedValueVector.java |   5 +-
 .../apache/arrow/vector/complex/MapVector.java  |   4 +-
 .../apache/arrow/vector/schema/TypeLayout.java  |  19 +-
 .../arrow/vector/schema/VectorLayout.java       |   2 +-
 .../vector/types/FloatingPointPrecision.java    |  47 +++++
 .../apache/arrow/vector/types/IntervalUnit.java |  44 +++++
 .../org/apache/arrow/vector/types/TimeUnit.java |  46 +++++
 .../org/apache/arrow/vector/types/Types.java    |  38 ++--
 .../apache/arrow/vector/types/UnionMode.java    |  44 +++++
 .../apache/arrow/vector/types/pojo/Field.java   |  14 +-
 .../apache/arrow/vector/types/pojo/Schema.java  |   3 +-
 .../complex/impl/TestPromotableWriter.java      |   7 +-
 .../complex/writer/TestComplexWriter.java       |  15 +-
 .../apache/arrow/vector/pojo/TestConvert.java   |  14 +-
 .../arrow/vector/types/pojo/TestSchema.java     |  36 +++-
 19 files changed, 318 insertions(+), 214 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/codegen/data/ArrowTypes.tdd
----------------------------------------------------------------------
diff --git a/java/vector/src/main/codegen/data/ArrowTypes.tdd b/java/vector/src/main/codegen/data/ArrowTypes.tdd
index c0b942b..01465e5 100644
--- a/java/vector/src/main/codegen/data/ArrowTypes.tdd
+++ b/java/vector/src/main/codegen/data/ArrowTypes.tdd
@@ -26,7 +26,7 @@
     },
     {
       name: "Union",
-      fields: [{name: "mode", type: short}, {name: "typeIds", type: "int[]"}]
+      fields: [{name: "mode", type: short, valueType: UnionMode}, {name: "typeIds", type: "int[]"}]
     },
     {
       name: "Int",
@@ -34,7 +34,7 @@
     },
     {
       name: "FloatingPoint",
-      fields: [{name: precision, type: short}]
+      fields: [{name: precision, type: short, valueType: FloatingPointPrecision}]
     },
     {
       name: "Utf8",
@@ -62,11 +62,11 @@
     },
     {
       name: "Timestamp",
-      fields: [{name: "unit", type: short}]
+      fields: [{name: "unit", type: short, valueType: TimeUnit}]
     },
     {
       name: "Interval",
-      fields: [{name: "unit", type: short}]
+      fields: [{name: "unit", type: short, valueType: IntervalUnit}]
     }
   ]
 }

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/codegen/templates/ArrowType.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/codegen/templates/ArrowType.java b/java/vector/src/main/codegen/templates/ArrowType.java
index 4069e60..85ea389 100644
--- a/java/vector/src/main/codegen/templates/ArrowType.java
+++ b/java/vector/src/main/codegen/templates/ArrowType.java
@@ -23,30 +23,18 @@
 package org.apache.arrow.vector.types.pojo;
 
 import com.google.flatbuffers.FlatBufferBuilder;
-import org.apache.arrow.flatbuf.Type;
 
-import java.io.IOException;
 import java.util.Objects;
 
-import org.apache.arrow.flatbuf.Precision;
-import org.apache.arrow.flatbuf.UnionMode;
-import org.apache.arrow.flatbuf.TimeUnit;
-import org.apache.arrow.flatbuf.IntervalUnit;
+import org.apache.arrow.flatbuf.Type;
+
+import org.apache.arrow.vector.types.*;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 /**
  * Arrow types
@@ -57,119 +45,31 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
   property = "name")
 @JsonSubTypes({
 <#list arrowTypes.types as type>
-  @JsonSubTypes.Type(value = ArrowType.${type.name}.class, name = "${type.name?remove_ending("_")?lower_case}"),
+  @JsonSubTypes.Type(value = ArrowType.${type.name?remove_ending("_")}.class, name = "${type.name?remove_ending("_")?lower_case}"),
 </#list>
 })
 public abstract class ArrowType {
 
-  private static class FloatingPointPrecisionSerializer extends JsonSerializer<Short> {
-    @Override
-    public void serialize(Short precision,
-        JsonGenerator jsonGenerator,
-        SerializerProvider serializerProvider)
-            throws IOException, JsonProcessingException {
-      jsonGenerator.writeObject(Precision.name(precision));
-    }
-  }
-
-  private static class FloatingPointPrecisionDeserializer extends JsonDeserializer<Short> {
-    @Override
-    public Short deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
-      String name = p.getText();
-      switch(name) {
-        case "HALF":
-          return Precision.HALF;
-        case "SINGLE":
-          return Precision.SINGLE;
-        case "DOUBLE":
-          return Precision.DOUBLE;
-        default:
-          throw new IllegalArgumentException("unknown precision: " + name);
-      }
-    }
-  }
-
-  private static class UnionModeSerializer extends JsonSerializer<Short> {
-    @Override
-    public void serialize(Short mode,
-        JsonGenerator jsonGenerator,
-        SerializerProvider serializerProvider)
-            throws IOException, JsonProcessingException {
-      jsonGenerator.writeObject(UnionMode.name(mode));
-    }
-  }
-
-  private static class UnionModeDeserializer extends JsonDeserializer<Short> {
-    @Override
-    public Short deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
-      String name = p.getText();
-      switch(name) {
-        case "Sparse":
-          return UnionMode.Sparse;
-        case "Dense":
-          return UnionMode.Dense;
-        default:
-          throw new IllegalArgumentException("unknown union mode: " + name);
-      }
-    }
-  }
-
-  private static class TimestampUnitSerializer extends JsonSerializer<Short> {
-    @Override
-    public void serialize(Short unit,
-        JsonGenerator jsonGenerator,
-        SerializerProvider serializerProvider)
-            throws IOException, JsonProcessingException {
-      jsonGenerator.writeObject(TimeUnit.name(unit));
-    }
-  }
-
-  private static class TimestampUnitDeserializer extends JsonDeserializer<Short> {
-    @Override
-    public Short deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
-      String name = p.getText();
-      switch(name) {
-        case "SECOND":
-          return TimeUnit.SECOND;
-        case "MILLISECOND":
-          return TimeUnit.MILLISECOND;
-        case "MICROSECOND":
-          return TimeUnit.MICROSECOND;
-        case "NANOSECOND":
-          return TimeUnit.NANOSECOND;
-        default:
-          throw new IllegalArgumentException("unknown time unit: " + name);
-      }
-    }
-  }
+  public static enum ArrowTypeID {
+    <#list arrowTypes.types as type>
+    <#assign name = type.name>
+    ${name?remove_ending("_")}(Type.${name}),
+    </#list>
+    NONE(Type.NONE);
+  
+    private final byte flatbufType;
 
-  private static class IntervalUnitSerializer extends JsonSerializer<Short> {
-    @Override
-    public void serialize(Short unit,
-        JsonGenerator jsonGenerator,
-        SerializerProvider serializerProvider)
-            throws IOException, JsonProcessingException {
-      jsonGenerator.writeObject(IntervalUnit.name(unit));
+    public byte getFlatbufID() {
+      return this.flatbufType;
     }
-  }
 
-  private static class IntervalUnitDeserializer extends JsonDeserializer<Short> {
-    @Override
-    public Short deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
-      String name = p.getText();
-      switch(name) {
-        case "YEAR_MONTH":
-          return IntervalUnit.YEAR_MONTH;
-        case "DAY_TIME":
-          return IntervalUnit.DAY_TIME;
-        default:
-          throw new IllegalArgumentException("unknown interval unit: " + name);
-      }
+    private ArrowTypeID(byte flatbufType) {
+      this.flatbufType = flatbufType;
     }
   }
 
   @JsonIgnore
-  public abstract byte getTypeType();
+  public abstract ArrowTypeID getTypeID();
   public abstract int getType(FlatBufferBuilder builder);
   public abstract <T> T accept(ArrowTypeVisitor<T> visitor);
 
@@ -183,28 +83,30 @@ public abstract class ArrowType {
    */
   public static interface ArrowTypeVisitor<T> {
   <#list arrowTypes.types as type>
-    T visit(${type.name} type);
+    T visit(${type.name?remove_ending("_")} type);
   </#list>
   }
 
   <#list arrowTypes.types as type>
-  <#assign name = type.name>
+  <#assign name = type.name?remove_ending("_")>
   <#assign fields = type.fields>
   public static class ${name} extends ArrowType {
-    public static final byte TYPE_TYPE = Type.${name};
+    public static final ArrowTypeID TYPE_TYPE = ArrowTypeID.${name};
     <#if type.fields?size == 0>
     public static final ${name} INSTANCE = new ${name}();
     </#if>
 
     <#list fields as field>
-    ${field.type} ${field.name};
+    <#assign fieldType = field.valueType!field.type>
+    ${fieldType} ${field.name};
     </#list>
 
     <#if type.fields?size != 0>
     @JsonCreator
     public ${type.name}(
     <#list type.fields as field>
-      <#if field.type == "short"> @JsonDeserialize(using = ${type.name}${field.name?cap_first}Deserializer.class) </#if>@JsonProperty("${field.name}") ${field.type} ${field.name}<#if field_has_next>, </#if>
+    <#assign fieldType = field.valueType!field.type>
+      @JsonProperty("${field.name}") ${fieldType} ${field.name}<#if field_has_next>, </#if>
     </#list>
     ) {
       <#list type.fields as field>
@@ -214,7 +116,7 @@ public abstract class ArrowType {
     </#if>
 
     @Override
-    public byte getTypeType() {
+    public ArrowTypeID getTypeID() {
       return TYPE_TYPE;
     }
 
@@ -235,27 +137,29 @@ public abstract class ArrowType {
         org.apache.arrow.flatbuf.${type.name}.add${field.name?cap_first}(builder, ${field.name});
       }
       <#else>
-      org.apache.arrow.flatbuf.${type.name}.add${field.name?cap_first}(builder, this.${field.name});
+      org.apache.arrow.flatbuf.${type.name}.add${field.name?cap_first}(builder, this.${field.name}<#if field.valueType??>.getFlatbufID()</#if>);
       </#if>
       </#list>
       return org.apache.arrow.flatbuf.${type.name}.end${type.name}(builder);
     }
 
     <#list fields as field>
-      <#if field.type == "short">
-    @JsonSerialize(using = ${type.name}${field.name?cap_first}Serializer.class)
-      </#if>
-    public ${field.type} get${field.name?cap_first}() {
+    <#assign fieldType = field.valueType!field.type>
+    public ${fieldType} get${field.name?cap_first}() {
       return ${field.name};
     }
     </#list>
 
     public String toString() {
-      return "${name}{"
+      return "${name}"
+      <#if fields?size != 0>
+        + "("
       <#list fields as field>
-        + <#if field.type == "int[]">java.util.Arrays.toString(${field.name})<#else>${field.name}</#if><#if field_has_next> + ", " </#if>
+        +   <#if field.type == "int[]">java.util.Arrays.toString(${field.name})<#else>${field.name}</#if><#if field_has_next> + ", " </#if>
       </#list>
-      + "}";
+        + ")"
+      </#if>
+      ;
     }
 
     @Override
@@ -265,7 +169,7 @@ public abstract class ArrowType {
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof ${type.name})) {
+      if (!(obj instanceof ${name})) {
         return false;
       }
       <#if type.fields?size == 0>
@@ -287,7 +191,7 @@ public abstract class ArrowType {
   public static org.apache.arrow.vector.types.pojo.ArrowType getTypeForField(org.apache.arrow.flatbuf.Field field) {
     switch(field.typeType()) {
     <#list arrowTypes.types as type>
-    <#assign name = type.name>
+    <#assign name = type.name?remove_ending("_")>
     <#assign nameLower = type.name?lower_case>
     <#assign fields = type.fields>
     case Type.${type.name}: {
@@ -302,7 +206,7 @@ public abstract class ArrowType {
       ${field.type} ${field.name} = ${nameLower}Type.${field.name}();
       </#if>
       </#list>
-      return new ${type.name}(<#list type.fields as field>${field.name}<#if field_has_next>, </#if></#list>);
+      return new ${name}(<#list type.fields as field><#if field.valueType??>${field.valueType}.fromFlatbufID(${field.name})<#else>${field.name}</#if><#if field_has_next>, </#if></#list>);
     }
     </#list>
     default:

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/codegen/templates/NullableValueVectors.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/codegen/templates/NullableValueVectors.java b/java/vector/src/main/codegen/templates/NullableValueVectors.java
index 716fedc..2c4274c 100644
--- a/java/vector/src/main/codegen/templates/NullableValueVectors.java
+++ b/java/vector/src/main/codegen/templates/NullableValueVectors.java
@@ -99,15 +99,15 @@ public final class ${className} extends BaseDataValueVector implements <#if type
   <#elseif minor.class == "Time">
     field = new Field(name, true, new org.apache.arrow.vector.types.pojo.ArrowType.Time(), null);
   <#elseif minor.class == "Float4">
-    field = new Field(name, true, new FloatingPoint(Precision.SINGLE), null);
+    field = new Field(name, true, new FloatingPoint(org.apache.arrow.vector.types.FloatingPointPrecision.SINGLE), null);
   <#elseif minor.class == "Float8">
-    field = new Field(name, true, new FloatingPoint(Precision.DOUBLE), null);
+    field = new Field(name, true, new FloatingPoint(org.apache.arrow.vector.types.FloatingPointPrecision.DOUBLE), null);
   <#elseif minor.class == "TimeStamp">
-    field = new Field(name, true, new org.apache.arrow.vector.types.pojo.ArrowType.Timestamp(org.apache.arrow.flatbuf.TimeUnit.MILLISECOND), null);
+    field = new Field(name, true, new org.apache.arrow.vector.types.pojo.ArrowType.Timestamp(org.apache.arrow.vector.types.TimeUnit.MILLISECOND), null);
   <#elseif minor.class == "IntervalDay">
-    field = new Field(name, true, new Interval(org.apache.arrow.flatbuf.IntervalUnit.DAY_TIME), null);
+    field = new Field(name, true, new Interval(org.apache.arrow.vector.types.IntervalUnit.DAY_TIME), null);
   <#elseif minor.class == "IntervalYear">
-    field = new Field(name, true, new Interval(org.apache.arrow.flatbuf.IntervalUnit.YEAR_MONTH), null);
+    field = new Field(name, true, new Interval(org.apache.arrow.vector.types.IntervalUnit.YEAR_MONTH), null);
   <#elseif minor.class == "VarChar">
     field = new Field(name, true, new Utf8(), null);
   <#elseif minor.class == "VarBinary">

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/codegen/templates/UnionVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/codegen/templates/UnionVector.java b/java/vector/src/main/codegen/templates/UnionVector.java
index 9608b3c..ea1fdf6 100644
--- a/java/vector/src/main/codegen/templates/UnionVector.java
+++ b/java/vector/src/main/codegen/templates/UnionVector.java
@@ -15,8 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import java.util.List;
-
 <@pp.dropOutputFile />
 <@pp.changeOutputFile name="/org/apache/arrow/vector/complex/UnionVector.java" />
 
@@ -35,7 +33,7 @@ import org.apache.arrow.vector.complex.impl.ComplexCopier;
 import org.apache.arrow.vector.util.CallBack;
 import org.apache.arrow.vector.schema.ArrowFieldNode;
 
-import static org.apache.arrow.flatbuf.UnionMode.Sparse;
+import static org.apache.arrow.vector.types.UnionMode.Sparse;
 
 
 

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/complex/BaseRepeatedValueVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/complex/BaseRepeatedValueVector.java b/java/vector/src/main/java/org/apache/arrow/vector/complex/BaseRepeatedValueVector.java
index 517d20c..7424df4 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/complex/BaseRepeatedValueVector.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/complex/BaseRepeatedValueVector.java
@@ -20,7 +20,6 @@ package org.apache.arrow.vector.complex;
 import java.util.Collections;
 import java.util.Iterator;
 
-import org.apache.arrow.flatbuf.Type;
 import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.vector.AddOrGetResult;
 import org.apache.arrow.vector.BaseValueVector;
@@ -159,9 +158,9 @@ public abstract class BaseRepeatedValueVector extends BaseValueVector implements
       created = true;
     }
 
-    if (vector.getField().getType().getTypeType() != minorType.getType().getTypeType()) {
+    if (vector.getField().getType().getTypeID() != minorType.getType().getTypeID()) {
       final String msg = String.format("Inner vector type mismatch. Requested type: [%s], actual type: [%s]",
-          Type.name(minorType.getType().getTypeType()), Type.name(vector.getField().getType().getTypeType()));
+          minorType.getType().getTypeID(), vector.getField().getType().getTypeID());
       throw new SchemaChangeRuntimeException(msg);
     }
 

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java b/java/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java
index aaecb95..c2f216b 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java
@@ -34,7 +34,7 @@ import org.apache.arrow.vector.complex.reader.FieldReader;
 import org.apache.arrow.vector.holders.ComplexHolder;
 import org.apache.arrow.vector.types.Types;
 import org.apache.arrow.vector.types.Types.MinorType;
-import org.apache.arrow.vector.types.pojo.ArrowType.Struct_;
+import org.apache.arrow.vector.types.pojo.ArrowType.Struct;
 import org.apache.arrow.vector.types.pojo.Field;
 import org.apache.arrow.vector.util.CallBack;
 import org.apache.arrow.vector.util.JsonStringHashMap;
@@ -290,7 +290,7 @@ public class MapVector extends AbstractMapVector {
     for (ValueVector child : getChildren()) {
       children.add(child.getField());
     }
-    return new Field(name, false, Struct_.INSTANCE, children);
+    return new Field(name, false, Struct.INSTANCE, children);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java b/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java
index c5f53fe..0b58691 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java
@@ -18,9 +18,6 @@
 package org.apache.arrow.vector.schema;
 
 import static java.util.Arrays.asList;
-import static org.apache.arrow.flatbuf.Precision.DOUBLE;
-import static org.apache.arrow.flatbuf.Precision.HALF;
-import static org.apache.arrow.flatbuf.Precision.SINGLE;
 import static org.apache.arrow.vector.schema.VectorLayout.booleanVector;
 import static org.apache.arrow.vector.schema.VectorLayout.byteVector;
 import static org.apache.arrow.vector.schema.VectorLayout.dataVector;
@@ -32,8 +29,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.arrow.flatbuf.IntervalUnit;
-import org.apache.arrow.flatbuf.UnionMode;
 import org.apache.arrow.vector.types.pojo.ArrowType;
 import org.apache.arrow.vector.types.pojo.ArrowType.ArrowTypeVisitor;
 import org.apache.arrow.vector.types.pojo.ArrowType.Binary;
@@ -44,7 +39,7 @@ import org.apache.arrow.vector.types.pojo.ArrowType.FloatingPoint;
 import org.apache.arrow.vector.types.pojo.ArrowType.Int;
 import org.apache.arrow.vector.types.pojo.ArrowType.Interval;
 import org.apache.arrow.vector.types.pojo.ArrowType.Null;
-import org.apache.arrow.vector.types.pojo.ArrowType.Struct_;
+import org.apache.arrow.vector.types.pojo.ArrowType.Struct;
 import org.apache.arrow.vector.types.pojo.ArrowType.Time;
 import org.apache.arrow.vector.types.pojo.ArrowType.Timestamp;
 import org.apache.arrow.vector.types.pojo.ArrowType.Union;
@@ -72,7 +67,7 @@ public class TypeLayout {
       @Override public TypeLayout visit(Union type) {
         List<VectorLayout> vectors;
         switch (type.getMode()) {
-          case UnionMode.Dense:
+          case Dense:
             vectors = asList(
                 // TODO: validate this
                 validityVector(),
@@ -80,7 +75,7 @@ public class TypeLayout {
                 offsetVector() // offset to find the vector
                 );
             break;
-          case UnionMode.Sparse:
+          case Sparse:
             vectors = asList(
                 typeVector() // type of the value at the index or 0 if null
                 );
@@ -91,7 +86,7 @@ public class TypeLayout {
         return new TypeLayout(vectors);
       }
 
-      @Override public TypeLayout visit(Struct_ type) {
+      @Override public TypeLayout visit(Struct type) {
         List<VectorLayout> vectors = asList(
             validityVector()
             );
@@ -175,9 +170,9 @@ public class TypeLayout {
       @Override
       public TypeLayout visit(Interval type) { // TODO: check size
         switch (type.getUnit()) {
-        case IntervalUnit.DAY_TIME:
+        case DAY_TIME:
           return newFixedWidthTypeLayout(dataVector(64));
-        case IntervalUnit.YEAR_MONTH:
+        case YEAR_MONTH:
           return newFixedWidthTypeLayout(dataVector(64));
         default:
           throw new UnsupportedOperationException("Unknown unit " + type.getUnit());
@@ -215,7 +210,7 @@ public class TypeLayout {
   }
 
   public String toString() {
-    return "TypeLayout{" + vectors + "}";
+    return vectors.toString();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/schema/VectorLayout.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/schema/VectorLayout.java b/java/vector/src/main/java/org/apache/arrow/vector/schema/VectorLayout.java
index 931c00a..2073795 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/schema/VectorLayout.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/schema/VectorLayout.java
@@ -101,7 +101,7 @@ public class VectorLayout implements FBSerializable {
 
   @Override
   public String toString() {
-    return String.format("{width=%s,type=%s}", typeBitWidth, type);
+    return String.format("%s(%s)", type, typeBitWidth);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/FloatingPointPrecision.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/FloatingPointPrecision.java b/java/vector/src/main/java/org/apache/arrow/vector/types/FloatingPointPrecision.java
new file mode 100644
index 0000000..3206969
--- /dev/null
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/FloatingPointPrecision.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
+package org.apache.arrow.vector.types;
+
+import org.apache.arrow.flatbuf.Precision;
+
+public enum FloatingPointPrecision {
+  HALF(Precision.HALF),
+  SINGLE(Precision.SINGLE),
+  DOUBLE(Precision.DOUBLE);
+
+  private static final FloatingPointPrecision[] valuesByFlatbufId = new FloatingPointPrecision[FloatingPointPrecision.values().length];
+  static {
+    for (FloatingPointPrecision v : FloatingPointPrecision.values()) {
+      valuesByFlatbufId[v.flatbufID] = v;
+    }
+  }
+
+  private short flatbufID;
+
+  private FloatingPointPrecision(short flatbufID) {
+    this.flatbufID = flatbufID;
+  }
+
+  public short getFlatbufID() {
+    return flatbufID;
+  }
+
+  public static FloatingPointPrecision fromFlatbufID(short id) {
+    return valuesByFlatbufId[id];
+  }
+}

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/IntervalUnit.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/IntervalUnit.java b/java/vector/src/main/java/org/apache/arrow/vector/types/IntervalUnit.java
new file mode 100644
index 0000000..b3ddf1f
--- /dev/null
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/IntervalUnit.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
+package org.apache.arrow.vector.types;
+
+public enum IntervalUnit {
+  YEAR_MONTH(org.apache.arrow.flatbuf.IntervalUnit.YEAR_MONTH),
+  DAY_TIME(org.apache.arrow.flatbuf.IntervalUnit.DAY_TIME);
+
+  private static final IntervalUnit[] valuesByFlatbufId = new IntervalUnit[IntervalUnit.values().length];
+  static {
+    for (IntervalUnit v : IntervalUnit.values()) {
+      valuesByFlatbufId[v.flatbufID] = v;
+    }
+  }
+
+  private short flatbufID;
+
+  private IntervalUnit(short flatbufID) {
+    this.flatbufID = flatbufID;
+  }
+
+  public short getFlatbufID() {
+    return flatbufID;
+  }
+
+  public static IntervalUnit fromFlatbufID(short id) {
+    return valuesByFlatbufId[id];
+  }
+}

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/TimeUnit.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/TimeUnit.java b/java/vector/src/main/java/org/apache/arrow/vector/types/TimeUnit.java
new file mode 100644
index 0000000..cea9866
--- /dev/null
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/TimeUnit.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
+package org.apache.arrow.vector.types;
+
+public enum TimeUnit {
+  SECOND(org.apache.arrow.flatbuf.TimeUnit.SECOND),
+  MILLISECOND(org.apache.arrow.flatbuf.TimeUnit.MILLISECOND),
+  MICROSECOND(org.apache.arrow.flatbuf.TimeUnit.MICROSECOND),
+  NANOSECOND(org.apache.arrow.flatbuf.TimeUnit.NANOSECOND);
+
+  private static final TimeUnit[] valuesByFlatbufId = new TimeUnit[TimeUnit.values().length];
+  static {
+    for (TimeUnit v : TimeUnit.values()) {
+      valuesByFlatbufId[v.flatbufID] = v;
+    }
+  }
+
+  private final short flatbufID;
+
+  TimeUnit(short flatbufID) {
+    this.flatbufID = flatbufID;
+  }
+
+  public short getFlatbufID() {
+    return flatbufID;
+  }
+
+  public static TimeUnit fromFlatbufID(short id) {
+    return valuesByFlatbufId[id];
+  }
+}

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java b/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java
index d959367..2a2fb74 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java
@@ -17,10 +17,10 @@
  */
 package org.apache.arrow.vector.types;
 
-import org.apache.arrow.flatbuf.IntervalUnit;
-import org.apache.arrow.flatbuf.Precision;
-import org.apache.arrow.flatbuf.TimeUnit;
-import org.apache.arrow.flatbuf.UnionMode;
+import static org.apache.arrow.vector.types.FloatingPointPrecision.DOUBLE;
+import static org.apache.arrow.vector.types.FloatingPointPrecision.SINGLE;
+import static org.apache.arrow.vector.types.UnionMode.Sparse;
+
 import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.vector.FieldVector;
 import org.apache.arrow.vector.NullableBigIntVector;
@@ -81,7 +81,7 @@ import org.apache.arrow.vector.types.pojo.ArrowType.Int;
 import org.apache.arrow.vector.types.pojo.ArrowType.Interval;
 import org.apache.arrow.vector.types.pojo.ArrowType.List;
 import org.apache.arrow.vector.types.pojo.ArrowType.Null;
-import org.apache.arrow.vector.types.pojo.ArrowType.Struct_;
+import org.apache.arrow.vector.types.pojo.ArrowType.Struct;
 import org.apache.arrow.vector.types.pojo.ArrowType.Time;
 import org.apache.arrow.vector.types.pojo.ArrowType.Timestamp;
 import org.apache.arrow.vector.types.pojo.ArrowType.Union;
@@ -102,11 +102,11 @@ public class Types {
   private static final Field UINT8_FIELD = new Field("", true, new Int(64, false), null);
   private static final Field DATE_FIELD = new Field("", true, Date.INSTANCE, null);
   private static final Field TIME_FIELD = new Field("", true, Time.INSTANCE, null);
-  private static final Field TIMESTAMP_FIELD = new Field("", true, new Timestamp(org.apache.arrow.flatbuf.TimeUnit.MILLISECOND), null);
+  private static final Field TIMESTAMP_FIELD = new Field("", true, new Timestamp(TimeUnit.MILLISECOND), null);
   private static final Field INTERVALDAY_FIELD = new Field("", true, new Interval(IntervalUnit.DAY_TIME), null);
   private static final Field INTERVALYEAR_FIELD = new Field("", true, new Interval(IntervalUnit.YEAR_MONTH), null);
-  private static final Field FLOAT4_FIELD = new Field("", true, new FloatingPoint(Precision.SINGLE), null);
-  private static final Field FLOAT8_FIELD = new Field("", true, new FloatingPoint(Precision.DOUBLE), null);
+  private static final Field FLOAT4_FIELD = new Field("", true, new FloatingPoint(FloatingPointPrecision.SINGLE), null);
+  private static final Field FLOAT8_FIELD = new Field("", true, new FloatingPoint(FloatingPointPrecision.DOUBLE), null);
   private static final Field VARCHAR_FIELD = new Field("", true, Utf8.INSTANCE, null);
   private static final Field VARBINARY_FIELD = new Field("", true, Binary.INSTANCE, null);
   private static final Field BIT_FIELD = new Field("", true, Bool.INSTANCE, null);
@@ -129,7 +129,7 @@ public class Types {
         return null;
       }
     },
-    MAP(Struct_.INSTANCE) {
+    MAP(Struct.INSTANCE) {
       @Override
       public Field getField() {
         throw new UnsupportedOperationException("Cannot get simple field for Map type");
@@ -242,7 +242,7 @@ public class Types {
       }
     },
     // time in millis from the Unix epoch, 00:00:00.000 on 1 January 1970, UTC.
-    TIMESTAMP(new Timestamp(org.apache.arrow.flatbuf.TimeUnit.MILLISECOND)) {
+    TIMESTAMP(new Timestamp(org.apache.arrow.vector.types.TimeUnit.MILLISECOND)) {
       @Override
       public Field getField() {
         return TIMESTAMP_FIELD;
@@ -291,7 +291,7 @@ public class Types {
       }
     },
     //  4 byte ieee 754
-    FLOAT4(new FloatingPoint(Precision.SINGLE)) {
+    FLOAT4(new FloatingPoint(SINGLE)) {
       @Override
       public Field getField() {
         return FLOAT4_FIELD;
@@ -308,7 +308,7 @@ public class Types {
       }
     },
     //  8 byte ieee 754
-    FLOAT8(new FloatingPoint(Precision.DOUBLE)) {
+    FLOAT8(new FloatingPoint(DOUBLE)) {
       @Override
       public Field getField() {
         return FLOAT8_FIELD;
@@ -472,7 +472,7 @@ public class Types {
         return new UnionListWriter((ListVector) vector);
       }
     },
-    UNION(new Union(UnionMode.Sparse, null)) {
+    UNION(new Union(Sparse, null)) {
       @Override
       public Field getField() {
         throw new UnsupportedOperationException("Cannot get simple field for Union type");
@@ -512,7 +512,7 @@ public class Types {
         return MinorType.NULL;
       }
 
-      @Override public MinorType visit(Struct_ type) {
+      @Override public MinorType visit(Struct type) {
         return MinorType.MAP;
       }
 
@@ -543,11 +543,11 @@ public class Types {
       @Override
       public MinorType visit(FloatingPoint type) {
         switch (type.getPrecision()) {
-        case Precision.HALF:
+        case HALF:
           throw new UnsupportedOperationException("NYI: " + type);
-        case Precision.SINGLE:
+        case SINGLE:
           return MinorType.FLOAT4;
-        case Precision.DOUBLE:
+        case DOUBLE:
           return MinorType.FLOAT8;
         default:
           throw new IllegalArgumentException("unknown precision: " + type);
@@ -588,9 +588,9 @@ public class Types {
       @Override
       public MinorType visit(Interval type) {
         switch (type.getUnit()) {
-        case IntervalUnit.DAY_TIME:
+        case DAY_TIME:
           return MinorType.INTERVALDAY;
-        case IntervalUnit.YEAR_MONTH:
+        case YEAR_MONTH:
           return MinorType.INTERVALYEAR;
         default:
           throw new IllegalArgumentException("unknown unit: " + type);

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/UnionMode.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/UnionMode.java b/java/vector/src/main/java/org/apache/arrow/vector/types/UnionMode.java
new file mode 100644
index 0000000..8e957bc
--- /dev/null
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/UnionMode.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
+package org.apache.arrow.vector.types;
+
+public enum UnionMode {
+  Sparse(org.apache.arrow.flatbuf.UnionMode.Sparse),
+  Dense(org.apache.arrow.flatbuf.UnionMode.Dense);
+
+  private static final UnionMode[] valuesByFlatbufId = new UnionMode[UnionMode.values().length];
+  static {
+    for (UnionMode v : UnionMode.values()) {
+      valuesByFlatbufId[v.flatbufID] = v;
+    }
+  }
+
+  private final short flatbufID;
+
+  private UnionMode(short flatbufID) {
+    this.flatbufID = flatbufID;
+  }
+
+  public short getFlatbufID() {
+    return flatbufID;
+  }
+
+  public static UnionMode fromFlatbufID(short id) {
+    return valuesByFlatbufId[id];
+  }
+}

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Field.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Field.java b/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Field.java
index 49ba524..412fc54 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Field.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Field.java
@@ -29,6 +29,7 @@ import org.apache.arrow.vector.schema.VectorLayout;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.flatbuffers.FlatBufferBuilder;
 
@@ -104,7 +105,7 @@ public class Field {
       org.apache.arrow.flatbuf.Field.addName(builder, nameOffset);
     }
     org.apache.arrow.flatbuf.Field.addNullable(builder, nullable);
-    org.apache.arrow.flatbuf.Field.addTypeType(builder, type.getTypeType());
+    org.apache.arrow.flatbuf.Field.addTypeType(builder, type.getTypeID().getFlatbufID());
     org.apache.arrow.flatbuf.Field.addType(builder, typeOffset);
     org.apache.arrow.flatbuf.Field.addChildren(builder, childrenOffset);
     org.apache.arrow.flatbuf.Field.addLayout(builder, layoutOffset);
@@ -143,11 +144,18 @@ public class Field {
             (Objects.equals(this.children, that.children) ||
                     (this.children == null && that.children.size() == 0) ||
                     (this.children.size() == 0 && that.children == null));
-
   }
 
   @Override
   public String toString() {
-    return String.format("Field{name=%s, type=%s, children=%s, layout=%s}", name, type, children, typeLayout);
+    StringBuilder sb = new StringBuilder();
+    if (name != null) {
+      sb.append(name).append(": ");
+    }
+    sb.append(type);
+    if (!children.isEmpty()) {
+      sb.append("<").append(Joiner.on(", ").join(children)).append(">");
+    }
+    return sb.toString();
   }
 }

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Schema.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Schema.java b/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Schema.java
index 44b877e..5ca8ade 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Schema.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/types/pojo/Schema.java
@@ -33,6 +33,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.databind.ObjectWriter;
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.flatbuffers.FlatBufferBuilder;
 
@@ -132,6 +133,6 @@ public class Schema {
 
   @Override
   public String toString() {
-    return "Schema" + fields;
+    return "Schema<" + Joiner.on(", ").join(fields) + ">";
   }
 }

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java b/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java
index 176ad51..58312b3 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/complex/impl/TestPromotableWriter.java
@@ -21,15 +21,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import org.apache.arrow.flatbuf.Type;
 import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.vector.DirtyRootAllocator;
-import org.apache.arrow.vector.complex.AbstractMapVector;
 import org.apache.arrow.vector.complex.MapVector;
 import org.apache.arrow.vector.complex.NullableMapVector;
 import org.apache.arrow.vector.complex.UnionVector;
 import org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter;
 import org.apache.arrow.vector.types.Types.MinorType;
+import org.apache.arrow.vector.types.pojo.ArrowType.ArrowTypeID;
 import org.apache.arrow.vector.types.pojo.Field;
 import org.junit.After;
 import org.junit.Before;
@@ -112,8 +111,8 @@ public class TestPromotableWriter {
 
       Field childField1 = container.getField().getChildren().get(0).getChildren().get(0);
       Field childField2 = container.getField().getChildren().get(0).getChildren().get(1);
-      assertEquals("Child field should be union type: " + childField1.getName(), Type.Union, childField1.getType().getTypeType());
-      assertEquals("Child field should be decimal type: " + childField2.getName(), Type.Decimal, childField2.getType().getTypeType());
+      assertEquals("Child field should be union type: " + childField1.getName(), ArrowTypeID.Union, childField1.getType().getTypeID());
+      assertEquals("Child field should be decimal type: " + childField2.getName(), ArrowTypeID.Decimal, childField2.getType().getTypeID());
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestComplexWriter.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestComplexWriter.java b/java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestComplexWriter.java
index 6e0e617..caa438a 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestComplexWriter.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestComplexWriter.java
@@ -41,6 +41,7 @@ import org.apache.arrow.vector.complex.reader.FieldReader;
 import org.apache.arrow.vector.complex.writer.BaseWriter.ComplexWriter;
 import org.apache.arrow.vector.complex.writer.BaseWriter.ListWriter;
 import org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter;
+import org.apache.arrow.vector.types.pojo.ArrowType.ArrowTypeID;
 import org.apache.arrow.vector.types.pojo.ArrowType.Int;
 import org.apache.arrow.vector.types.pojo.ArrowType.Union;
 import org.apache.arrow.vector.types.pojo.ArrowType.Utf8;
@@ -429,7 +430,7 @@ public class TestComplexWriter {
     }
     Field field = parent.getField().getChildren().get(0).getChildren().get(0);
     Assert.assertEquals("a", field.getName());
-    Assert.assertEquals(Int.TYPE_TYPE, field.getType().getTypeType());
+    Assert.assertEquals(Int.TYPE_TYPE, field.getType().getTypeID());
     Int intType = (Int) field.getType();
 
     Assert.assertEquals(64, intType.getBitWidth());
@@ -444,9 +445,9 @@ public class TestComplexWriter {
     }
     field = parent.getField().getChildren().get(0).getChildren().get(0);
     Assert.assertEquals("a", field.getName());
-    Assert.assertEquals(Union.TYPE_TYPE, field.getType().getTypeType());
-    Assert.assertEquals(Int.TYPE_TYPE, field.getChildren().get(0).getType().getTypeType());
-    Assert.assertEquals(Utf8.TYPE_TYPE, field.getChildren().get(1).getType().getTypeType());
+    Assert.assertEquals(Union.TYPE_TYPE, field.getType().getTypeID());
+    Assert.assertEquals(Int.TYPE_TYPE, field.getChildren().get(0).getType().getTypeID());
+    Assert.assertEquals(Utf8.TYPE_TYPE, field.getChildren().get(1).getType().getTypeID());
     MapReader rootReader = new SingleMapReaderImpl(parent).reader("root");
     for (int i = 0; i < 100; i++) {
       rootReader.setPosition(i);
@@ -476,12 +477,12 @@ public class TestComplexWriter {
 
     Field field = parent.getField().getChildren().get(0).getChildren().get(0);
     Assert.assertEquals("a", field.getName());
-    Assert.assertEquals(Union.TYPE_TYPE, field.getType().getTypeType());
+    Assert.assertEquals(ArrowTypeID.Union, field.getType().getTypeID());
 
-    Assert.assertEquals(Int.TYPE_TYPE, field.getChildren().get(0).getType().getTypeType());
+    Assert.assertEquals(ArrowTypeID.Int, field.getChildren().get(0).getType().getTypeID());
     Int intType = (Int) field.getChildren().get(0).getType();
     Assert.assertEquals(64, intType.getBitWidth());
     Assert.assertTrue(intType.getIsSigned());
-    Assert.assertEquals(Utf8.TYPE_TYPE, field.getChildren().get(1).getType().getTypeType());
+    Assert.assertEquals(ArrowTypeID.Utf8, field.getChildren().get(1).getType().getTypeID());
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/test/java/org/apache/arrow/vector/pojo/TestConvert.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/pojo/TestConvert.java b/java/vector/src/test/java/org/apache/arrow/vector/pojo/TestConvert.java
index 3da8db2..5a238bc 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/pojo/TestConvert.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/pojo/TestConvert.java
@@ -17,17 +17,17 @@
  */
 package org.apache.arrow.vector.pojo;
 
-import static org.apache.arrow.flatbuf.Precision.DOUBLE;
-import static org.apache.arrow.flatbuf.Precision.SINGLE;
+import static org.apache.arrow.vector.types.FloatingPointPrecision.DOUBLE;
+import static org.apache.arrow.vector.types.FloatingPointPrecision.SINGLE;
 import static org.junit.Assert.assertEquals;
 
-import org.apache.arrow.flatbuf.TimeUnit;
-import org.apache.arrow.flatbuf.UnionMode;
+import org.apache.arrow.vector.types.TimeUnit;
 import org.apache.arrow.vector.types.Types.MinorType;
+import org.apache.arrow.vector.types.UnionMode;
 import org.apache.arrow.vector.types.pojo.ArrowType.FloatingPoint;
 import org.apache.arrow.vector.types.pojo.ArrowType.Int;
 import org.apache.arrow.vector.types.pojo.ArrowType.List;
-import org.apache.arrow.vector.types.pojo.ArrowType.Struct_;
+import org.apache.arrow.vector.types.pojo.ArrowType.Struct;
 import org.apache.arrow.vector.types.pojo.ArrowType.Timestamp;
 import org.apache.arrow.vector.types.pojo.ArrowType.Union;
 import org.apache.arrow.vector.types.pojo.ArrowType.Utf8;
@@ -55,7 +55,7 @@ public class TestConvert {
     childrenBuilder.add(new Field("child1", true, Utf8.INSTANCE, null));
     childrenBuilder.add(new Field("child2", true, new FloatingPoint(SINGLE), ImmutableList.<Field>of()));
 
-    Field initialField = new Field("a", true, Struct_.INSTANCE, childrenBuilder.build());
+    Field initialField = new Field("a", true, Struct.INSTANCE, childrenBuilder.build());
     run(initialField);
   }
 
@@ -73,7 +73,7 @@ public class TestConvert {
     ImmutableList.Builder<Field> childrenBuilder = ImmutableList.builder();
     childrenBuilder.add(new Field("child1", true, Utf8.INSTANCE, null));
     childrenBuilder.add(new Field("child2", true, new FloatingPoint(SINGLE), ImmutableList.<Field>of()));
-    childrenBuilder.add(new Field("child3", true, new Struct_(), ImmutableList.<Field>of(
+    childrenBuilder.add(new Field("child3", true, new Struct(), ImmutableList.<Field>of(
         new Field("child3.1", true, Utf8.INSTANCE, null),
         new Field("child3.2", true, new FloatingPoint(DOUBLE), ImmutableList.<Field>of())
         )));

http://git-wip-us.apache.org/repos/asf/arrow/blob/ebe7dc8f/java/vector/src/test/java/org/apache/arrow/vector/types/pojo/TestSchema.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/types/pojo/TestSchema.java b/java/vector/src/test/java/org/apache/arrow/vector/types/pojo/TestSchema.java
index 0ef8be7..d60d17e 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/types/pojo/TestSchema.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/types/pojo/TestSchema.java
@@ -23,10 +23,10 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 
-import org.apache.arrow.flatbuf.IntervalUnit;
-import org.apache.arrow.flatbuf.Precision;
-import org.apache.arrow.flatbuf.TimeUnit;
-import org.apache.arrow.flatbuf.UnionMode;
+import org.apache.arrow.vector.types.FloatingPointPrecision;
+import org.apache.arrow.vector.types.IntervalUnit;
+import org.apache.arrow.vector.types.TimeUnit;
+import org.apache.arrow.vector.types.UnionMode;
 import org.junit.Test;
 
 public class TestSchema {
@@ -40,14 +40,32 @@ public class TestSchema {
   }
 
   @Test
+  public void testComplex() throws IOException {
+    Schema schema = new Schema(asList(
+        field("a", false, new ArrowType.Int(8, true)),
+        field("b", new ArrowType.Struct(),
+            field("c", new ArrowType.Int(16, true)),
+            field("d", new ArrowType.Utf8())),
+        field("e", new ArrowType.List(), field(null, new ArrowType.Date())),
+        field("f", new ArrowType.FloatingPoint(FloatingPointPrecision.SINGLE)),
+        field("g", new ArrowType.Timestamp(TimeUnit.MILLISECOND)),
+        field("h", new ArrowType.Interval(IntervalUnit.DAY_TIME))
+        ));
+    roundTrip(schema);
+    assertEquals(
+        "Schema<a: Int(8, true), b: Struct<c: Int(16, true), d: Utf8>, e: List<Date>, f: FloatingPoint(SINGLE), g: Timestamp(MILLISECOND), h: Interval(DAY_TIME)>",
+        schema.toString());
+  }
+
+  @Test
   public void testAll() throws IOException {
     Schema schema = new Schema(asList(
         field("a", false, new ArrowType.Null()),
-        field("b", new ArrowType.Struct_(), field("ba", new ArrowType.Null())),
+        field("b", new ArrowType.Struct(), field("ba", new ArrowType.Null())),
         field("c", new ArrowType.List(), field("ca", new ArrowType.Null())),
         field("d", new ArrowType.Union(UnionMode.Sparse, new int[] {1, 2, 3}), field("da", new ArrowType.Null())),
         field("e", new ArrowType.Int(8, true)),
-        field("f", new ArrowType.FloatingPoint(Precision.SINGLE)),
+        field("f", new ArrowType.FloatingPoint(FloatingPointPrecision.SINGLE)),
         field("g", new ArrowType.Utf8()),
         field("h", new ArrowType.Binary()),
         field("i", new ArrowType.Bool()),
@@ -94,9 +112,9 @@ public class TestSchema {
   @Test
   public void testFP() throws IOException {
     Schema schema = new Schema(asList(
-        field("a", new ArrowType.FloatingPoint(Precision.HALF)),
-        field("b", new ArrowType.FloatingPoint(Precision.SINGLE)),
-        field("c", new ArrowType.FloatingPoint(Precision.DOUBLE))
+        field("a", new ArrowType.FloatingPoint(FloatingPointPrecision.HALF)),
+        field("b", new ArrowType.FloatingPoint(FloatingPointPrecision.SINGLE)),
+        field("c", new ArrowType.FloatingPoint(FloatingPointPrecision.DOUBLE))
         ));
     roundTrip(schema);
     contains(schema, "HALF", "SINGLE", "DOUBLE");