Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 8ebfdd2f4 -> 77eb52e24


SQOOP-1716: Add Options as a field in the Enum object

(Veena Basavaraj via Abraham Elmahrek)


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

Branch: refs/heads/sqoop2
Commit: 77eb52e24060a3cbf853aa9d3cb6f2a517a8bd24
Parents: 8ebfdd2
Author: Abraham Elmahrek <[email protected]>
Authored: Tue Nov 18 15:44:41 2014 -0800
Committer: Abraham Elmahrek <[email protected]>
Committed: Tue Nov 18 15:45:14 2014 -0800

----------------------------------------------------------------------
 .../sqoop/json/util/SchemaSerialization.java    | 28 +++++++--
 .../java/org/apache/sqoop/schema/type/Enum.java | 60 ++++++++++++++++++--
 .../json/util/TestSchemaSerialization.java      | 10 +++-
 3 files changed, 87 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java
----------------------------------------------------------------------
diff --git 
a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java 
b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java
index dec8c0e..112a404 100644
--- a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java
+++ b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java
@@ -17,6 +17,8 @@
  */
 package org.apache.sqoop.json.util;
 
+import java.util.HashSet;
+
 import org.apache.sqoop.schema.NullSchema;
 import org.apache.sqoop.schema.Schema;
 import org.apache.sqoop.schema.type.AbstractComplexListType;
@@ -62,6 +64,9 @@ public class SchemaSerialization {
   // arrays and set attribute
   private static final String LIST = "list";
   private static final String LIST_TYPE = "listType";
+  // enum attribute
+  private static final String ENUM_OPTIONS = "options";
+
   // number attribute
   private static final String BYTE_SIZE = "byteSize";
   // string attribute
@@ -126,10 +131,17 @@ public class SchemaSerialization {
       map.put(VALUE, extractColumn(((Map) column).getValue()));
       break;
     case ENUM:
+      JSONObject enumList = new JSONObject();
+      ret.put(LIST, enumList);
+      enumList.put(LIST_TYPE, extractColumn(((AbstractComplexListType) 
column).getListType()));
+      JSONArray optionsArray = new JSONArray();
+      optionsArray.addAll(((Enum)column).getOptions());
+      enumList.put(ENUM_OPTIONS, optionsArray);
+      break;
     case SET:
-      JSONObject list = new JSONObject();
-      ret.put(LIST, list);
-      list.put(LIST_TYPE, extractColumn(((AbstractComplexListType) 
column).getListType()));
+      JSONObject set = new JSONObject();
+      ret.put(LIST, set);
+      set.put(LIST_TYPE, extractColumn(((AbstractComplexListType) 
column).getListType()));
       break;
     case ARRAY:
       JSONObject arrayList = new JSONObject();
@@ -180,6 +192,8 @@ public class SchemaSerialization {
     Column value = null;
     Long arraySize = null;
     Column listType = null;
+    java.util.Set<String> options = new HashSet<String>();
+
     // complex type attribute
     if (obj.containsKey(MAP)) {
       JSONObject map = (JSONObject) obj.get(MAP);
@@ -197,6 +211,12 @@ public class SchemaSerialization {
         listType = restoreColumn((JSONObject) list.get(LIST_TYPE));
       }
       arraySize = (Long) list.get(SIZE);
+      if (list.containsKey(ENUM_OPTIONS)) {
+        JSONArray optionsArray = (JSONArray) list.get(ENUM_OPTIONS);
+        for (int n = 0; n < optionsArray.size(); n++) {
+          options.add((String) optionsArray.get(n));
+        }
+      }
     }
     ColumnType type = ColumnType.valueOf((String) obj.get(TYPE));
     Column output = null;
@@ -225,7 +245,7 @@ public class SchemaSerialization {
       output = new Decimal(name).setPrecision(precision).setScale(scale);
       break;
     case ENUM:
-      output = new Enum(name).setListType(listType);
+      output = new Enum(name, options).setListType(listType);
       break;
     case FIXED_POINT:
       Boolean unsigned = (Boolean) obj.get(UNSIGNED);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/main/java/org/apache/sqoop/schema/type/Enum.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/schema/type/Enum.java 
b/common/src/main/java/org/apache/sqoop/schema/type/Enum.java
index 1388d49..33e6dec 100644
--- a/common/src/main/java/org/apache/sqoop/schema/type/Enum.java
+++ b/common/src/main/java/org/apache/sqoop/schema/type/Enum.java
@@ -17,6 +17,9 @@
  */
 package org.apache.sqoop.schema.type;
 
+import java.util.Set;
+import java.util.HashSet;
+
 /**
  * Enum is a set of predefined values of its own type
  *
@@ -25,16 +28,37 @@ package org.apache.sqoop.schema.type;
 
 public class Enum extends AbstractComplexListType {
 
+  // The options set contains the possible values for the Enum
+  private Set<String> options;
+
   public Enum(String name) {
     super(name);
+    setOptions(new HashSet<String>());
+  }
+
+  public Enum(String name, Set<String> options) {
+    super(name);
+    setOptions(options);
   }
 
-  public Enum(String name, Column listType) {
+  public Enum(String name, Set<String> options, Column listType) {
     super(name, listType);
+    setOptions(options);
   }
 
-  public Enum(String name, Boolean nullable, Column listType) {
+  public Enum(String name, Boolean nullable, Set<String> options, Column 
listType) {
     super(name, nullable, listType);
+    setOptions(options);
+  }
+
+  public Enum setOptions(Set<String> options) {
+    assert options != null;
+    this.options = options;
+    return this;
+  }
+
+  public Set<String> getOptions() {
+    return options;
   }
 
   @Override
@@ -44,8 +68,34 @@ public class Enum extends AbstractComplexListType {
 
   @Override
   public String toString() {
-    return new StringBuilder("Enum{")
-             .append(super.toString())
-             .append("}").toString();
+    return new 
StringBuilder("Enum{").append(super.toString()).append(",options=").append(options)
+        .append("}").toString();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Enum)) {
+      return false;
+    }
+    if (!super.equals(o)) {
+      return false;
+    }
+
+    Enum that = (Enum) o;
+
+    if (options != null ? !options.equals(that.options) : that.options != null)
+      return false;
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = super.hashCode();
+    result = 31 * result + (options != null ? options.hashCode() : 0);
+    return result;
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java
----------------------------------------------------------------------
diff --git 
a/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java 
b/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java
index 9f8ee3e..8ae856f 100644
--- 
a/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java
+++ 
b/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java
@@ -19,6 +19,10 @@ package org.apache.sqoop.json.util;
 
 import static org.junit.Assert.assertEquals;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+
 import org.apache.sqoop.schema.NullSchema;
 import org.apache.sqoop.schema.Schema;
 import org.apache.sqoop.schema.type.Array;
@@ -96,7 +100,9 @@ public class TestSchemaSerialization {
 
   @Test
   public void testEnum() {
-    Schema e = new Schema("e").addColumn(new Enum("e", new Text("e1")));
+    Schema e = new Schema("e").addColumn(new Enum("e", Collections
+        .unmodifiableSet(new HashSet<String>(Arrays.asList(new String[] { "A", 
"B" }))), new Text(
+        "e1")));
     transferAndAssert(e);
   }
 
@@ -156,7 +162,7 @@ public class TestSchemaSerialization {
       .addColumn(new Date("d"))
       .addColumn(new DateTime("e"))
       .addColumn(new Decimal("f"))
-      .addColumn(new Enum("g", new Text("g1")))
+      .addColumn(new Enum("g", Collections.unmodifiableSet(new 
HashSet<String>(Arrays.asList(new String[] { "X", "Y" }))), new Text("g1")))
       .addColumn(new FixedPoint("h"))
       .addColumn(new FloatingPoint("i"))
       .addColumn(new Map("j", new Text("j1"), new Text("j2")))

Reply via email to