METAMODEL-1151: Introduced a reusable AbstractDataContextFactory class

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

Branch: refs/heads/master
Commit: 38676da4f8e0566fa2d66f896f0750ad71ad3c62
Parents: b38928b
Author: Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Authored: Sun Aug 6 19:25:06 2017 -0700
Committer: Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Committed: Sun Aug 6 19:25:06 2017 -0700

----------------------------------------------------------------------
 .../cassandra/CassandraDataContextFactory.java  | 10 ++--
 .../factory/AbstractDataContextFactory.java     | 56 ++++++++++++++++++++
 .../metamodel/csv/CsvDataContextFactory.java    | 31 +++--------
 .../excel/ExcelDataContextFactory.java          | 26 +++------
 .../FixedWidthDataContextFactory.java           | 33 ++++--------
 .../metamodel/jdbc/JdbcDataContextFactory.java  | 14 +++--
 .../metamodel/pojo/PojoDataContextFactory.java  | 10 ++--
 7 files changed, 95 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/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 482c912..f5cdd9b 100644
--- 
a/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
+++ 
b/cassandra/src/main/java/org/apache/metamodel/cassandra/CassandraDataContextFactory.java
@@ -22,7 +22,7 @@ import java.util.Map;
 
 import org.apache.metamodel.ConnectionException;
 import org.apache.metamodel.DataContext;
-import org.apache.metamodel.factory.DataContextFactory;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
 import org.apache.metamodel.factory.DataContextProperties;
 import org.apache.metamodel.factory.ResourceFactoryRegistry;
 import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException;
@@ -32,13 +32,11 @@ import com.datastax.driver.core.Cluster.Builder;
 import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 
-public class CassandraDataContextFactory implements DataContextFactory {
-
-    public static final String PROPERTY_TYPE = "cassandra";
+public class CassandraDataContextFactory extends AbstractDataContextFactory {
 
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "cassandra";
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/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
new file mode 100644
index 0000000..7ecca91
--- /dev/null
+++ 
b/core/src/main/java/org/apache/metamodel/factory/AbstractDataContextFactory.java
@@ -0,0 +1,56 @@
+/**
+ * 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.factory;
+
+import org.apache.metamodel.DataContext;
+
+/**
+ * Abstract implementation of {@link DataContextFactory} with utility methods 
for easier subclass implementation.
+ */
+public abstract class AbstractDataContextFactory implements DataContextFactory 
{
+
+    /**
+     * Gets the "type" value for the {@link DataContext}s that this factory 
produces. By convention these are lower-case
+     * terms such as "csv" or "jdbc", and separated by dash in case it 
requires multiple terms, e.g. "fixed-width".
+     * 
+     * @return
+     */
+    protected abstract String getType();
+
+    @Override
+    public final boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
+        return getType().equals(properties.getDataContextType());
+    }
+
+    protected String getString(String value, String ifNull) {
+        return value == null ? ifNull : value;
+    }
+
+    protected int getInt(Integer value, int ifNull) {
+        return value == null ? ifNull : value;
+    }
+
+    protected boolean getBoolean(Boolean value, boolean ifNull) {
+        return value == null ? ifNull : value;
+    }
+
+    protected char getChar(Character value, char ifNull) {
+        return value == null ? ifNull : value;
+    }
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/csv/src/main/java/org/apache/metamodel/csv/CsvDataContextFactory.java
----------------------------------------------------------------------
diff --git 
a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContextFactory.java 
b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContextFactory.java
index eeaad1b..8f1afb0 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContextFactory.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContextFactory.java
@@ -19,7 +19,7 @@
 package org.apache.metamodel.csv;
 
 import org.apache.metamodel.DataContext;
-import org.apache.metamodel.factory.DataContextFactory;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
 import org.apache.metamodel.factory.DataContextProperties;
 import org.apache.metamodel.factory.ResourceFactoryRegistry;
 import org.apache.metamodel.schema.naming.ColumnNamingStrategy;
@@ -28,13 +28,11 @@ import org.apache.metamodel.util.FileHelper;
 import org.apache.metamodel.util.Resource;
 import org.apache.metamodel.util.SimpleTableDef;
 
-public class CsvDataContextFactory implements DataContextFactory {
-
-    public static final String PROPERTY_TYPE = "csv";
+public class CsvDataContextFactory extends AbstractDataContextFactory {
 
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "csv";
     }
 
     @Override
@@ -43,8 +41,8 @@ public class CsvDataContextFactory implements 
DataContextFactory {
 
         final Resource resource = 
resourceFactoryRegistry.createResource(properties.getResourceProperties());
 
-        final int columnNameLineNumber = 
getInt(properties.getColumnNameLineNumber(),
-                CsvConfiguration.DEFAULT_COLUMN_NAME_LINE);
+        final int columnNameLineNumber =
+                getInt(properties.getColumnNameLineNumber(), 
CsvConfiguration.DEFAULT_COLUMN_NAME_LINE);
         final String encoding = getString(properties.getEncoding(), 
FileHelper.DEFAULT_ENCODING);
         final char separatorChar = getChar(properties.getSeparatorChar(), 
CsvConfiguration.DEFAULT_SEPARATOR_CHAR);
         final char quoteChar = getChar(properties.getQuoteChar(), 
CsvConfiguration.DEFAULT_QUOTE_CHAR);
@@ -65,21 +63,4 @@ public class CsvDataContextFactory implements 
DataContextFactory {
                 encoding, separatorChar, quoteChar, escapeChar, 
failOnInconsistentRowLength, multilineValuesEnabled);
         return new CsvDataContext(resource, configuration);
     }
-
-    private String getString(String value, String ifNull) {
-        return value == null ? ifNull : value;
-    }
-
-    private int getInt(Integer value, int ifNull) {
-        return value == null ? ifNull : value;
-    }
-
-    private boolean getBoolean(Boolean value, boolean ifNull) {
-        return value == null ? ifNull : value;
-    }
-
-    private char getChar(Character value, char ifNull) {
-        return value == null ? ifNull : value;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java
index 3002b8d..635be63 100644
--- 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java
+++ 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java
@@ -20,7 +20,7 @@ package org.apache.metamodel.excel;
 
 import org.apache.metamodel.ConnectionException;
 import org.apache.metamodel.DataContext;
-import org.apache.metamodel.factory.DataContextFactory;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
 import org.apache.metamodel.factory.DataContextProperties;
 import org.apache.metamodel.factory.ResourceFactoryRegistry;
 import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException;
@@ -29,13 +29,11 @@ import 
org.apache.metamodel.schema.naming.CustomColumnNamingStrategy;
 import org.apache.metamodel.util.Resource;
 import org.apache.metamodel.util.SimpleTableDef;
 
-public class ExcelDataContextFactory implements DataContextFactory {
-
-    public static final String PROPERTY_TYPE = "excel";
+public class ExcelDataContextFactory extends AbstractDataContextFactory {
 
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "excel";
     }
 
     @Override
@@ -44,8 +42,8 @@ public class ExcelDataContextFactory implements 
DataContextFactory {
 
         final Resource resource = 
resourceFactoryRegistry.createResource(properties.getResourceProperties());
 
-        final int columnNameLineNumber = 
getInt(properties.getColumnNameLineNumber(),
-                ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE);
+        final int columnNameLineNumber =
+                getInt(properties.getColumnNameLineNumber(), 
ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE);
         final Boolean skipEmptyLines = 
getBoolean(properties.isSkipEmptyLines(), true);
         final Boolean skipEmptyColumns = 
getBoolean(properties.isSkipEmptyColumns(), false);
 
@@ -58,16 +56,8 @@ public class ExcelDataContextFactory implements 
DataContextFactory {
             columnNamingStrategy = new CustomColumnNamingStrategy(columnNames);
         }
 
-        final ExcelConfiguration configuration = new 
ExcelConfiguration(columnNameLineNumber, columnNamingStrategy,
-                skipEmptyLines, skipEmptyColumns);
+        final ExcelConfiguration configuration =
+                new ExcelConfiguration(columnNameLineNumber, 
columnNamingStrategy, skipEmptyLines, skipEmptyColumns);
         return new ExcelDataContext(resource, configuration);
     }
-
-    private int getInt(Integer value, int ifNull) {
-        return value == null ? ifNull : value;
-    }
-
-    private boolean getBoolean(Boolean value, boolean ifNull) {
-        return value == null ? ifNull : value;
-    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContextFactory.java
----------------------------------------------------------------------
diff --git 
a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContextFactory.java
 
b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContextFactory.java
index 384bc2a..f20555c 100644
--- 
a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContextFactory.java
+++ 
b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContextFactory.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.metamodel.DataContext;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
 import org.apache.metamodel.factory.DataContextFactory;
 import org.apache.metamodel.factory.DataContextProperties;
 import org.apache.metamodel.factory.ResourceFactoryRegistry;
@@ -32,24 +33,20 @@ import org.apache.metamodel.util.Resource;
 /**
  * {@link DataContextFactory} for {@link FixedWidthDataContext}s.
  * 
- * In addition to supporting common properties to define resource path, 
encoding
- * etc., this implementation expects a custom property called "columns". This
- * property may take one of two forms:
+ * In addition to supporting common properties to define resource path, 
encoding etc., this implementation expects a
+ * custom property called "columns". This property may take one of two forms:
  * 
  * <ul>
- * <li>A string format where column name and widths in characters are
- * comma-separated. Example: "id,5,name,10,amount,7,account,5".</li>
- * <li>A key/value map where keys are column names (strings) and values are
- * column widths (numbers).</li>
+ * <li>A string format where column name and widths in characters are 
comma-separated. Example:
+ * "id,5,name,10,amount,7,account,5".</li>
+ * <li>A key/value map where keys are column names (strings) and values are 
column widths (numbers).</li>
  * </ul>
  */
-public class FixedWidthDataContextFactory implements DataContextFactory {
-
-    public static final String PROPERTY_TYPE = "fixed-width";
+public class FixedWidthDataContextFactory extends AbstractDataContextFactory {
 
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "fixed-width";
     }
 
     @SuppressWarnings("unchecked")
@@ -88,16 +85,8 @@ public class FixedWidthDataContextFactory implements 
DataContextFactory {
             }
         }
 
-        final FixedWidthConfiguration configuration = new 
FixedWidthConfiguration(encoding, columnSpecs,
-                failOnInconsistentRowLength);
+        final FixedWidthConfiguration configuration =
+                new FixedWidthConfiguration(encoding, columnSpecs, 
failOnInconsistentRowLength);
         return new FixedWidthDataContext(resource, configuration);
     }
-
-    private String getString(String value, String ifNull) {
-        return value == null ? ifNull : value;
-    }
-
-    private boolean getBoolean(Boolean value, boolean ifNull) {
-        return value == null ? ifNull : value;
-    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContextFactory.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContextFactory.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContextFactory.java
index 2dfe81d..6b00721 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContextFactory.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContextFactory.java
@@ -26,22 +26,20 @@ import javax.sql.DataSource;
 
 import org.apache.metamodel.ConnectionException;
 import org.apache.metamodel.DataContext;
-import org.apache.metamodel.factory.DataContextFactory;
+import org.apache.metamodel.factory.AbstractDataContextFactory;
 import org.apache.metamodel.factory.DataContextProperties;
 import org.apache.metamodel.factory.ResourceFactoryRegistry;
 import org.apache.metamodel.schema.TableType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class JdbcDataContextFactory implements DataContextFactory {
+public class JdbcDataContextFactory extends AbstractDataContextFactory {
 
     private static final Logger logger = 
LoggerFactory.getLogger(JdbcDataContextFactory.class);
 
-    public static final String PROPERTY_TYPE = "jdbc";
-
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "jdbc";
     }
 
     @Override
@@ -56,8 +54,8 @@ public class JdbcDataContextFactory implements 
DataContextFactory {
             }
         }
 
-        final TableType[] tableTypes = properties.getTableTypes() == null ? 
TableType.DEFAULT_TABLE_TYPES
-                : properties.getTableTypes();
+        final TableType[] tableTypes =
+                properties.getTableTypes() == null ? 
TableType.DEFAULT_TABLE_TYPES : properties.getTableTypes();
         final String catalogName = properties.getCatalogName();
 
         final DataSource dataSource = properties.getDataSource();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/38676da4/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
----------------------------------------------------------------------
diff --git 
a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java 
b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
index 35842bf..b985a5b 100644
--- a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
+++ b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContextFactory.java
@@ -23,19 +23,17 @@ import java.util.List;
 
 import org.apache.metamodel.ConnectionException;
 import org.apache.metamodel.DataContext;
-import org.apache.metamodel.factory.DataContextFactory;
+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.util.SimpleTableDef;
 
-public class PojoDataContextFactory implements DataContextFactory {
-
-    public static final String PROPERTY_TYPE = "pojo";
+public class PojoDataContextFactory extends AbstractDataContextFactory {
 
     @Override
-    public boolean accepts(DataContextProperties properties, 
ResourceFactoryRegistry resourceFactoryRegistry) {
-        return PROPERTY_TYPE.equals(properties.getDataContextType());
+    protected String getType() {
+        return "pojo";
     }
 
     @Override

Reply via email to