You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2017/08/12 17:26:58 UTC
[09/13] metamodel git commit: METAMODEL-1151: Added
DataContextFactory for HBase
METAMODEL-1151: Added DataContextFactory for HBase
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/4ab20a35
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/4ab20a35
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/4ab20a35
Branch: refs/heads/master
Commit: 4ab20a35e9c14ab456f8a1f2b14f2ff8a11dca1a
Parents: 23c4488
Author: Kasper Sørensen <i....@gmail.com>
Authored: Tue Aug 8 20:02:33 2017 -0700
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Tue Aug 8 20:02:33 2017 -0700
----------------------------------------------------------------------
.../cassandra/CassandraDataContextFactory.java | 3 +-
.../factory/AbstractDataContextFactory.java | 53 ++++++++++++--
.../couchdb/CouchDbDataContextFactory.java | 2 +-
....apache.metamodel.factory.DataContextFactory | 1 +
.../metamodel/hbase/HBaseConfiguration.java | 3 +-
.../hbase/HbaseDataContextFactory.java | 77 ++++++++++++++++++++
....apache.metamodel.factory.DataContextFactory | 1 +
7 files changed, 128 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
----------------------------------------------------------------------
diff --git a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
index f5cdd9b..ac74305 100644
--- a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
+++ b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
@@ -29,7 +29,6 @@ import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Cluster.Builder;
-import com.google.common.base.Objects;
import com.google.common.base.Strings;
public class CassandraDataContextFactory extends AbstractDataContextFactory {
@@ -65,7 +64,7 @@ public class CassandraDataContextFactory extends AbstractDataContextFactory {
final Cluster cluster = clusterBuilder.build();
- final String keySpace = Objects.firstNonNull((String) map.get("keyspace"), properties.getDatabaseName());
+ final String keySpace = getString(map.get("keyspace"), properties.getDatabaseName());
return new CassandraDataContext(cluster, keySpace, properties.getTableDefs());
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java b/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java
index 7ecca91..f338d3e 100644
--- a/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java
+++ b/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java
@@ -18,7 +18,12 @@
*/
package org.apache.metamodel.factory;
+import java.util.Collection;
+import java.util.Map;
+
import org.apache.metamodel.DataContext;
+import org.apache.metamodel.util.BooleanComparator;
+import org.apache.metamodel.util.NumberComparator;
/**
* Abstract implementation of {@link DataContextFactory} with utility methods for easier subclass implementation.
@@ -38,19 +43,51 @@ public abstract class AbstractDataContextFactory implements DataContextFactory {
return getType().equals(properties.getDataContextType());
}
- protected String getString(String value, String ifNull) {
- return value == null ? ifNull : value;
+ protected String getString(Object value, String ifNull) {
+ if (isNullOrEmpty(value)) {
+ return ifNull;
+ }
+ return value.toString();
+ }
+
+ protected int getInt(Object value, int ifNull) {
+ if (isNullOrEmpty(value)) {
+ return ifNull;
+ }
+ return NumberComparator.toNumber(value).intValue();
}
- protected int getInt(Integer value, int ifNull) {
- return value == null ? ifNull : value;
+ protected boolean getBoolean(Object value, boolean ifNull) {
+ if (isNullOrEmpty(value)) {
+ return ifNull;
+ }
+ return BooleanComparator.toBoolean(value).booleanValue();
}
- protected boolean getBoolean(Boolean value, boolean ifNull) {
- return value == null ? ifNull : value;
+ protected char getChar(Object value, char ifNull) {
+ if (isNullOrEmpty(value)) {
+ return ifNull;
+ }
+ if (value instanceof Character) {
+ return ((Character) value).charValue();
+ }
+ return value.toString().charAt(0);
}
- protected char getChar(Character value, char ifNull) {
- return value == null ? ifNull : value;
+ private static boolean isNullOrEmpty(Object value) {
+ if (value == null) {
+ return false;
+ }
+ if (value instanceof String && ((String) value).isEmpty()) {
+ return false;
+ }
+ if (value instanceof Collection && ((Collection<?>) value).isEmpty()) {
+ return false;
+ }
+ if (value instanceof Map && ((Map<?, ?>) value).isEmpty()) {
+ return false;
+ }
+ return true;
}
+
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContextFactory.java
----------------------------------------------------------------------
diff --git a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContextFactory.java b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContextFactory.java
index edb93d8..81c6bc0 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContextFactory.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContextFactory.java
@@ -53,7 +53,7 @@ public class CouchDbDataContextFactory extends AbstractDataContextFactory {
} else {
httpClientBuilder.host(properties.getHostname());
httpClientBuilder.port(getInt(properties.getPort(), CouchDbDataContext.DEFAULT_PORT));
- httpClientBuilder.enableSSL(getBoolean((Boolean) properties.toMap().get("ssl"), false));
+ httpClientBuilder.enableSSL(getBoolean(properties.toMap().get("ssl"), false));
}
httpClientBuilder.username(properties.getUsername());
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/couchdb/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
----------------------------------------------------------------------
diff --git a/couchdb/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory b/couchdb/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
new file mode 100644
index 0000000..cfc189f
--- /dev/null
+++ b/couchdb/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
@@ -0,0 +1 @@
+org.apache.metamodel.csv.CouchDbDataContextFactory
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/hbase/src/main/java/org/apache/metamodel/hbase/HBaseConfiguration.java
----------------------------------------------------------------------
diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseConfiguration.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseConfiguration.java
index f2ec2ec..c9fc45e 100644
--- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseConfiguration.java
+++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseConfiguration.java
@@ -32,6 +32,7 @@ public class HBaseConfiguration extends BaseObject implements Serializable {
private static final long serialVersionUID = 1L;
+ public static final ColumnType DEFAULT_ROW_KEY_TYPE = ColumnType.BINARY;
public static final String DEFAULT_SCHEMA_NAME = "HBase";
public static final String DEFAULT_ZOOKEEPER_HOSTNAME = "127.0.0.1";
public static final int DEFAULT_ZOOKEEPER_PORT = 2181;
@@ -56,7 +57,7 @@ public class HBaseConfiguration extends BaseObject implements Serializable {
}
public HBaseConfiguration(String zookeeperHostname, int zookeeperPort) {
- this(DEFAULT_SCHEMA_NAME, zookeeperHostname, zookeeperPort, null, ColumnType.BINARY);
+ this(DEFAULT_SCHEMA_NAME, zookeeperHostname, zookeeperPort, null, DEFAULT_ROW_KEY_TYPE);
}
public HBaseConfiguration(String zookeeperHostname, int zookeeperPort, ColumnType defaultRowKeyType) {
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/hbase/src/main/java/org/apache/metamodel/hbase/HbaseDataContextFactory.java
----------------------------------------------------------------------
diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HbaseDataContextFactory.java b/hbase/src/main/java/org/apache/metamodel/hbase/HbaseDataContextFactory.java
new file mode 100644
index 0000000..f3c2d8a
--- /dev/null
+++ b/hbase/src/main/java/org/apache/metamodel/hbase/HbaseDataContextFactory.java
@@ -0,0 +1,77 @@
+/**
+ * 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.hbase;
+
+import java.util.Map;
+
+import org.apache.metamodel.ConnectionException;
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
+import org.apache.metamodel.factory.DataContextProperties;
+import org.apache.metamodel.factory.ResourceFactoryRegistry;
+import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException;
+import org.apache.metamodel.schema.ColumnType;
+import org.apache.metamodel.schema.ColumnTypeImpl;
+import org.apache.metamodel.util.SimpleTableDef;
+
+public class HbaseDataContextFactory extends AbstractDataContextFactory {
+
+ @Override
+ protected String getType() {
+ return "hbase";
+ }
+
+ @Override
+ public DataContext create(DataContextProperties properties, ResourceFactoryRegistry resourceFactoryRegistry)
+ throws UnsupportedDataContextPropertiesException, ConnectionException {
+ final Map<String, Object> map = properties.toMap();
+
+ final String schemaName = getString(map.get("schema"),
+ getString(properties.getDatabaseName(), HBaseConfiguration.DEFAULT_SCHEMA_NAME));
+ final String zookeeperHostname =
+ getString(map.get("zookeeper-hostname"), HBaseConfiguration.DEFAULT_ZOOKEEPER_HOSTNAME);
+ final int zookeeperPort = getInt(map.get("zookeeper-port"), HBaseConfiguration.DEFAULT_ZOOKEEPER_PORT);
+ final SimpleTableDef[] tableDefinitions = properties.getTableDefs();
+
+ final ColumnType defaultRowKeyType;
+ final Object configuredDefaultRowKeyType = map.get("default-row-key-type");
+ if (configuredDefaultRowKeyType == null) {
+ defaultRowKeyType = HBaseConfiguration.DEFAULT_ROW_KEY_TYPE;
+ } else if (configuredDefaultRowKeyType instanceof ColumnType) {
+ defaultRowKeyType = (ColumnType) configuredDefaultRowKeyType;
+ } else if (configuredDefaultRowKeyType instanceof String && !((String) configuredDefaultRowKeyType).isEmpty()) {
+ defaultRowKeyType = ColumnTypeImpl.valueOf((String) configuredDefaultRowKeyType);
+ } else {
+ defaultRowKeyType = HBaseConfiguration.DEFAULT_ROW_KEY_TYPE;
+ }
+
+ final int hbaseClientRetries =
+ getInt(map.get("hbase-client-retries"), HBaseConfiguration.DEFAULT_HBASE_CLIENT_RETRIES);
+ final int zookeeperSessionTimeout =
+ getInt(map.get("zookeeper-session-timeout"), HBaseConfiguration.DEFAULT_ZOOKEEPER_SESSION_TIMEOUT);
+ final int zookeeperRecoveryRetries =
+ getInt(map.get("zookeeper-recovery-retries"), HBaseConfiguration.DEFAULT_ZOOKEEPER_RECOVERY_RETRIES);
+
+ final HBaseConfiguration configuration =
+ new HBaseConfiguration(schemaName, zookeeperHostname, zookeeperPort, tableDefinitions,
+ defaultRowKeyType, hbaseClientRetries, zookeeperSessionTimeout, zookeeperRecoveryRetries);
+ return new HBaseDataContext(configuration);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/4ab20a35/hbase/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
----------------------------------------------------------------------
diff --git a/hbase/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory b/hbase/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
new file mode 100644
index 0000000..abf20fd
--- /dev/null
+++ b/hbase/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory
@@ -0,0 +1 @@
+org.apache.metamodel.csv.HbaseDataContextFactory
\ No newline at end of file