Refactoring:
* Removal of ColumnTypeResolver._columnTypes field.
* String constants in Neo4jDataContext.
* JSONArray => List<String> conversion in Neo4jDataSet.


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

Branch: refs/heads/master
Commit: 0ec8610c409e62866bedaa5bd67e82d33155892e
Parents: f1457a1
Author: jakub <j.horci...@quadient.com>
Authored: Mon May 28 15:33:55 2018 +0200
Committer: jakub <j.horci...@quadient.com>
Committed: Mon May 28 15:33:55 2018 +0200

----------------------------------------------------------------------
 .../metamodel/neo4j/ColumnTypeResolver.java     | 137 +++++++++++++++++++
 .../neo4j/Neo4jCypherQueryBuilder.java          |  14 +-
 .../metamodel/neo4j/Neo4jDataContext.java       |  52 +++----
 .../apache/metamodel/neo4j/Neo4jDataSet.java    |  36 ++++-
 .../neo4j/utils/ColumnTypeResolver.java         | 126 -----------------
 .../metamodel/neo4j/ColumnTypeResolverTest.java |  76 ++++++++++
 .../neo4j/utils/ColumnTypeResolverTest.java     |  79 -----------
 7 files changed, 276 insertions(+), 244 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/main/java/org/apache/metamodel/neo4j/ColumnTypeResolver.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/ColumnTypeResolver.java 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/ColumnTypeResolver.java
new file mode 100644
index 0000000..84be8d6
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/ColumnTypeResolver.java
@@ -0,0 +1,137 @@
+/**
+ * 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.metamodel.neo4j;
+
+import static org.apache.metamodel.neo4j.Neo4jDataContext.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.metamodel.schema.ColumnType;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class ColumnTypeResolver {
+    private static final Logger logger = 
LoggerFactory.getLogger(ColumnTypeResolver.class);
+    private final JSONObject _jsonObject;
+    private final List<String> _columnNames = new ArrayList<>();
+
+    public ColumnTypeResolver(final JSONObject jsonObject, final String[] 
columnNamesArray) {
+        _jsonObject = jsonObject;
+        _columnNames.addAll(Arrays.asList(columnNamesArray));
+    }
+
+    public ColumnType[] getColumnTypes() {
+        final List<ColumnType> columnTypes = new ArrayList<>();
+        
+        try {
+            columnTypes.addAll(getColumnTypesFromMetadata());
+            columnTypes.addAll(getColumnTypesFromData());
+        } catch (final JSONException e) {
+            // ignore missing data
+        }
+
+        columnTypes.addAll(getColumnTypesFromRemainingColumns());
+        return columnTypes.toArray(new ColumnType[columnTypes.size()]);
+    }
+
+    private List<ColumnType> getColumnTypesFromData() throws JSONException {
+        final List<ColumnType> columnTypes = new ArrayList<>();
+        
+        if (_jsonObject.has(NEO4J_KEY_DATA)) {
+            final JSONObject data = _jsonObject.getJSONObject(NEO4J_KEY_DATA);
+            final Iterator<?> keysIterator = data.keys();
+
+            while (keysIterator.hasNext()) {
+                final String key = (String) keysIterator.next();
+                final ColumnType type = getTypeFromValue(data, key);
+                columnTypes.add(type);
+                removeIfAvailable(_columnNames, key);
+            }
+        }
+        
+        return columnTypes;
+    }
+
+    private List<ColumnType> getColumnTypesFromMetadata() throws JSONException 
{
+        final List<ColumnType> columnTypes = new ArrayList<>();
+        
+        if (_jsonObject.has(NEO4J_KEY_METADATA)) {
+            final JSONObject metadata = 
_jsonObject.getJSONObject(NEO4J_KEY_METADATA);
+
+            if (metadata.has(NEO4J_KEY_ID)) {
+                columnTypes.add(ColumnType.BIGINT);
+                removeIfAvailable(_columnNames, NEO4J_COLUMN_NAME_ID);
+            }
+        }
+        
+        return columnTypes;
+    }
+
+    private List<ColumnType> getColumnTypesFromRemainingColumns() {
+        final List<ColumnType> columnTypes = new ArrayList<>();
+        
+        for (final String remainingColumnName : _columnNames) {
+            if 
(remainingColumnName.contains(NEO4J_COLUMN_NAME_RELATION_PREFIX)) {
+                if 
(remainingColumnName.contains(NEO4J_COLUMN_NAME_RELATION_LIST_INDICATOR)) {
+                    columnTypes.add(ColumnType.LIST);
+                } else {
+                    columnTypes.add(ColumnType.BIGINT);
+                }
+            } else {
+                columnTypes.add(ColumnType.STRING);
+            }
+        }
+        
+        return columnTypes;
+    }
+
+    private void removeIfAvailable(final List<String> list, final String key) {
+        if (list.contains(key)) {
+            list.remove(key);
+        }
+    }
+
+    private ColumnType getTypeFromValue(final JSONObject data, final String 
key) {
+        try {
+            final Class<? extends Object> keyClass = data.get(key).getClass();
+
+            if (keyClass.equals(Boolean.class)) {
+                return ColumnType.BOOLEAN;
+            } else if (keyClass.equals(Integer.class)) {
+                return ColumnType.INTEGER;
+            } else if (keyClass.equals(Long.class)) {
+                return ColumnType.BIGINT;
+            } else if (keyClass.equals(Double.class)) {
+                return ColumnType.DOUBLE;
+            } else if (keyClass.equals(JSONArray.class)) {
+                return ColumnType.LIST;
+            }
+        } catch (final JSONException e) {
+            logger.error("JSON object does not contain required key '{}'. {}", 
key, e.getMessage());
+        }
+
+        return ColumnType.STRING;
+    }
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jCypherQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jCypherQueryBuilder.java 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jCypherQueryBuilder.java
index 38079ce..c880c92 100644
--- 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jCypherQueryBuilder.java
+++ 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jCypherQueryBuilder.java
@@ -18,6 +18,8 @@
  */
 package org.apache.metamodel.neo4j;
 
+import static org.apache.metamodel.neo4j.Neo4jDataContext.NEO4J_COLUMN_NAME_ID;
+
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -41,15 +43,15 @@ public class Neo4jCypherQueryBuilder {
         Map<String, String> returnClauseMap = new LinkedHashMap<>();
         Map<String, Integer> relationshipIndexMap = new LinkedHashMap<>();
         for (String columnName : columnNames) {
-            if (columnName.startsWith(Neo4jDataContext.RELATIONSHIP_PREFIX)) {
-                columnName = 
columnName.replace(Neo4jDataContext.RELATIONSHIP_PREFIX, "");
+            if 
(columnName.startsWith(Neo4jDataContext.NEO4J_COLUMN_NAME_RELATION_PREFIX)) {
+                columnName = 
columnName.replace(Neo4jDataContext.NEO4J_COLUMN_NAME_RELATION_PREFIX, "");
 
                 String relationshipName;
                 String relationshipPropertyName;
 
-                if 
(columnName.contains(Neo4jDataContext.RELATIONSHIP_COLUMN_SEPARATOR)) {
-                    String[] parsedColumnNameArray = 
columnName.split(Neo4jDataContext.RELATIONSHIP_COLUMN_SEPARATOR);
-
+                if 
(columnName.contains(Neo4jDataContext.NEO4J_COLUMN_NAME_RELATION_LIST_INDICATOR))
 {
+                    String[] parsedColumnNameArray =
+                            
columnName.split(Neo4jDataContext.NEO4J_COLUMN_NAME_RELATION_LIST_INDICATOR);
                     relationshipName = parsedColumnNameArray[0];
                     relationshipPropertyName = parsedColumnNameArray[1];
                 } else {
@@ -77,7 +79,7 @@ public class Neo4jCypherQueryBuilder {
                     returnClauseMap.put(columnName, relationshipAlias + "." + 
relationshipPropertyName);
                 }
             } else {
-                if (columnName.equals("_id")) {
+                if (columnName.equals(NEO4J_COLUMN_NAME_ID)) {
                     returnClauseMap.put(columnName, "id(n)");
                 } else {
                     returnClauseMap.put(columnName, "n." + columnName);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
index 662807d..2f8340a 100644
--- a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
@@ -33,7 +33,6 @@ import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DocumentSource;
-import org.apache.metamodel.neo4j.utils.ColumnTypeResolver;
 import org.apache.metamodel.query.FilterItem;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
@@ -53,23 +52,24 @@ import org.slf4j.LoggerFactory;
  * DataContext implementation for Neo4j
  */
 public class Neo4jDataContext extends QueryPostprocessDataContext implements 
DataContext, DocumentSourceProvider {
-
-    public static final Logger logger = 
LoggerFactory.getLogger(Neo4jDataContext.class);
-
     public static final String SCHEMA_NAME = "neo4j";
-
     public static final int DEFAULT_PORT = 7474;
-
-    public static final String RELATIONSHIP_PREFIX = "rel_";
-
-    public static final String RELATIONSHIP_COLUMN_SEPARATOR = "#";
+    public static final String NEO4J_KEY_METADATA = "metadata";
+    public static final String NEO4J_KEY_METADATA_TYPE = "type";
+    public static final String NEO4J_KEY_PROPERTIES = "properties";
+    public static final String NEO4J_KEY_DATA = "data";
+    public static final String NEO4J_KEY_ID = "id";
+    public static final String NEO4J_KEY_RESPONSE_RESULTS = "results";
+    public static final String NEO4J_KEY_RESPONSE_ROW = "row";
+    public static final String NEO4J_COLUMN_NAME_ID = "_id";
+    public static final String NEO4J_COLUMN_NAME_RELATION_PREFIX = "rel_";
+    public static final String NEO4J_COLUMN_NAME_RELATION_LIST_INDICATOR = "#";
+
+    private static final Logger logger = 
LoggerFactory.getLogger(Neo4jDataContext.class);
 
     private final SimpleTableDef[] _tableDefs;
-
     private final Neo4jRequestWrapper _requestWrapper;
-
     private final HttpHost _httpHost;
-
     private String _serviceRoot = "/db/data";
 
     public Neo4jDataContext(String hostname, int port, String username, String 
password, SimpleTableDef... tableDefs) {
@@ -187,7 +187,7 @@ public class Neo4jDataContext extends 
QueryPostprocessDataContext implements Dat
         final Set<String> relationshipPropertiesPerLabel = new 
LinkedHashSet<>();
 
         for (final JSONObject node : nodesPerLabel) {
-            final Integer nodeId = (Integer) 
node.getJSONObject("metadata").get("id");
+            final Integer nodeId = (Integer) 
node.getJSONObject(NEO4J_KEY_METADATA).get(NEO4J_KEY_ID);
             final Set<String> relationshipPropertiesForNode = 
createRelationshipPropertiesForNode(nodeId);
             
relationshipPropertiesPerLabel.addAll(relationshipPropertiesForNode);
         }
@@ -209,8 +209,8 @@ public class Neo4jDataContext extends 
QueryPostprocessDataContext implements Dat
 
         for (final JSONObject relationship : relationshipsPerNode) {
             // Add the relationship as a column in the table
-            final String relationshipName = relationship.getString("type");
-            final String relationshipNameProperty = RELATIONSHIP_PREFIX + 
relationshipName;
+            final String relationshipName = 
relationship.getString(NEO4J_KEY_METADATA_TYPE);
+            final String relationshipNameProperty = 
NEO4J_COLUMN_NAME_RELATION_PREFIX + relationshipName;
             relationshipProperties.add(relationshipNameProperty);
             
             // Add all the relationship properties as table columns
@@ -240,15 +240,16 @@ public class Neo4jDataContext extends 
QueryPostprocessDataContext implements Dat
     private List<String> getAllPropertiesPerRelationship(JSONObject 
relationship) {
         final List<String> propertyNames = new ArrayList<>();
         try {
-            final String relationshipName =
-                    RELATIONSHIP_PREFIX + 
relationship.getJSONObject("metadata").getString("type");
-            final JSONObject relationshipPropertiesJSONObject = 
relationship.getJSONObject("data");
+            final String relationshipName = NEO4J_COLUMN_NAME_RELATION_PREFIX 
+ relationship
+                    .getJSONObject(NEO4J_KEY_METADATA)
+                    .getString(NEO4J_KEY_METADATA_TYPE);
+            final JSONObject relationshipPropertiesJSONObject = 
relationship.getJSONObject(NEO4J_KEY_DATA);
             
             if (relationshipPropertiesJSONObject.length() > 0) {
                 final JSONArray relationshipPropertiesNamesJSONArray = 
relationshipPropertiesJSONObject.names();
-                
+
                 for (int i = 0; i < 
relationshipPropertiesNamesJSONArray.length(); i++) {
-                    final String propertyName = relationshipName + 
RELATIONSHIP_COLUMN_SEPARATOR
+                    final String propertyName = relationshipName + 
NEO4J_COLUMN_NAME_RELATION_LIST_INDICATOR
                             + 
relationshipPropertiesNamesJSONArray.getString(i);
                     if (!propertyNames.contains(propertyName)) {
                         propertyNames.add(propertyName);
@@ -306,12 +307,11 @@ public class Neo4jDataContext extends 
QueryPostprocessDataContext implements Dat
 
     private List<String> getAllPropertiesPerNode(JSONObject node) {
         List<String> properties = new ArrayList<String>();
-        properties.add("_id");
+        properties.add(NEO4J_COLUMN_NAME_ID);
 
         String propertiesEndpoint;
         try {
-            propertiesEndpoint = node.getString("properties");
-
+            propertiesEndpoint = node.getString(NEO4J_KEY_PROPERTIES);
             String allPropertiesPerNodeJsonString = 
_requestWrapper.executeRestRequest(new HttpGet(propertiesEndpoint));
 
             JSONObject allPropertiesPerNodeJsonObject = new 
JSONObject(allPropertiesPerNodeJsonString);
@@ -364,11 +364,11 @@ public class Neo4jDataContext extends 
QueryPostprocessDataContext implements Dat
         JSONObject jsonResponseObject;
         try {
             jsonResponseObject = new JSONObject(jsonResponse);
-            JSONArray resultsJSONArray = 
jsonResponseObject.getJSONArray("results");
+            JSONArray resultsJSONArray = 
jsonResponseObject.getJSONArray(NEO4J_KEY_RESPONSE_RESULTS);
             JSONObject resultJSONObject = (JSONObject) resultsJSONArray.get(0);
-            JSONArray dataJSONArray = resultJSONObject.getJSONArray("data");
+            JSONArray dataJSONArray = 
resultJSONObject.getJSONArray(NEO4J_KEY_DATA);
             JSONObject rowJSONObject = (JSONObject) dataJSONArray.get(0);
-            JSONArray valueJSONArray = rowJSONObject.getJSONArray("row");
+            JSONArray valueJSONArray = 
rowJSONObject.getJSONArray(NEO4J_KEY_RESPONSE_ROW);
             Number value = (Number) valueJSONArray.get(0);
             return value;
         } catch (JSONException e) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataSet.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataSet.java 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataSet.java
index 6c1af50..9674f43 100644
--- a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataSet.java
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataSet.java
@@ -18,6 +18,11 @@
  */
 package org.apache.metamodel.neo4j;
 
+import static org.apache.metamodel.neo4j.Neo4jDataContext.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.metamodel.data.AbstractDataSet;
 import org.apache.metamodel.data.DefaultRow;
 import org.apache.metamodel.data.Row;
@@ -27,8 +32,6 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.util.List;
-
 final class Neo4jDataSet extends AbstractDataSet {
 
     private JSONObject _resultJSONObject;
@@ -44,19 +47,25 @@ final class Neo4jDataSet extends AbstractDataSet {
     @Override
     public boolean next() {
         try {
-            final JSONArray resultsArray = 
_resultJSONObject.getJSONArray("results");
+            final JSONArray resultsArray = 
_resultJSONObject.getJSONArray(NEO4J_KEY_RESPONSE_RESULTS);
             
             if (resultsArray.length() > 0) {
                 final JSONObject results = resultsArray.getJSONObject(0);
-                final JSONArray data = results.getJSONArray("data");
+                final JSONArray data = results.getJSONArray(NEO4J_KEY_DATA);
                 
                 if (_currentRowIndex < data.length()) {
                     final JSONObject row = 
data.getJSONObject(_currentRowIndex);
-                    final JSONArray jsonValues = row.getJSONArray("row");
+                    final JSONArray jsonValues = 
row.getJSONArray(NEO4J_KEY_RESPONSE_ROW);
                     final Object[] objectValues = new 
Object[jsonValues.length()];
                     
                     for (int i = 0; i < jsonValues.length(); i++) {
-                        objectValues[i] = jsonValues.get(i);
+                        final Object value = jsonValues.get(i);
+                        
+                        if (value instanceof JSONArray) {
+                            objectValues[i] = 
convertJSONArrayToList((JSONArray) value);
+                        } else {
+                            objectValues[i] = value;
+                        }
                     }
                     
                     _row = new DefaultRow(new 
SimpleDataSetHeader(getSelectItems()), objectValues);
@@ -75,9 +84,22 @@ final class Neo4jDataSet extends AbstractDataSet {
         return false;
     }
 
+    private List<String> convertJSONArrayToList(final JSONArray jsonArray) 
throws JSONException {
+        final List<String> list = new ArrayList<>();
+        
+        for (int i = 0; i < jsonArray.length(); i++) {
+            final Object item = jsonArray.get(i);
+            
+            if (item != null) {
+                list.add(item.toString());
+            }
+        }
+        
+        return list;
+    }
+
     @Override
     public Row getRow() {
         return _row;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java 
b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java
deleted file mode 100644
index aac8249..0000000
--- 
a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * 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.metamodel.neo4j.utils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.metamodel.schema.ColumnType;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ColumnTypeResolver {
-    private static final Logger logger = 
LoggerFactory.getLogger(ColumnTypeResolver.class);
-    private final JSONObject _jsonObject;
-    private final List<String> _columnNames = new ArrayList<>();
-    private final List<ColumnType> _columnTypes = new ArrayList<>();
-
-    public ColumnTypeResolver(final JSONObject jsonObject, final String[] 
columnNamesArray) {
-        _jsonObject = jsonObject;
-        _columnNames.addAll(Arrays.asList(columnNamesArray));
-    }
-    
-    public ColumnType[] getColumnTypes() {
-        try {
-            fillColumnTypesFromMetadata();
-            fillColumnTypesFromData();
-        } catch (final JSONException e) {
-            // ignore missing data
-        }
-
-        fillColumnTypesFromRemainingColumns();
-        return _columnTypes.toArray(new ColumnType[_columnTypes.size()]);
-    }
-
-    private void fillColumnTypesFromData() throws JSONException { 
-        final String dataKey = "data";
-
-        if (_jsonObject.has(dataKey)) {
-            final JSONObject data = _jsonObject.getJSONObject(dataKey);
-            final Iterator<?> keysIterator = data.keys();
-
-            while (keysIterator.hasNext()) {
-                final String key = (String) keysIterator.next();
-                final ColumnType type = getTypeFromValue(data, key);
-                _columnTypes.add(type);
-                removeIfAvailable(_columnNames, key);
-            }
-        }
-    }
-
-    private void fillColumnTypesFromMetadata() throws JSONException {
-        final String metadataKey = "metadata";
-
-        if (_jsonObject.has(metadataKey)) {
-            final JSONObject metadata = _jsonObject.getJSONObject(metadataKey);
-
-            if (metadata.has("id")) {
-                _columnTypes.add(ColumnType.BIGINT);
-                removeIfAvailable(_columnNames, "_id");
-            }
-        }
-    }
-
-    private void fillColumnTypesFromRemainingColumns() {
-        for (final String remainingColumnName : _columnNames) {
-            if (remainingColumnName.contains("rel_")) {
-                if (remainingColumnName.contains("#")) {
-                    _columnTypes.add(ColumnType.LIST);
-                } else {
-                    _columnTypes.add(ColumnType.BIGINT);
-                }
-            } else {
-                _columnTypes.add(ColumnType.STRING);
-            }
-        }
-    }
-
-    private void removeIfAvailable(final List<String> list, final String key) {
-        if (list.contains(key)) {
-            list.remove(key);
-        }
-    }
-
-    private ColumnType getTypeFromValue(final JSONObject data, final String 
key) {
-        try {
-            final Class<? extends Object> keyClass = data.get(key).getClass();
-            
-            if (keyClass.equals(Boolean.class)) {
-                return ColumnType.BOOLEAN;
-            } else if (keyClass.equals(Integer.class)) {
-                return ColumnType.INTEGER;
-            } else if (keyClass.equals(Long.class)) {
-                return ColumnType.BIGINT;
-            } else if (keyClass.equals(Double.class)) {
-                return ColumnType.DOUBLE;
-            } else if (keyClass.equals(JSONArray.class)) {
-                return ColumnType.LIST;
-            }
-        } catch (final JSONException e) {
-            logger.error("JSON object does not contain required key '{}'. {}", 
key, e.getMessage());
-        }
-
-        return ColumnType.STRING;
-    }
-}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/test/java/org/apache/metamodel/neo4j/ColumnTypeResolverTest.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/test/java/org/apache/metamodel/neo4j/ColumnTypeResolverTest.java 
b/neo4j/src/test/java/org/apache/metamodel/neo4j/ColumnTypeResolverTest.java
new file mode 100644
index 0000000..6615acf
--- /dev/null
+++ b/neo4j/src/test/java/org/apache/metamodel/neo4j/ColumnTypeResolverTest.java
@@ -0,0 +1,76 @@
+/**
+ * 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.metamodel.neo4j;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.apache.metamodel.neo4j.Neo4jDataContext.*;
+
+import org.apache.metamodel.schema.ColumnType;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Test;
+
+public class ColumnTypeResolverTest {
+    private static final String COLUMN_BOOLEAN = "boolean";
+    private static final String COLUMN_INTEGER = "integer";
+    private static final String COLUMN_LONG = "long";
+    private static final String COLUMN_DOUBLE = "double";
+    private static final String COLUMN_ARRAY = "array";
+    private static final String COLUMN_STRING = "string";
+
+    @Test
+    public void testGetColumnTypes() throws Exception {
+        final JSONObject jsonObject = createJSONObject();
+        final String[] columnNames =
+                new String[] { NEO4J_COLUMN_NAME_ID, COLUMN_BOOLEAN, 
COLUMN_INTEGER, COLUMN_LONG, COLUMN_DOUBLE,
+                        COLUMN_ARRAY, COLUMN_STRING };
+        final ColumnTypeResolver resolver = new ColumnTypeResolver(jsonObject, 
columnNames);
+        final ColumnType[] columnTypes = resolver.getColumnTypes();
+        assertEquals(columnTypes.length, columnNames.length);
+        assertEquals(columnTypes[0], ColumnType.BIGINT); // ID
+        assertEquals(columnTypes[1], ColumnType.BOOLEAN);
+        assertEquals(columnTypes[2], ColumnType.STRING);
+        assertEquals(columnTypes[3], ColumnType.LIST);
+        assertEquals(columnTypes[4], ColumnType.DOUBLE);
+        assertEquals(columnTypes[5], ColumnType.INTEGER);
+        assertEquals(columnTypes[6], ColumnType.BIGINT);
+    }
+
+    private JSONObject createJSONObject() throws JSONException {
+        final JSONObject json = new JSONObject();
+        final JSONObject metadata = new JSONObject();
+        metadata.put(NEO4J_KEY_ID, 42L);
+        json.put(NEO4J_KEY_METADATA, metadata);
+        final JSONObject data = new JSONObject();
+        data.put(COLUMN_BOOLEAN, true);
+        data.put(COLUMN_STRING, "forty-two");
+        final JSONArray array = new JSONArray();
+        array.put(1).put(2).put(3);
+        data.put(COLUMN_ARRAY, array);
+        data.put(COLUMN_DOUBLE, 3.141592);
+        data.put(COLUMN_INTEGER, 42);
+        final JSONObject map = new JSONObject();
+        map.put("1", "one").put("2", "two").put("3", "three");
+        data.put(COLUMN_LONG, 12345678910L);
+        json.put(NEO4J_KEY_DATA, data);
+
+        return json;
+    }
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/0ec8610c/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java
----------------------------------------------------------------------
diff --git 
a/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java
 
b/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java
deleted file mode 100644
index 3dce4b2..0000000
--- 
a/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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.metamodel.neo4j.utils;
-
-import static junit.framework.TestCase.assertEquals;
-
-import org.apache.metamodel.schema.ColumnType;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.junit.Test;
-
-public class ColumnTypeResolverTest {
-    private static final String COLUMN_ID = "id";
-    private static final String COLUMN_ID_NEO4J = "_id";
-    private static final String COLUMN_METADATA  = "metadata";
-    private static final String COLUMN_DATA  = "data";
-    private static final String COLUMN_BOOLEAN = "boolean";
-    private static final String COLUMN_INTEGER = "integer";
-    private static final String COLUMN_LONG = "long";
-    private static final String COLUMN_DOUBLE = "double";
-    private static final String COLUMN_ARRAY = "array";
-    private static final String COLUMN_STRING = "string";
-    
-    @Test
-    public void testGetColumnTypes() throws Exception {
-        final JSONObject jsonObject = createJSONObject();
-        final String[] columnNames =
-                new String[] { COLUMN_ID_NEO4J, COLUMN_BOOLEAN, 
COLUMN_INTEGER, COLUMN_LONG, COLUMN_DOUBLE,
-                        COLUMN_ARRAY, COLUMN_STRING };
-        final ColumnTypeResolver resolver = new ColumnTypeResolver(jsonObject, 
columnNames);
-        final ColumnType[] columnTypes = resolver.getColumnTypes();
-        assertEquals(columnTypes.length, columnNames.length); 
-        assertEquals(columnTypes[0], ColumnType.BIGINT); // ID
-        assertEquals(columnTypes[1], ColumnType.BOOLEAN);
-        assertEquals(columnTypes[2], ColumnType.STRING);
-        assertEquals(columnTypes[3], ColumnType.LIST);
-        assertEquals(columnTypes[4], ColumnType.DOUBLE);
-        assertEquals(columnTypes[5], ColumnType.INTEGER);
-        assertEquals(columnTypes[6], ColumnType.BIGINT);
-    }
-    
-    private JSONObject createJSONObject() throws JSONException {
-        final JSONObject json = new JSONObject();
-        final JSONObject metadata = new JSONObject();
-        metadata.put(COLUMN_ID, 42L);
-        json.put(COLUMN_METADATA, metadata);
-        final JSONObject data = new JSONObject();
-        data.put(COLUMN_BOOLEAN, true);
-        data.put(COLUMN_STRING, "forty-two");
-        final JSONArray array = new JSONArray();
-        array.put(1).put(2).put(3);
-        data.put(COLUMN_ARRAY, array);
-        data.put(COLUMN_DOUBLE, 3.141592);
-        data.put(COLUMN_INTEGER, 42);
-        final JSONObject map = new JSONObject();
-        map.put("1", "one").put("2", "two").put("3", "three");
-        data.put(COLUMN_LONG, 12345678910L);
-        json.put(COLUMN_DATA, data);
-        
-        return json;
-    }
-}

Reply via email to