You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2016/05/16 03:53:57 UTC

[22/42] metamodel git commit: METAMODEL-225: Fixed

METAMODEL-225: Fixed

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

Branch: refs/heads/5.x
Commit: c5a233a65ce67d782d281e7c7e57dc425c184a19
Parents: 6a669d7
Author: kaspersorensen <i....@gmail.com>
Authored: Thu Apr 21 10:00:37 2016 -0700
Committer: kaspersorensen <i....@gmail.com>
Committed: Thu Apr 21 10:00:37 2016 -0700

----------------------------------------------------------------------
 .../rest/JestElasticSearchUtils.java            | 19 ++++--
 .../rest/JestElasticSearchUtilsTest.java        | 68 ++++++++++++++++++++
 2 files changed, 83 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/c5a233a6/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtils.java
----------------------------------------------------------------------
diff --git a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtils.java b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtils.java
index 7448aa6..11a79b7 100644
--- a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtils.java
+++ b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtils.java
@@ -18,8 +18,10 @@
  */
 package org.apache.metamodel.elasticsearch.rest;
 
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.DefaultRow;
 import org.apache.metamodel.data.Row;
@@ -29,7 +31,9 @@ import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.util.NumberComparator;
 
-import java.util.Date;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 
 /**
  * Shared/common util functions for the ElasticSearch MetaModel module.
@@ -58,6 +62,14 @@ final class JestElasticSearchUtils {
         if (field == null || field.isJsonNull()) {
             return null;
         }
+
+        if (field.isJsonObject()) {
+            return new Gson().fromJson(field, Map.class);
+        }
+        if (field.isJsonArray()) {
+            return new Gson().fromJson(field, List.class);
+        }
+
         if (type.isNumber()) {
             // Pretty terrible workaround to avoid LazilyParsedNumber
             // (which is happily output, but not recognized by Jest/GSON).
@@ -75,5 +87,4 @@ final class JestElasticSearchUtils {
             return field.getAsString();
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/c5a233a6/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
----------------------------------------------------------------------
diff --git a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
index 9e2b42f..f114826 100644
--- a/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
+++ b/elasticsearch/rest/src/test/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUtilsTest.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.metamodel.data.DataSetHeader;
 import org.apache.metamodel.data.Row;
@@ -35,7 +36,9 @@ import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.schema.MutableColumn;
 import org.junit.Test;
 
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
 
 public class JestElasticSearchUtilsTest {
 
@@ -99,6 +102,71 @@ public class JestElasticSearchUtilsTest {
     }
 
     @Test
+    public void testCreateRowWithJsonObject() throws Exception {
+        final Column col1 = new MutableColumn("col1", ColumnType.MAP);
+        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { col1 });
+        final JsonObject source = new JsonObject();
+        final JsonObject value = new JsonObject();
+        value.addProperty("foo1", "bar");
+        value.addProperty("foo2", 42);
+        source.add("col1", value);
+        final String documentId = "row1";
+
+        final Row row = JestElasticSearchUtils.createRow(source, documentId, header);
+        assertEquals("Row[values=[{foo1=bar, foo2=42.0}]]", row.toString());
+
+        final Map<?, ?> rowValue = (Map<?, ?>) row.getValue(col1);
+        assertEquals("bar", rowValue.get("foo1"));
+    }
+
+    @Test
+    public void testCreateRowWithJsonArray() throws Exception {
+        final Column col1 = new MutableColumn("col1", ColumnType.LIST);
+        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { col1 });
+        final JsonObject source = new JsonObject();
+        final JsonArray value = new JsonArray();
+        value.add(new JsonPrimitive("foo"));
+        value.add(new JsonPrimitive("bar"));
+        source.add("col1", value);
+        final String documentId = "row1";
+
+        final Row row = JestElasticSearchUtils.createRow(source, documentId, header);
+        assertEquals("Row[values=[[foo, bar]]]", row.toString());
+
+        final List<?> rowValue = (List<?>) row.getValue(col1);
+        assertEquals("foo", rowValue.get(0));
+    }
+
+    @Test
+    public void testCreateRowWithDeepNesting() throws Exception {
+        final Column col1 = new MutableColumn("col1", ColumnType.LIST);
+        final DataSetHeader header = new SimpleDataSetHeader(new Column[] { col1 });
+        final JsonObject source = new JsonObject();
+
+        final JsonObject obj2 = new JsonObject();
+        obj2.addProperty("foo", 43);
+
+        final JsonArray arr1 = new JsonArray();
+        arr1.add(new JsonPrimitive("foo"));
+        arr1.add(new JsonPrimitive("bar"));
+        arr1.add(obj2);
+
+        final JsonObject obj1 = new JsonObject();
+        obj1.addProperty("mybool", true);
+        obj1.add("arr1", arr1);
+        source.add("col1", obj1);
+        final String documentId = "row1";
+
+        final Row row = JestElasticSearchUtils.createRow(source, documentId, header);
+        assertEquals("Row[values=[{mybool=true, arr1=[foo, bar, {foo=43.0}]}]]", row.toString());
+
+        final Map<?, ?> rowObj1 = (Map<?, ?>) row.getValue(col1);
+        final List<?> rowList = (List<?>) rowObj1.get("arr1");
+        final Map<?, ?> rowObj2 = (Map<?, ?>) rowList.get(2);
+        assertEquals(43.0, rowObj2.get("foo"));
+    }
+
+    @Test
     public void testCreateRowWithParseableDates() throws Exception {
         SelectItem item1 = new SelectItem(new MutableColumn("value1", ColumnType.STRING));
         SelectItem item2 = new SelectItem(new MutableColumn("value2", ColumnType.DATE));