You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ar...@apache.org on 2018/05/30 08:15:29 UTC
[2/7] metamodel git commit: Refactoring.
Refactoring.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/b60601e7
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/b60601e7
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/b60601e7
Branch: refs/heads/master
Commit: b60601e76e0218ae314f1dbf3e50c6a27a0877cf
Parents: fdaaed0
Author: jakub <j....@quadient.com>
Authored: Tue May 22 12:22:26 2018 +0200
Committer: jakub <j....@quadient.com>
Committed: Tue May 22 12:22:26 2018 +0200
----------------------------------------------------------------------
.../metamodel/neo4j/Neo4jDataContext.java | 110 +----------------
.../neo4j/utils/AbstractColumnTypeHandler.java | 33 ++++++
.../neo4j/utils/ArrayColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/BooleanColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/ColumnTypeHandler.java | 38 ++++++
.../neo4j/utils/ColumnTypeResolver.java | 117 +++++++++++++++++++
.../neo4j/utils/DoubleColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/IntegerColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/LongColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/MapColumnTypeHandler.java | 39 +++++++
.../neo4j/utils/StringColumnTypeHandler.java | 39 +++++++
11 files changed, 465 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/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 70686ef..83f01e7 100644
--- a/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
@@ -19,8 +19,6 @@
package org.apache.metamodel.neo4j;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -35,10 +33,10 @@ 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;
-import org.apache.metamodel.schema.ColumnType;
import org.apache.metamodel.schema.MutableSchema;
import org.apache.metamodel.schema.MutableTable;
import org.apache.metamodel.schema.Schema;
@@ -194,9 +192,9 @@ public class Neo4jDataContext extends QueryPostprocessDataContext implements Dat
// Do not add a table if label has no nodes (empty tables are considered non-existent)
if (!nodesPerLabel.isEmpty()) {
final String[] columnNames = propertiesPerLabel.toArray(new String[propertiesPerLabel.size()]);
- final ColumnType[] columnTypes = guessColumnTypesFromValues(nodesPerLabel.get(0),
- new ArrayList<>(Arrays.asList(columnNames)));
- final SimpleTableDef tableDef = new SimpleTableDef(label, columnNames, columnTypes);
+ final ColumnTypeResolver columnTypeResolver = new ColumnTypeResolver();
+ final SimpleTableDef tableDef = new SimpleTableDef(label, columnNames,
+ columnTypeResolver.getColumnTypes(nodesPerLabel.get(0), columnNames));
tableDefs.add(tableDef);
}
}
@@ -236,106 +234,6 @@ public class Neo4jDataContext extends QueryPostprocessDataContext implements Dat
return propertiesPerLabel;
}
- private ColumnType[] guessColumnTypesFromValues(final JSONObject jsonObject, final List<String> columnNames) {
- final List<ColumnType> columnTypes = new ArrayList<>();
-
- try {
- fillColumnTypesFromMetadata(jsonObject, columnNames, columnTypes);
- fillColumnTypesFromData(jsonObject, columnNames, columnTypes);
- } catch (final JSONException e) {
- // ignore missing data
- }
-
- fillColumnTypesFromRemainingColumns(columnNames, columnTypes);
- return columnTypes.toArray(new ColumnType[columnTypes.size()]);
- }
-
- private void fillColumnTypesFromData(final JSONObject jsonObject, final List<String> columnNames,
- final List<ColumnType> columnTypes) 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(final JSONObject jsonObject, final List<String> columnNames,
- final List<ColumnType> columnTypes) 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(final List<String> columnNames,
- final List<ColumnType> columnTypes) {
- for (final String remainingColumnName : columnNames) {
- if (remainingColumnName.contains("rel_")) {
- if (remainingColumnName.contains("#")) {
- columnTypes.add(ColumnType.ARRAY);
- } 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 {
- data.getBoolean(key);
- return ColumnType.BOOLEAN;
- } catch (final JSONException e1) {
- try {
- data.getInt(key);
- return ColumnType.INTEGER;
- } catch (final JSONException e2) {
- try {
- data.getLong(key);
- return ColumnType.BIGINT;
- } catch (final JSONException e3) {
- try {
- data.getDouble(key);
- return ColumnType.DOUBLE;
- } catch (final JSONException e4) {
- try {
- data.getJSONArray(key);
- return ColumnType.ARRAY;
- } catch (final JSONException e5) {
- try {
- data.getJSONObject(key);
- return ColumnType.MAP;
- } catch (final JSONException e6) {
- return ColumnType.STRING;
- }
- }
- }
- }
- }
- }
- }
-
private List<String> getAllPropertiesPerRelationship(JSONObject relationship) {
List<String> propertyNames = new ArrayList<String>();
try {
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/AbstractColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/AbstractColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/AbstractColumnTypeHandler.java
new file mode 100644
index 0000000..1198fe0
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/AbstractColumnTypeHandler.java
@@ -0,0 +1,33 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONObject;
+
+public abstract class AbstractColumnTypeHandler implements ColumnTypeHandler {
+ protected ColumnTypeHandler _successor;
+
+ @Override
+ public void setSuccessor(final ColumnTypeHandler successor) {
+ _successor = successor;
+ }
+
+ public abstract ColumnType getTypeFromValue(final JSONObject data, final String key);
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ArrayColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ArrayColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ArrayColumnTypeHandler.java
new file mode 100644
index 0000000..3d491f4
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ArrayColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class ArrayColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getJSONArray(key);
+ return ColumnType.ARRAY;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/BooleanColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/BooleanColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/BooleanColumnTypeHandler.java
new file mode 100644
index 0000000..5aa4194
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/BooleanColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class BooleanColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getBoolean(key);
+ return ColumnType.BOOLEAN;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeHandler.java
new file mode 100644
index 0000000..f673f4d
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeHandler.java
@@ -0,0 +1,38 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONObject;
+
+public interface ColumnTypeHandler {
+ /**
+ * Sets the following node in the chain.
+ * @param successor
+ */
+ void setSuccessor(final ColumnTypeHandler successor);
+
+ /**
+ * Returns a column type based on the given value.
+ * @param data
+ * @param key
+ * @return ColumnType
+ */
+ ColumnType getTypeFromValue(final JSONObject data, final String key);
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/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
new file mode 100644
index 0000000..75677a2
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/ColumnTypeResolver.java
@@ -0,0 +1,117 @@
+/**
+ * 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.JSONException;
+import org.json.JSONObject;
+
+public class ColumnTypeResolver {
+ public ColumnType[] getColumnTypes(final JSONObject jsonObject, final String[] columnNamesArray) {
+ final List<String> columnNames = new ArrayList<>(Arrays.asList(columnNamesArray));
+ final List<ColumnType> columnTypes = new ArrayList<>();
+
+ try {
+ fillColumnTypesFromMetadata(jsonObject, columnNames, columnTypes);
+ fillColumnTypesFromData(jsonObject, columnNames, columnTypes);
+ } catch (final JSONException e) {
+ // ignore missing data
+ }
+
+ fillColumnTypesFromRemainingColumns(columnNames, columnTypes);
+ return columnTypes.toArray(new ColumnType[columnTypes.size()]);
+ }
+
+ private void fillColumnTypesFromData(final JSONObject jsonObject, final List<String> columnNames,
+ final List<ColumnType> columnTypes) 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(final JSONObject jsonObject, final List<String> columnNames,
+ final List<ColumnType> columnTypes) 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(final List<String> columnNames,
+ final List<ColumnType> columnTypes) {
+ for (final String remainingColumnName : columnNames) {
+ if (remainingColumnName.contains("rel_")) {
+ if (remainingColumnName.contains("#")) {
+ columnTypes.add(ColumnType.ARRAY);
+ } 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) {
+ final BooleanColumnTypeHandler booleanHandler = new BooleanColumnTypeHandler();
+ final IntegerColumnTypeHandler integerHandler = new IntegerColumnTypeHandler();
+ final LongColumnTypeHandler longHandler = new LongColumnTypeHandler();
+ final DoubleColumnTypeHandler doubleHandler = new DoubleColumnTypeHandler();
+ final ArrayColumnTypeHandler arrayHandler = new ArrayColumnTypeHandler();
+ final MapColumnTypeHandler mapHandler = new MapColumnTypeHandler();
+ final StringColumnTypeHandler stringHandler = new StringColumnTypeHandler();
+
+ // chain of responsibility
+ booleanHandler.setSuccessor(integerHandler);
+ integerHandler.setSuccessor(longHandler);
+ longHandler.setSuccessor(doubleHandler);
+ doubleHandler.setSuccessor(arrayHandler);
+ arrayHandler.setSuccessor(mapHandler);
+ mapHandler.setSuccessor(stringHandler);
+
+ return booleanHandler.getTypeFromValue(data, key);
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/DoubleColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/DoubleColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/DoubleColumnTypeHandler.java
new file mode 100644
index 0000000..35e9ef8
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/DoubleColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class DoubleColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getDouble(key);
+ return ColumnType.DOUBLE;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/IntegerColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/IntegerColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/IntegerColumnTypeHandler.java
new file mode 100644
index 0000000..9a48742
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/IntegerColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class IntegerColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getInt(key);
+ return ColumnType.INTEGER;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/LongColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/LongColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/LongColumnTypeHandler.java
new file mode 100644
index 0000000..939e355
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/LongColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class LongColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getLong(key);
+ return ColumnType.BIGINT;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/MapColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/MapColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/MapColumnTypeHandler.java
new file mode 100644
index 0000000..8151490
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/MapColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class MapColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getJSONObject(key);
+ return ColumnType.MAP;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/b60601e7/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/StringColumnTypeHandler.java
----------------------------------------------------------------------
diff --git a/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/StringColumnTypeHandler.java b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/StringColumnTypeHandler.java
new file mode 100644
index 0000000..06afe36
--- /dev/null
+++ b/neo4j/src/main/java/org/apache/metamodel/neo4j/utils/StringColumnTypeHandler.java
@@ -0,0 +1,39 @@
+/**
+ * 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 org.apache.metamodel.schema.ColumnType;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class StringColumnTypeHandler extends AbstractColumnTypeHandler {
+ @Override
+ public ColumnType getTypeFromValue(final JSONObject data, final String key) {
+ try {
+ data.getString(key);
+ return ColumnType.STRING;
+ } catch (final JSONException e) {
+ if (_successor != null) {
+ return _successor.getTypeFromValue(data, key);
+ } else {
+ return ColumnType.STRING;
+ }
+ }
+ }
+}