Refactoring. Column type MAP was removed and ARRAY was replaced by LIST.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f1457a15 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f1457a15 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f1457a15 Branch: refs/heads/master Commit: f1457a15c3f1c32ff9a382ba81ec3ddafd76f326 Parents: e0a821c Author: jakub <[email protected]> Authored: Fri May 25 08:01:21 2018 +0200 Committer: jakub <[email protected]> Committed: Fri May 25 08:01:21 2018 +0200 ---------------------------------------------------------------------- .../metamodel/neo4j/Neo4jDataContext.java | 5 +- .../neo4j/utils/ColumnTypeResolver.java | 58 ++++++++++---------- .../neo4j/utils/ColumnTypeResolverTest.java | 13 ++--- 3 files changed, 36 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/f1457a15/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 524d29c..662807d 100644 --- a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java +++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java @@ -198,9 +198,8 @@ public class Neo4jDataContext extends QueryPostprocessDataContext implements Dat return null; // Do not add a table if label has no nodes (empty tables are considered non-existent) } else { final String[] columnNames = propertiesPerLabel.toArray(new String[propertiesPerLabel.size()]); - final ColumnTypeResolver columnTypeResolver = new ColumnTypeResolver(); - return new SimpleTableDef(label, columnNames, - columnTypeResolver.getColumnTypes(nodesPerLabel.get(0), columnNames)); + final ColumnTypeResolver columnTypeResolver = new ColumnTypeResolver(nodesPerLabel.get(0), columnNames); + return new SimpleTableDef(label, columnNames, columnTypeResolver.getColumnTypes()); } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/f1457a15/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 index f5a817b..aac8249 100644 --- a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java +++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java @@ -32,64 +32,66 @@ import org.slf4j.LoggerFactory; public class ColumnTypeResolver { private static final Logger logger = LoggerFactory.getLogger(ColumnTypeResolver.class); - - public ColumnType[] getColumnTypes(final JSONObject jsonObject, final String[] columnNamesArray) { - final List<String> columnNames = new ArrayList<>(Arrays.asList(columnNamesArray)); - final List<ColumnType> columnTypes = new ArrayList<>(); + 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(jsonObject, columnNames, columnTypes); - fillColumnTypesFromData(jsonObject, columnNames, columnTypes); + fillColumnTypesFromMetadata(); + fillColumnTypesFromData(); } catch (final JSONException e) { // ignore missing data } - fillColumnTypesFromRemainingColumns(columnNames, columnTypes); - return columnTypes.toArray(new ColumnType[columnTypes.size()]); + fillColumnTypesFromRemainingColumns(); + return _columnTypes.toArray(new ColumnType[_columnTypes.size()]); } - private void fillColumnTypesFromData(final JSONObject jsonObject, final List<String> columnNames, - final List<ColumnType> columnTypes) throws JSONException { + private void fillColumnTypesFromData() throws JSONException { final String dataKey = "data"; - if (jsonObject.has(dataKey)) { - final JSONObject data = jsonObject.getJSONObject(dataKey); + 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); + _columnTypes.add(type); + removeIfAvailable(_columnNames, key); } } } - private void fillColumnTypesFromMetadata(final JSONObject jsonObject, final List<String> columnNames, - final List<ColumnType> columnTypes) throws JSONException { + private void fillColumnTypesFromMetadata() throws JSONException { final String metadataKey = "metadata"; - if (jsonObject.has(metadataKey)) { - final JSONObject metadata = jsonObject.getJSONObject(metadataKey); + if (_jsonObject.has(metadataKey)) { + final JSONObject metadata = _jsonObject.getJSONObject(metadataKey); if (metadata.has("id")) { - columnTypes.add(ColumnType.BIGINT); - removeIfAvailable(columnNames, "_id"); + _columnTypes.add(ColumnType.BIGINT); + removeIfAvailable(_columnNames, "_id"); } } } - private void fillColumnTypesFromRemainingColumns(final List<String> columnNames, - final List<ColumnType> columnTypes) { - for (final String remainingColumnName : columnNames) { + private void fillColumnTypesFromRemainingColumns() { + for (final String remainingColumnName : _columnNames) { if (remainingColumnName.contains("rel_")) { if (remainingColumnName.contains("#")) { - columnTypes.add(ColumnType.ARRAY); + _columnTypes.add(ColumnType.LIST); } else { - columnTypes.add(ColumnType.BIGINT); + _columnTypes.add(ColumnType.BIGINT); } } else { - columnTypes.add(ColumnType.STRING); + _columnTypes.add(ColumnType.STRING); } } } @@ -113,9 +115,7 @@ public class ColumnTypeResolver { } else if (keyClass.equals(Double.class)) { return ColumnType.DOUBLE; } else if (keyClass.equals(JSONArray.class)) { - return ColumnType.ARRAY; - } else if (keyClass.equals(JSONObject.class)) { - return ColumnType.MAP; + return ColumnType.LIST; } } catch (final JSONException e) { logger.error("JSON object does not contain required key '{}'. {}", key, e.getMessage()); http://git-wip-us.apache.org/repos/asf/metamodel/blob/f1457a15/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 index 8e56b66..3dce4b2 100644 --- a/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java +++ b/neo4j/src/test/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolverTest.java @@ -36,26 +36,24 @@ public class ColumnTypeResolverTest { 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_MAP = "map"; private static final String COLUMN_STRING = "string"; @Test public void testGetColumnTypes() throws Exception { - final ColumnTypeResolver resolver = new ColumnTypeResolver(); final JSONObject jsonObject = createJSONObject(); final String[] columnNames = new String[] { COLUMN_ID_NEO4J, COLUMN_BOOLEAN, COLUMN_INTEGER, COLUMN_LONG, COLUMN_DOUBLE, - COLUMN_ARRAY, COLUMN_MAP, COLUMN_STRING }; - final ColumnType[] columnTypes = resolver.getColumnTypes(jsonObject, columnNames); + 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.ARRAY); + assertEquals(columnTypes[3], ColumnType.LIST); assertEquals(columnTypes[4], ColumnType.DOUBLE); assertEquals(columnTypes[5], ColumnType.INTEGER); - assertEquals(columnTypes[6], ColumnType.MAP); - assertEquals(columnTypes[7], ColumnType.BIGINT); + assertEquals(columnTypes[6], ColumnType.BIGINT); } private JSONObject createJSONObject() throws JSONException { @@ -73,7 +71,6 @@ public class ColumnTypeResolverTest { data.put(COLUMN_INTEGER, 42); final JSONObject map = new JSONObject(); map.put("1", "one").put("2", "two").put("3", "three"); - data.put(COLUMN_MAP, map); data.put(COLUMN_LONG, 12345678910L); json.put(COLUMN_DATA, data);
