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