METAMODEL-1151: Added DataContextFactory for Excel Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/b4814d1c Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/b4814d1c Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/b4814d1c
Branch: refs/heads/master Commit: b4814d1c17a24e8d24d11cb5b91a04fc6e2ec0d4 Parents: f64a372 Author: Kasper Sørensen <i.am.kasper.soren...@gmail.com> Authored: Sat Aug 5 22:52:32 2017 -0700 Committer: Kasper Sørensen <i.am.kasper.soren...@gmail.com> Committed: Sat Aug 5 22:52:32 2017 -0700 ---------------------------------------------------------------------- .../excel/ExcelDataContextFactory.java | 73 ++++++++++++++++++++ ....apache.metamodel.factory.DataContextFactory | 1 + 2 files changed, 74 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/b4814d1c/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 new file mode 100644 index 0000000..3002b8d --- /dev/null +++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContextFactory.java @@ -0,0 +1,73 @@ +/** + * 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.excel; + +import org.apache.metamodel.ConnectionException; +import org.apache.metamodel.DataContext; +import org.apache.metamodel.factory.DataContextFactory; +import org.apache.metamodel.factory.DataContextProperties; +import org.apache.metamodel.factory.ResourceFactoryRegistry; +import org.apache.metamodel.factory.UnsupportedDataContextPropertiesException; +import org.apache.metamodel.schema.naming.ColumnNamingStrategy; +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"; + + @Override + public boolean accepts(DataContextProperties properties, ResourceFactoryRegistry resourceFactoryRegistry) { + return PROPERTY_TYPE.equals(properties.getDataContextType()); + } + + @Override + public DataContext create(DataContextProperties properties, ResourceFactoryRegistry resourceFactoryRegistry) + throws UnsupportedDataContextPropertiesException, ConnectionException { + + final Resource resource = resourceFactoryRegistry.createResource(properties.getResourceProperties()); + + 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); + + final ColumnNamingStrategy columnNamingStrategy; + if (properties.getTableDefs() == null) { + columnNamingStrategy = null; + } else { + final SimpleTableDef firstTable = properties.getTableDefs()[0]; + final String[] columnNames = firstTable.getColumnNames(); + columnNamingStrategy = new CustomColumnNamingStrategy(columnNames); + } + + 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/b4814d1c/excel/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory ---------------------------------------------------------------------- diff --git a/excel/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory b/excel/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory new file mode 100644 index 0000000..07d7cfa --- /dev/null +++ b/excel/src/main/resources/META-INF/services/org.apache.metamodel.factory.DataContextFactory @@ -0,0 +1 @@ +org.apache.metamodel.excel.ExcelDataContextFactory \ No newline at end of file