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));