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 2014/01/19 20:10:56 UTC
[1/8] git commit: Added module folder and POM
Updated Branches:
refs/heads/master fccac56f9 -> d05da0c37
Added module folder and POM
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/f8a4e8fa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/f8a4e8fa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/f8a4e8fa
Branch: refs/heads/master
Commit: f8a4e8faacb2537e1e0b50d2c8f80b96483af513
Parents: 4841d1b
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun Jan 5 18:45:18 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun Jan 5 18:45:18 2014 +0100
----------------------------------------------------------------------
pom.xml | 1 +
spring/pom.xml | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f8a4e8fa/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 3bbc418..40b871c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,6 +69,7 @@ under the License.
<module>salesforce</module>
<module>sugarcrm</module>
<module>full</module>
+ <module>spring</module>
</modules>
<issueManagement>
<system>Jira</system>
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f8a4e8fa/spring/pom.xml
----------------------------------------------------------------------
diff --git a/spring/pom.xml b/spring/pom.xml
new file mode 100644
index 0000000..6c8c355
--- /dev/null
+++ b/spring/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>MetaModel</artifactId>
+ <groupId>org.apache.metamodel</groupId>
+ <version>4.0.1-incubating-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>MetaModel-spring</artifactId>
+ <name>MetaModel module for Spring enabled configuration</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.metamodel</groupId>
+ <artifactId>MetaModel-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.metamodel</groupId>
+ <artifactId>MetaModel-full</artifactId>
+ <version>${project.version}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <!-- test -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
[7/8] git commit: Improvement to javadoc
Posted by ka...@apache.org.
Improvement to javadoc
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/f8f57360
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/f8f57360
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/f8f57360
Branch: refs/heads/master
Commit: f8f57360b517eabf5a43a6642cdda9dbc71e5c80
Parents: 9eb49ab
Author: Kasper Sørensen <i....@gmail.com>
Authored: Wed Jan 15 10:23:43 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Wed Jan 15 10:23:43 2014 +0100
----------------------------------------------------------------------
.../org/apache/metamodel/spring/DataContextFactoryBean.java | 7 ++++++-
.../metamodel/spring/DataContextFactoryBeanDelegate.java | 5 ++++-
2 files changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f8f57360/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
index 9d35d57..9461891 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
@@ -76,7 +76,12 @@ public class DataContextFactoryBean implements FactoryBean<DataContext> {
throw new UnsupportedOperationException("Unsupported DataContext type: " + _type);
}
- return delegate.createDataContext(this);
+ final DataContext dataContext = delegate.createDataContext(this);
+ if (dataContext == null) {
+ throw new IllegalStateException("Factory method failed to produce a non-null DataContext instance");
+ }
+
+ return dataContext;
}
private DataContextFactoryBeanDelegate createDelegateFromType() {
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f8f57360/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
index dd98066..625870f 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
@@ -37,7 +37,10 @@ public interface DataContextFactoryBeanDelegate {
* Creates the particular {@link DataContext} object.
*
* @param bean
- * @return
+ * the {@link DataContextFactoryBean} with properties set as per
+ * the spring configuration.
+ * @return a non-null {@link DataContext} object, built with the properties
+ * set on the {@link DataContextFactoryBean}
*/
public DataContext createDataContext(DataContextFactoryBean bean);
}
[5/8] git commit: Made the DataContextFactoryBean extensible by
making it possible to specify delegate classes as the "type" parameter. This
also avoids runtime dependencies on unwanted MetaModel modules,
since the factory class no longer directly import
Posted by ka...@apache.org.
Made the DataContextFactoryBean extensible by making it possible to
specify delegate classes as the "type" parameter. This also avoids
runtime dependencies on unwanted MetaModel modules, since the factory
class no longer directly imports foreign module code.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/3aff7ff4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/3aff7ff4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/3aff7ff4
Branch: refs/heads/master
Commit: 3aff7ff42976ec07210eedebfe047c47c4e5dc4a
Parents: 5ce666f
Author: Kasper Sørensen <i....@gmail.com>
Authored: Wed Jan 8 10:01:43 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Wed Jan 8 10:01:43 2014 +0100
----------------------------------------------------------------------
.../AbstractDataContextFactoryBeanDelegate.java | 95 +++++++++++
.../CsvDataContextFactoryBeanDelegate.java | 46 +++++
.../spring/DataContextFactoryBean.java | 166 +++++--------------
.../spring/DataContextFactoryBeanDelegate.java | 43 +++++
.../ExcelDataContextFactoryBeanDelegate.java | 42 +++++
.../JdbcDataContextFactoryBeanDelegate.java | 73 ++++++++
.../MockDataContextFactoryBeanDelegate.java | 40 +++++
.../spring/MockDataContextTypeTest.java | 26 +++
.../examples/mock-datacontext-type.xml | 11 ++
9 files changed, 415 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/AbstractDataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/AbstractDataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/AbstractDataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..3e05824
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/AbstractDataContextFactoryBeanDelegate.java
@@ -0,0 +1,95 @@
+/**
+ * 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.spring;
+
+import org.apache.metamodel.csv.CsvConfiguration;
+import org.apache.metamodel.util.BooleanComparator;
+import org.apache.metamodel.util.FileResource;
+import org.apache.metamodel.util.Resource;
+import org.apache.metamodel.util.UrlResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Useful common superclass of {@link DataContextFactoryBeanDelegate}
+ * implementations.
+ */
+public abstract class AbstractDataContextFactoryBeanDelegate implements DataContextFactoryBeanDelegate {
+
+ protected final Logger logger = LoggerFactory.getLogger(getClass());
+
+ protected Resource getResource(DataContextFactoryBean bean) {
+ final org.springframework.core.io.Resource resource = bean.getResource();
+ if (resource != null) {
+ return new SpringResource(resource);
+ } else if (bean.getFilename() != null) {
+ return new FileResource(bean.getFilename());
+ } else if (bean.getUrl() != null) {
+ return new UrlResource(bean.getUrl());
+ }
+ return null;
+ }
+
+ protected int getInt(String value, int ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return Integer.parseInt(value);
+ }
+
+ protected String getString(String value, String ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return value;
+ }
+
+ protected char getChar(String value, char ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ if ("none".equalsIgnoreCase(value)) {
+ return CsvConfiguration.NOT_A_CHAR;
+ }
+ return value.charAt(0);
+ }
+
+ protected boolean getBoolean(String value, boolean ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return BooleanComparator.parseBoolean(value);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/CsvDataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/CsvDataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/CsvDataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..baab6d7
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/CsvDataContextFactoryBeanDelegate.java
@@ -0,0 +1,46 @@
+/**
+ * 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.spring;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.csv.CsvConfiguration;
+import org.apache.metamodel.csv.CsvDataContext;
+import org.apache.metamodel.util.FileHelper;
+import org.apache.metamodel.util.Resource;
+
+/**
+ * {@link DataContextFactoryBeanDelegate} for {@link CsvDataContext}.
+ */
+public class CsvDataContextFactoryBeanDelegate extends AbstractDataContextFactoryBeanDelegate {
+
+ @Override
+ public DataContext createDataContext(DataContextFactoryBean bean) {
+ final Resource resource = getResource(bean);
+ final int columnNameLineNumber = getInt(bean.getColumnNameLineNumber(), CsvConfiguration.DEFAULT_COLUMN_NAME_LINE);
+ final String encoding = getString(bean.getEncoding(), FileHelper.DEFAULT_ENCODING);
+ final char separatorChar = getChar(bean.getSeparatorChar(), CsvConfiguration.DEFAULT_SEPARATOR_CHAR);
+ final char quoteChar = getChar(bean.getQuoteChar(), CsvConfiguration.DEFAULT_QUOTE_CHAR);
+ final char escapeChar = getChar(bean.getEscapeChar(), CsvConfiguration.DEFAULT_ESCAPE_CHAR);
+ final boolean failOnInconsistentRowLength = getBoolean(bean.getFailOnInconsistentRowLength(), false);
+ final boolean multilineValues = getBoolean(bean.getMultilineValues(), true);
+ final CsvConfiguration configuration = new CsvConfiguration(columnNameLineNumber, encoding, separatorChar,
+ quoteChar, escapeChar, failOnInconsistentRowLength, multilineValues);
+ return new CsvDataContext(resource, configuration);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
index d1d376a..9d35d57 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
@@ -18,25 +18,12 @@
*/
package org.apache.metamodel.spring;
-import java.sql.Connection;
-import java.sql.DriverManager;
-
import javax.sql.DataSource;
import org.apache.metamodel.DataContext;
-import org.apache.metamodel.csv.CsvConfiguration;
-import org.apache.metamodel.csv.CsvDataContext;
-import org.apache.metamodel.excel.ExcelConfiguration;
-import org.apache.metamodel.excel.ExcelDataContext;
-import org.apache.metamodel.jdbc.JdbcDataContext;
import org.apache.metamodel.schema.TableType;
-import org.apache.metamodel.util.BooleanComparator;
-import org.apache.metamodel.util.FileHelper;
-import org.apache.metamodel.util.FileResource;
-import org.apache.metamodel.util.Resource;
-import org.apache.metamodel.util.UrlResource;
-import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.FactoryBean;
/**
@@ -70,84 +57,56 @@ public class DataContextFactoryBean implements FactoryBean<DataContext> {
@Override
public DataContext getObject() throws Exception {
- String type = _type == null ? "" : _type.toLowerCase();
- if ("csv".equals(type)) {
- return createCsvDataContext();
+ final String type = _type == null ? "" : _type.toLowerCase();
+ final DataContextFactoryBeanDelegate delegate;
+
+ if (type.isEmpty()) {
+ throw new IllegalArgumentException("No DataContext 'type' property provided for DataContextFactoryBean");
+ } else if ("csv".equals(type)) {
+ delegate = new CsvDataContextFactoryBeanDelegate();
} else if ("excel".equals(type)) {
- return createExcelDataContext();
+ delegate = new ExcelDataContextFactoryBeanDelegate();
} else if ("jdbc".equals(type)) {
- return createJdbcDataContext();
+ delegate = new JdbcDataContextFactoryBeanDelegate();
+ } else {
+ delegate = createDelegateFromType();
+ }
+
+ if (delegate == null) {
+ throw new UnsupportedOperationException("Unsupported DataContext type: " + _type);
}
- // TODO Auto-generated method stub
- return null;
+ return delegate.createDataContext(this);
}
- private DataContext createJdbcDataContext() {
- TableType[] tableTypes = _tableTypes;
- if (tableTypes == null) {
- tableTypes = TableType.DEFAULT_TABLE_TYPES;
- }
-
- if (_dataSource == null) {
- final String driverClassName = getString(_driverClassName, null);
- if (driverClassName != null) {
- try {
- Class.forName(driverClassName);
- } catch (ClassNotFoundException e) {
- logger.error("Failed to initialize JDBC driver class '" + driverClassName + "'!", e);
- }
+ private DataContextFactoryBeanDelegate createDelegateFromType() {
+ final Class<?> cls;
+ try {
+ logger.debug("Attempting to interpret type '{}' as a delegate class name", _type);
+ cls = Class.forName(_type.trim());
+ } catch (Exception e) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Failed to load type '" + _type + "' as a class", e);
}
+ return null;
+ }
- final Connection connection;
- try {
- if (_username == null && _password == null) {
- connection = DriverManager.getConnection(_url);
- } else {
- connection = DriverManager.getConnection(_url, _username, _password);
- }
- } catch (Exception e) {
- logger.error("Failed to get JDBC connection using URL: " + _url, e);
- throw new IllegalStateException("Failed to get JDBC connection", e);
- }
+ if (cls == null) {
+ return null;
+ }
- return new JdbcDataContext(connection, tableTypes, _catalogName);
+ if (!DataContextFactoryBeanDelegate.class.isAssignableFrom(cls)) {
+ return null;
}
- return new JdbcDataContext(_dataSource, tableTypes, _catalogName);
- }
-
- private DataContext createExcelDataContext() {
- final int columnNameLineNumber = getInt(_columnNameLineNumber, ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE);
- final boolean skipEmptyLines = getBoolean(_skipEmptyLines, true);
- final boolean skipEmptyColumns = getBoolean(_skipEmptyColumns, false);
- final ExcelConfiguration configuration = new ExcelConfiguration(columnNameLineNumber, skipEmptyLines,
- skipEmptyColumns);
- return new ExcelDataContext(getResourceInternal(), configuration);
- }
-
- private DataContext createCsvDataContext() {
- final int columnNameLineNumber = getInt(_columnNameLineNumber, CsvConfiguration.DEFAULT_COLUMN_NAME_LINE);
- final String encoding = getString(_encoding, FileHelper.DEFAULT_ENCODING);
- final char separatorChar = getChar(_separatorChar, CsvConfiguration.DEFAULT_SEPARATOR_CHAR);
- final char quoteChar = getChar(_quoteChar, CsvConfiguration.DEFAULT_QUOTE_CHAR);
- final char escapeChar = getChar(_escapeChar, CsvConfiguration.DEFAULT_ESCAPE_CHAR);
- final boolean failOnInconsistentRowLength = getBoolean(_failOnInconsistentRowLength, false);
- final boolean multilineValues = getBoolean(_multilineValues, true);
- final CsvConfiguration configuration = new CsvConfiguration(columnNameLineNumber, encoding, separatorChar,
- quoteChar, escapeChar, failOnInconsistentRowLength, multilineValues);
- return new CsvDataContext(getResourceInternal(), configuration);
- }
-
- private Resource getResourceInternal() {
- if (_resource != null) {
- return new SpringResource(_resource);
- } else if (_filename != null) {
- return new FileResource(_filename);
- } else if (_url != null) {
- return new UrlResource(_url);
+ try {
+ final DataContextFactoryBeanDelegate delegate = cls.asSubclass(DataContextFactoryBeanDelegate.class)
+ .newInstance();
+ return delegate;
+ } catch (Exception e) {
+ logger.warn("Failed to instantiate delegate " + cls, e);
+ return null;
}
- return null;
}
@Override
@@ -160,53 +119,6 @@ public class DataContextFactoryBean implements FactoryBean<DataContext> {
return false;
}
- private int getInt(String value, int ifNull) {
- if (value == null) {
- return ifNull;
- }
- value = value.trim();
- if (value.isEmpty()) {
- return ifNull;
- }
- return Integer.parseInt(value);
- }
-
- private String getString(String value, String ifNull) {
- if (value == null) {
- return ifNull;
- }
- value = value.trim();
- if (value.isEmpty()) {
- return ifNull;
- }
- return value;
- }
-
- private char getChar(String value, char ifNull) {
- if (value == null) {
- return ifNull;
- }
- value = value.trim();
- if (value.isEmpty()) {
- return ifNull;
- }
- if ("none".equalsIgnoreCase(value)) {
- return CsvConfiguration.NOT_A_CHAR;
- }
- return value.charAt(0);
- }
-
- private boolean getBoolean(String value, boolean ifNull) {
- if (value == null) {
- return ifNull;
- }
- value = value.trim();
- if (value.isEmpty()) {
- return ifNull;
- }
- return BooleanComparator.parseBoolean(value);
- }
-
public String getType() {
return _type;
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..dd98066
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBeanDelegate.java
@@ -0,0 +1,43 @@
+/**
+ * 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.spring;
+
+import org.apache.metamodel.DataContext;
+
+/**
+ * Component responsible for instantiating a {@link DataContext} given the
+ * properties of a {@link DataContextFactoryBean}.
+ *
+ * This component helps separate the configuration code (in
+ * {@link DataContextFactoryBean}) from the actual instantiation of objects.
+ * This is necesary to ensure that the {@link DataContextFactoryBean} is
+ * functional for only a subset of MetaModel's modules, since otherwise import
+ * statements would hinder use of the class when not all MetaModel modules are
+ * available.
+ */
+public interface DataContextFactoryBeanDelegate {
+
+ /**
+ * Creates the particular {@link DataContext} object.
+ *
+ * @param bean
+ * @return
+ */
+ public DataContext createDataContext(DataContextFactoryBean bean);
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/ExcelDataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/ExcelDataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/ExcelDataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..f6d7d9b
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/ExcelDataContextFactoryBeanDelegate.java
@@ -0,0 +1,42 @@
+/**
+ * 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.spring;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.excel.ExcelConfiguration;
+import org.apache.metamodel.excel.ExcelDataContext;
+import org.apache.metamodel.util.Resource;
+
+/**
+ * {@link DataContextFactoryBeanDelegate} for {@link ExcelDataContext}.
+ */
+public class ExcelDataContextFactoryBeanDelegate extends AbstractDataContextFactoryBeanDelegate {
+
+ @Override
+ public DataContext createDataContext(DataContextFactoryBean bean) {
+ final Resource resource = getResource(bean);
+ final int columnNameLineNumber = getInt(bean.getColumnNameLineNumber(),
+ ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE);
+ final boolean skipEmptyLines = getBoolean(bean.getSkipEmptyLines(), true);
+ final boolean skipEmptyColumns = getBoolean(bean.getSkipEmptyColumns(), false);
+ final ExcelConfiguration configuration = new ExcelConfiguration(columnNameLineNumber, skipEmptyLines,
+ skipEmptyColumns);
+ return new ExcelDataContext(resource, configuration);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/main/java/org/apache/metamodel/spring/JdbcDataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/JdbcDataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/JdbcDataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..e87700d
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/JdbcDataContextFactoryBeanDelegate.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.spring;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import javax.sql.DataSource;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.schema.TableType;
+
+/**
+ * {@link DataContextFactoryBeanDelegate} for {@link JdbcDataContext}.
+ */
+public class JdbcDataContextFactoryBeanDelegate extends AbstractDataContextFactoryBeanDelegate {
+
+ @Override
+ public DataContext createDataContext(DataContextFactoryBean bean) {
+ TableType[] tableTypes = bean.getTableTypes();
+ if (tableTypes == null) {
+ tableTypes = TableType.DEFAULT_TABLE_TYPES;
+ }
+
+ final DataSource dataSource = bean.getDataSource();
+
+ if (dataSource == null) {
+ final String driverClassName = getString(bean.getDriverClassName(), null);
+ if (driverClassName != null) {
+ try {
+ Class.forName(driverClassName);
+ } catch (ClassNotFoundException e) {
+ logger.error("Failed to initialize JDBC driver class '" + driverClassName + "'!", e);
+ }
+ }
+
+ final String url = bean.getUrl();
+ final Connection connection;
+ try {
+ if (bean.getUsername() == null && bean.getPassword() == null) {
+ connection = DriverManager.getConnection(url);
+ } else {
+ connection = DriverManager.getConnection(url, bean.getUsername(), bean.getPassword());
+ }
+ } catch (Exception e) {
+ logger.error("Failed to get JDBC connection using URL: " + url, e);
+ throw new IllegalStateException("Failed to get JDBC connection", e);
+ }
+
+ return new JdbcDataContext(connection, tableTypes, bean.getCatalogName());
+ }
+
+ return new JdbcDataContext(dataSource, tableTypes, bean.getCatalogName());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/test/java/org/apache/metamodel/spring/MockDataContextFactoryBeanDelegate.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/MockDataContextFactoryBeanDelegate.java b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextFactoryBeanDelegate.java
new file mode 100644
index 0000000..4d97be2
--- /dev/null
+++ b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextFactoryBeanDelegate.java
@@ -0,0 +1,40 @@
+/**
+ * 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.spring;
+
+import java.util.ArrayList;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.pojo.PojoDataContext;
+import org.apache.metamodel.pojo.TableDataProvider;
+
+/**
+ * Mock implementation of {@link DataContextFactoryBeanDelegate}. Used by test (
+ * {@link MockDataContextTypeTest}) to verify that we can pass data context type
+ * as a qualified class name of a factory delegate.
+ */
+public class MockDataContextFactoryBeanDelegate implements DataContextFactoryBeanDelegate {
+
+ @Override
+ public DataContext createDataContext(DataContextFactoryBean bean) {
+ String username = bean.getUsername();
+ return new PojoDataContext(username, new ArrayList<TableDataProvider<?>>());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
new file mode 100644
index 0000000..e406756
--- /dev/null
+++ b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
@@ -0,0 +1,26 @@
+package org.apache.metamodel.spring;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.pojo.PojoDataContext;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:examples/mock-datacontext-type.xml")
+public class MockDataContextTypeTest {
+
+ @Autowired
+ private DataContext dataContext;
+
+ @Test
+ public void testReadDataContext() {
+ assertEquals(PojoDataContext.class, dataContext.getClass());
+
+ assertEquals("here's a value from springs XML file", dataContext.getDefaultSchema().getName());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/3aff7ff4/spring/src/test/resources/examples/mock-datacontext-type.xml
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/examples/mock-datacontext-type.xml b/spring/src/test/resources/examples/mock-datacontext-type.xml
new file mode 100644
index 0000000..b47a680
--- /dev/null
+++ b/spring/src/test/resources/examples/mock-datacontext-type.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+
+ <bean class="org.apache.metamodel.spring.DataContextFactoryBean">
+ <property name="type" value="org.apache.metamodel.spring.MockDataContextFactoryBeanDelegate" />
+ <property name="username" value="here's a value from springs XML file" />
+ </bean>
+
+</beans>
\ No newline at end of file
[3/8] git commit: Added testcases for CSV datacontext factory
Posted by ka...@apache.org.
Added testcases for CSV datacontext factory
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/5bc3d1b2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/5bc3d1b2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/5bc3d1b2
Branch: refs/heads/master
Commit: 5bc3d1b2357f99998c33c6b2813fd6346d067c48
Parents: f387893
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun Jan 5 20:14:03 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun Jan 5 20:14:03 2014 +0100
----------------------------------------------------------------------
spring/pom.xml | 12 +-
.../spring/DataContextFactoryBean.java | 157 ++++++++++++++++++-
.../apache/metamodel/spring/SpringResource.java | 9 ++
...CsvDefaultConfigurationFromResourceTest.java | 40 +++++
...vSpecifiedConfigurationFromFilenameTest.java | 37 +++++
spring/src/test/resources/data/example.csv | 2 +
.../resources/examples/csv-using-filename.xml | 13 ++
.../examples/csv-using-spring-resource.xml | 11 ++
8 files changed, 279 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/pom.xml
----------------------------------------------------------------------
diff --git a/spring/pom.xml b/spring/pom.xml
index bb1e6ec..d6051dc 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -26,6 +26,10 @@ under the License.
<modelVersion>4.0.0</modelVersion>
<artifactId>MetaModel-spring</artifactId>
<name>MetaModel module for Spring enabled configuration</name>
+
+ <properties>
+ <spring.version>3.0.7.RELEASE</spring.version>
+ </properties>
<dependencies>
<dependency>
@@ -42,7 +46,7 @@ under the License.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
- <version>3.0.7.RELEASE</version>
+ <version>${spring.version}</version>
<scope>provided</scope>
</dependency>
@@ -57,5 +61,11 @@ under the License.
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
index c231126..d1d376a 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
@@ -190,7 +190,9 @@ public class DataContextFactoryBean implements FactoryBean<DataContext> {
if (value.isEmpty()) {
return ifNull;
}
- // TODO: Check special strings like "
+ if ("none".equalsIgnoreCase(value)) {
+ return CsvConfiguration.NOT_A_CHAR;
+ }
return value.charAt(0);
}
@@ -204,4 +206,157 @@ public class DataContextFactoryBean implements FactoryBean<DataContext> {
}
return BooleanComparator.parseBoolean(value);
}
+
+ public String getType() {
+ return _type;
+ }
+
+ public void setType(String type) {
+ _type = type;
+ }
+
+ public org.springframework.core.io.Resource getResource() {
+ return _resource;
+ }
+
+ public void setResource(org.springframework.core.io.Resource resource) {
+ _resource = resource;
+ }
+
+ public String getFilename() {
+ return _filename;
+ }
+
+ public void setFilename(String filename) {
+ _filename = filename;
+ }
+
+ public String getUrl() {
+ return _url;
+ }
+
+ public void setUrl(String url) {
+ _url = url;
+ }
+
+ public String getColumnNameLineNumber() {
+ return _columnNameLineNumber;
+ }
+
+ public void setColumnNameLineNumber(String columnNameLineNumber) {
+ _columnNameLineNumber = columnNameLineNumber;
+ }
+
+ public String getSkipEmptyLines() {
+ return _skipEmptyLines;
+ }
+
+ public void setSkipEmptyLines(String skipEmptyLines) {
+ _skipEmptyLines = skipEmptyLines;
+ }
+
+ public String getSkipEmptyColumns() {
+ return _skipEmptyColumns;
+ }
+
+ public void setSkipEmptyColumns(String skipEmptyColumns) {
+ _skipEmptyColumns = skipEmptyColumns;
+ }
+
+ public String getEncoding() {
+ return _encoding;
+ }
+
+ public void setEncoding(String encoding) {
+ _encoding = encoding;
+ }
+
+ public String getSeparatorChar() {
+ return _separatorChar;
+ }
+
+ public void setSeparatorChar(String separatorChar) {
+ _separatorChar = separatorChar;
+ }
+
+ public String getQuoteChar() {
+ return _quoteChar;
+ }
+
+ public void setQuoteChar(String quoteChar) {
+ _quoteChar = quoteChar;
+ }
+
+ public String getEscapeChar() {
+ return _escapeChar;
+ }
+
+ public void setEscapeChar(String escapeChar) {
+ _escapeChar = escapeChar;
+ }
+
+ public String getFailOnInconsistentRowLength() {
+ return _failOnInconsistentRowLength;
+ }
+
+ public void setFailOnInconsistentRowLength(String failOnInconsistentRowLength) {
+ _failOnInconsistentRowLength = failOnInconsistentRowLength;
+ }
+
+ public String getMultilineValues() {
+ return _multilineValues;
+ }
+
+ public void setMultilineValues(String multilineValues) {
+ _multilineValues = multilineValues;
+ }
+
+ public TableType[] getTableTypes() {
+ return _tableTypes;
+ }
+
+ public void setTableTypes(TableType[] tableTypes) {
+ _tableTypes = tableTypes;
+ }
+
+ public String getCatalogName() {
+ return _catalogName;
+ }
+
+ public void setCatalogName(String catalogName) {
+ _catalogName = catalogName;
+ }
+
+ public DataSource getDataSource() {
+ return _dataSource;
+ }
+
+ public void setDataSource(DataSource dataSource) {
+ _dataSource = dataSource;
+ }
+
+ public String getUsername() {
+ return _username;
+ }
+
+ public void setUsername(String username) {
+ _username = username;
+ }
+
+ public String getPassword() {
+ return _password;
+ }
+
+ public void setPassword(String password) {
+ _password = password;
+ }
+
+ public String getDriverClassName() {
+ return _driverClassName;
+ }
+
+ public void setDriverClassName(String driverClassName) {
+ _driverClassName = driverClassName;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
index 2b0f532..536694c 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
@@ -112,4 +112,13 @@ public class SpringResource implements Resource {
throw new UnsupportedOperationException();
}
+ /**
+ * Gets the underlying spring {@link org.springframework.core.io.Resource}
+ * object.
+ *
+ * @return
+ */
+ public org.springframework.core.io.Resource getResource() {
+ return _resource;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java b/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
new file mode 100644
index 0000000..f6e4ad5
--- /dev/null
+++ b/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
@@ -0,0 +1,40 @@
+package org.apache.metamodel.spring;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.csv.CsvDataContext;
+import org.apache.metamodel.util.Resource;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:examples/csv-using-spring-resource.xml")
+public class CsvDefaultConfigurationFromResourceTest {
+
+ @Autowired
+ private DataContext dataContext;
+
+ @Test
+ public void testReadDataContext() {
+ assertEquals(CsvDataContext.class, dataContext.getClass());
+
+ CsvDataContext csv = (CsvDataContext) dataContext;
+ Resource resource = csv.getResource();
+
+ assertEquals(SpringResource.class, resource.getClass());
+
+ SpringResource springResource = (SpringResource) resource;
+ Assert.assertTrue(springResource.isExists());
+
+ assertEquals("example.csv", resource.getName());
+
+ assertEquals("[foo, bar]", Arrays.toString(csv.getDefaultSchema().getTable(0).getColumnNames()));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
new file mode 100644
index 0000000..6867fbf
--- /dev/null
+++ b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
@@ -0,0 +1,37 @@
+package org.apache.metamodel.spring;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.csv.CsvDataContext;
+import org.apache.metamodel.util.FileResource;
+import org.apache.metamodel.util.Resource;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:examples/csv-using-filename.xml")
+public class CsvSpecifiedConfigurationFromFilenameTest {
+
+ @Autowired
+ private DataContext dataContext;
+
+ @Test
+ public void testReadDataContext() {
+ assertEquals(CsvDataContext.class, dataContext.getClass());
+
+ CsvDataContext csv = (CsvDataContext) dataContext;
+ Resource resource = csv.getResource();
+
+ assertEquals(FileResource.class, resource.getClass());
+
+ assertEquals("example.csv", resource.getName());
+
+ assertEquals("[\"foo\", bar]", Arrays.toString(csv.getDefaultSchema().getTable(0).getColumnNames()));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/test/resources/data/example.csv
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/data/example.csv b/spring/src/test/resources/data/example.csv
new file mode 100644
index 0000000..97c314a
--- /dev/null
+++ b/spring/src/test/resources/data/example.csv
@@ -0,0 +1,2 @@
+"foo",bar
+hello,"world"
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/test/resources/examples/csv-using-filename.xml
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/examples/csv-using-filename.xml b/spring/src/test/resources/examples/csv-using-filename.xml
new file mode 100644
index 0000000..df6320e
--- /dev/null
+++ b/spring/src/test/resources/examples/csv-using-filename.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+
+ <bean class="org.apache.metamodel.spring.DataContextFactoryBean">
+ <property name="type" value="csv" />
+ <property name="filename" value="src/test/resources/data/example.csv" />
+ <property name="quoteChar" value="none" />
+ <property name="separatorChar" value="," />
+ </bean>
+
+</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5bc3d1b2/spring/src/test/resources/examples/csv-using-spring-resource.xml
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/examples/csv-using-spring-resource.xml b/spring/src/test/resources/examples/csv-using-spring-resource.xml
new file mode 100644
index 0000000..0f2612a
--- /dev/null
+++ b/spring/src/test/resources/examples/csv-using-spring-resource.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+
+ <bean class="org.apache.metamodel.spring.DataContextFactoryBean">
+ <property name="type" value="CSV" />
+ <property name="resource" value="classpath:data/example.csv" />
+ </bean>
+
+</beans>
\ No newline at end of file
[6/8] git commit: Minor changes to fit in with rat and enforcer rules.
Posted by ka...@apache.org.
Minor changes to fit in with rat and enforcer rules.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/9eb49ab1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/9eb49ab1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/9eb49ab1
Branch: refs/heads/master
Commit: 9eb49ab1db89262e50ac6c44d2f68c7d129d3a99
Parents: 3aff7ff
Author: Kasper Sørensen <i....@gmail.com>
Authored: Wed Jan 8 10:09:55 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Wed Jan 8 10:09:55 2014 +0100
----------------------------------------------------------------------
spring/pom.xml | 6 ++++++
.../apache/metamodel/spring/SpringResource.java | 18 ++++++++++++++++++
.../CsvDefaultConfigurationFromResourceTest.java | 18 ++++++++++++++++++
...CsvSpecifiedConfigurationFromFilenameTest.java | 18 ++++++++++++++++++
...celSpecifiedConfigurationFromFilenameTest.java | 18 ++++++++++++++++++
.../metamodel/spring/MockDataContextTypeTest.java | 18 ++++++++++++++++++
6 files changed, 96 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/pom.xml
----------------------------------------------------------------------
diff --git a/spring/pom.xml b/spring/pom.xml
index d6051dc..4bd1dc7 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -48,6 +48,12 @@ under the License.
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<!-- test -->
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
index 536694c..4400859 100644
--- a/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
+++ b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
@@ -1,3 +1,21 @@
+/**
+ * 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.spring;
import java.io.IOException;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java b/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
index f6e4ad5..87ffef0 100644
--- a/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
+++ b/spring/src/test/java/org/apache/metamodel/spring/CsvDefaultConfigurationFromResourceTest.java
@@ -1,3 +1,21 @@
+/**
+ * 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.spring;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
index a2ba1fd..01b6120 100644
--- a/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
+++ b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
@@ -1,3 +1,21 @@
+/**
+ * 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.spring;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java b/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
index 86b80c5..58a9317 100644
--- a/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
+++ b/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
@@ -1,3 +1,21 @@
+/**
+ * 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.spring;
import static org.junit.Assert.assertEquals;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/9eb49ab1/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
index e406756..afe6dd7 100644
--- a/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
+++ b/spring/src/test/java/org/apache/metamodel/spring/MockDataContextTypeTest.java
@@ -1,3 +1,21 @@
+/**
+ * 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.spring;
import static org.junit.Assert.assertEquals;
[8/8] git commit: Merge branch 'spring-module' into master
Posted by ka...@apache.org.
Merge branch 'spring-module' into master
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/d05da0c3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/d05da0c3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/d05da0c3
Branch: refs/heads/master
Commit: d05da0c37bd498b6a99e26e217fcb03de76ef5a6
Parents: f8f5736 fccac56
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun Jan 19 20:09:48 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun Jan 19 20:10:50 2014 +0100
----------------------------------------------------------------------
HEADER.txt | 16 -----
LICENSE | 179 +-------------------------------------------------------
pom.xml | 23 --------
3 files changed, 1 insertion(+), 217 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/d05da0c3/pom.xml
----------------------------------------------------------------------
[2/8] git commit: Added initial draft of DataContextFactoryBean with
support for JDBC, CSV and Excel
Posted by ka...@apache.org.
Added initial draft of DataContextFactoryBean with support for JDBC, CSV
and Excel
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/f387893c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/f387893c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/f387893c
Branch: refs/heads/master
Commit: f387893c5e1e0333371f0760650b74a76117b589
Parents: f8a4e8f
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun Jan 5 19:35:32 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun Jan 5 19:35:32 2014 +0100
----------------------------------------------------------------------
pom.xml | 19 ++
spring/.gitignore | 4 +
spring/pom.xml | 6 +
.../spring/DataContextFactoryBean.java | 207 +++++++++++++++++++
.../apache/metamodel/spring/SpringResource.java | 115 +++++++++++
5 files changed, 351 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f387893c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 40b871c..f7c846a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -319,6 +319,25 @@ under the License.
<ignore />
</action>
</pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.rat
+ </groupId>
+ <artifactId>
+ apache-rat-plugin
+ </artifactId>
+ <versionRange>
+ [0.8,)
+ </versionRange>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f387893c/spring/.gitignore
----------------------------------------------------------------------
diff --git a/spring/.gitignore b/spring/.gitignore
new file mode 100644
index 0000000..954270f
--- /dev/null
+++ b/spring/.gitignore
@@ -0,0 +1,4 @@
+/.settings
+/target
+/.classpath
+/.project
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f387893c/spring/pom.xml
----------------------------------------------------------------------
diff --git a/spring/pom.xml b/spring/pom.xml
index 6c8c355..bb1e6ec 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -39,6 +39,12 @@ under the License.
<version>${project.version}</version>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>3.0.7.RELEASE</version>
+ <scope>provided</scope>
+ </dependency>
<!-- test -->
<dependency>
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f387893c/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
new file mode 100644
index 0000000..c231126
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/DataContextFactoryBean.java
@@ -0,0 +1,207 @@
+/**
+ * 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.spring;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import javax.sql.DataSource;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.csv.CsvConfiguration;
+import org.apache.metamodel.csv.CsvDataContext;
+import org.apache.metamodel.excel.ExcelConfiguration;
+import org.apache.metamodel.excel.ExcelDataContext;
+import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.schema.TableType;
+import org.apache.metamodel.util.BooleanComparator;
+import org.apache.metamodel.util.FileHelper;
+import org.apache.metamodel.util.FileResource;
+import org.apache.metamodel.util.Resource;
+import org.apache.metamodel.util.UrlResource;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.FactoryBean;
+
+/**
+ * A spring {@link FactoryBean} that produces MetaModel {@link DataContext}
+ * objects based on property values that will typically be injected by the
+ * Spring configuration.
+ */
+public class DataContextFactoryBean implements FactoryBean<DataContext> {
+
+ private static final Logger logger = LoggerFactory.getLogger(DataContextFactoryBean.class);
+
+ private String _type;
+ private org.springframework.core.io.Resource _resource;
+ private String _filename;
+ private String _url;
+ private String _columnNameLineNumber;
+ private String _skipEmptyLines;
+ private String _skipEmptyColumns;
+ private String _encoding;
+ private String _separatorChar;
+ private String _quoteChar;
+ private String _escapeChar;
+ private String _failOnInconsistentRowLength;
+ private String _multilineValues;
+ private TableType[] _tableTypes;
+ private String _catalogName;
+ private DataSource _dataSource;
+ private String _username;
+ private String _password;
+ private String _driverClassName;
+
+ @Override
+ public DataContext getObject() throws Exception {
+ String type = _type == null ? "" : _type.toLowerCase();
+ if ("csv".equals(type)) {
+ return createCsvDataContext();
+ } else if ("excel".equals(type)) {
+ return createExcelDataContext();
+ } else if ("jdbc".equals(type)) {
+ return createJdbcDataContext();
+ }
+
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ private DataContext createJdbcDataContext() {
+ TableType[] tableTypes = _tableTypes;
+ if (tableTypes == null) {
+ tableTypes = TableType.DEFAULT_TABLE_TYPES;
+ }
+
+ if (_dataSource == null) {
+ final String driverClassName = getString(_driverClassName, null);
+ if (driverClassName != null) {
+ try {
+ Class.forName(driverClassName);
+ } catch (ClassNotFoundException e) {
+ logger.error("Failed to initialize JDBC driver class '" + driverClassName + "'!", e);
+ }
+ }
+
+ final Connection connection;
+ try {
+ if (_username == null && _password == null) {
+ connection = DriverManager.getConnection(_url);
+ } else {
+ connection = DriverManager.getConnection(_url, _username, _password);
+ }
+ } catch (Exception e) {
+ logger.error("Failed to get JDBC connection using URL: " + _url, e);
+ throw new IllegalStateException("Failed to get JDBC connection", e);
+ }
+
+ return new JdbcDataContext(connection, tableTypes, _catalogName);
+ }
+
+ return new JdbcDataContext(_dataSource, tableTypes, _catalogName);
+ }
+
+ private DataContext createExcelDataContext() {
+ final int columnNameLineNumber = getInt(_columnNameLineNumber, ExcelConfiguration.DEFAULT_COLUMN_NAME_LINE);
+ final boolean skipEmptyLines = getBoolean(_skipEmptyLines, true);
+ final boolean skipEmptyColumns = getBoolean(_skipEmptyColumns, false);
+ final ExcelConfiguration configuration = new ExcelConfiguration(columnNameLineNumber, skipEmptyLines,
+ skipEmptyColumns);
+ return new ExcelDataContext(getResourceInternal(), configuration);
+ }
+
+ private DataContext createCsvDataContext() {
+ final int columnNameLineNumber = getInt(_columnNameLineNumber, CsvConfiguration.DEFAULT_COLUMN_NAME_LINE);
+ final String encoding = getString(_encoding, FileHelper.DEFAULT_ENCODING);
+ final char separatorChar = getChar(_separatorChar, CsvConfiguration.DEFAULT_SEPARATOR_CHAR);
+ final char quoteChar = getChar(_quoteChar, CsvConfiguration.DEFAULT_QUOTE_CHAR);
+ final char escapeChar = getChar(_escapeChar, CsvConfiguration.DEFAULT_ESCAPE_CHAR);
+ final boolean failOnInconsistentRowLength = getBoolean(_failOnInconsistentRowLength, false);
+ final boolean multilineValues = getBoolean(_multilineValues, true);
+ final CsvConfiguration configuration = new CsvConfiguration(columnNameLineNumber, encoding, separatorChar,
+ quoteChar, escapeChar, failOnInconsistentRowLength, multilineValues);
+ return new CsvDataContext(getResourceInternal(), configuration);
+ }
+
+ private Resource getResourceInternal() {
+ if (_resource != null) {
+ return new SpringResource(_resource);
+ } else if (_filename != null) {
+ return new FileResource(_filename);
+ } else if (_url != null) {
+ return new UrlResource(_url);
+ }
+ return null;
+ }
+
+ @Override
+ public Class<DataContext> getObjectType() {
+ return DataContext.class;
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+
+ private int getInt(String value, int ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return Integer.parseInt(value);
+ }
+
+ private String getString(String value, String ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return value;
+ }
+
+ private char getChar(String value, char ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ // TODO: Check special strings like "
+ return value.charAt(0);
+ }
+
+ private boolean getBoolean(String value, boolean ifNull) {
+ if (value == null) {
+ return ifNull;
+ }
+ value = value.trim();
+ if (value.isEmpty()) {
+ return ifNull;
+ }
+ return BooleanComparator.parseBoolean(value);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f387893c/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
new file mode 100644
index 0000000..2b0f532
--- /dev/null
+++ b/spring/src/main/java/org/apache/metamodel/spring/SpringResource.java
@@ -0,0 +1,115 @@
+package org.apache.metamodel.spring;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.metamodel.util.Action;
+import org.apache.metamodel.util.FileHelper;
+import org.apache.metamodel.util.Func;
+import org.apache.metamodel.util.Resource;
+import org.apache.metamodel.util.ResourceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A {@link Resource} implementation based on spring's similar
+ * {@link org.springframework.core.io.Resource} concept.
+ */
+public class SpringResource implements Resource {
+
+ private static final Logger logger = LoggerFactory.getLogger(SpringResource.class);
+
+ private final org.springframework.core.io.Resource _resource;
+
+ public SpringResource(org.springframework.core.io.Resource resource) {
+ _resource = resource;
+ }
+
+ @Override
+ public void append(Action<OutputStream> arg0) throws ResourceException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long getLastModified() {
+ try {
+ return _resource.lastModified();
+ } catch (IOException e) {
+ logger.warn("Failed to get last modified date of resource: " + _resource, e);
+ return -1;
+ }
+ }
+
+ @Override
+ public String getName() {
+ return _resource.getFilename();
+ }
+
+ @Override
+ public String getQualifiedPath() {
+ try {
+ return _resource.getURI().toString();
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to get URI of resource: " + _resource, e);
+ }
+ }
+
+ @Override
+ public long getSize() {
+ try {
+ return _resource.contentLength();
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to get content length of resource: " + _resource, e);
+ }
+ }
+
+ @Override
+ public boolean isExists() {
+ return _resource.exists();
+ }
+
+ @Override
+ public boolean isReadOnly() {
+ return true;
+ }
+
+ @Override
+ public InputStream read() throws ResourceException {
+ try {
+ return _resource.getInputStream();
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to get input stream of resource: " + _resource, e);
+ }
+ }
+
+ @Override
+ public void read(Action<InputStream> action) throws ResourceException {
+ final InputStream in = read();
+ try {
+ action.run(in);
+ } catch (Exception e) {
+ throw new ResourceException(this, "Error occurred in read callback", e);
+ } finally {
+ FileHelper.safeClose(in);
+ }
+ }
+
+ @Override
+ public <E> E read(Func<InputStream, E> func) throws ResourceException {
+ final InputStream in = read();
+ try {
+ return func.eval(in);
+ } catch (Exception e) {
+ throw new ResourceException(this, "Error occurred in read callback", e);
+ } finally {
+ FileHelper.safeClose(in);
+ }
+ }
+
+ @Override
+ public void write(Action<OutputStream> arg0) throws ResourceException {
+ throw new UnsupportedOperationException();
+ }
+
+}
[4/8] git commit: Added test case for Excel data contexts.
Posted by ka...@apache.org.
Added test case for Excel data contexts.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/5ce666fa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/5ce666fa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/5ce666fa
Branch: refs/heads/master
Commit: 5ce666fa3b601ddee57e24a7bfb86d49046cd582
Parents: 5bc3d1b
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sun Jan 5 20:55:39 2014 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sun Jan 5 20:55:39 2014 +0100
----------------------------------------------------------------------
...vSpecifiedConfigurationFromFilenameTest.java | 3 ++
...lSpecifiedConfigurationFromFilenameTest.java | 41 +++++++++++++++++++
spring/src/test/resources/data/example.xlsx | Bin 0 -> 7449 bytes
.../resources/examples/csv-using-filename.xml | 1 +
.../resources/examples/excel-using-filename.xml | 13 ++++++
5 files changed, 58 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5ce666fa/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
index 6867fbf..a2ba1fd 100644
--- a/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
+++ b/spring/src/test/java/org/apache/metamodel/spring/CsvSpecifiedConfigurationFromFilenameTest.java
@@ -8,6 +8,7 @@ import org.apache.metamodel.DataContext;
import org.apache.metamodel.csv.CsvDataContext;
import org.apache.metamodel.util.FileResource;
import org.apache.metamodel.util.Resource;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,5 +34,7 @@ public class CsvSpecifiedConfigurationFromFilenameTest {
assertEquals("example.csv", resource.getName());
assertEquals("[\"foo\", bar]", Arrays.toString(csv.getDefaultSchema().getTable(0).getColumnNames()));
+
+ Assert.assertFalse(csv.getConfiguration().isMultilineValues());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5ce666fa/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java b/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
new file mode 100644
index 0000000..86b80c5
--- /dev/null
+++ b/spring/src/test/java/org/apache/metamodel/spring/ExcelSpecifiedConfigurationFromFilenameTest.java
@@ -0,0 +1,41 @@
+package org.apache.metamodel.spring;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.excel.ExcelDataContext;
+import org.apache.metamodel.util.FileResource;
+import org.apache.metamodel.util.Resource;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:examples/excel-using-filename.xml")
+public class ExcelSpecifiedConfigurationFromFilenameTest {
+
+ @Autowired
+ private DataContext dataContext;
+
+ @Test
+ public void testReadDataContext() {
+ assertEquals(ExcelDataContext.class, dataContext.getClass());
+
+ ExcelDataContext excel = (ExcelDataContext) dataContext;
+ Resource resource = excel.getResource();
+
+ assertEquals(FileResource.class, resource.getClass());
+
+ assertEquals("example.xlsx", resource.getName());
+
+ assertEquals("[hello, world]", Arrays.toString(excel.getDefaultSchema().getTable(0).getColumnNames()));
+
+ Assert.assertTrue(excel.getConfiguration().isSkipEmptyLines());
+ Assert.assertTrue(excel.getConfiguration().isSkipEmptyColumns());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5ce666fa/spring/src/test/resources/data/example.xlsx
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/data/example.xlsx b/spring/src/test/resources/data/example.xlsx
new file mode 100644
index 0000000..b3661d9
Binary files /dev/null and b/spring/src/test/resources/data/example.xlsx differ
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5ce666fa/spring/src/test/resources/examples/csv-using-filename.xml
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/examples/csv-using-filename.xml b/spring/src/test/resources/examples/csv-using-filename.xml
index df6320e..c0934ed 100644
--- a/spring/src/test/resources/examples/csv-using-filename.xml
+++ b/spring/src/test/resources/examples/csv-using-filename.xml
@@ -8,6 +8,7 @@
<property name="filename" value="src/test/resources/data/example.csv" />
<property name="quoteChar" value="none" />
<property name="separatorChar" value="," />
+ <property name="multilineValues" value="false" />
</bean>
</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/5ce666fa/spring/src/test/resources/examples/excel-using-filename.xml
----------------------------------------------------------------------
diff --git a/spring/src/test/resources/examples/excel-using-filename.xml b/spring/src/test/resources/examples/excel-using-filename.xml
new file mode 100644
index 0000000..0fa5e19
--- /dev/null
+++ b/spring/src/test/resources/examples/excel-using-filename.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+
+ <bean class="org.apache.metamodel.spring.DataContextFactoryBean">
+ <property name="type" value="Excel" />
+ <property name="filename" value="src/test/resources/data/example.xlsx" />
+ <property name="skipEmptyLines" value="true" />
+ <property name="skipEmptyColumns" value="true" />
+ </bean>
+
+</beans>
\ No newline at end of file