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