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 2016/05/16 03:54:02 UTC
[27/42] metamodel git commit: METAMODEL-244: Implemented naming
strategy support in csv module
METAMODEL-244: Implemented naming strategy support in csv module
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/0fcc4de3
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/0fcc4de3
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/0fcc4de3
Branch: refs/heads/5.x
Commit: 0fcc4de38faa180a321f01ba724f112a70cd86f9
Parents: d5b9e12
Author: Kasper S�rensen <i....@gmail.com>
Authored: Sun Apr 24 13:48:28 2016 -0700
Committer: Kasper S�rensen <i....@gmail.com>
Committed: Sun Apr 24 13:48:28 2016 -0700
----------------------------------------------------------------------
.../builder/DefaultColumnNamingStrategy.java | 2 +
.../DefaultColumnNamingStrategyTest.java | 46 +++++++++++++++++++
.../apache/metamodel/csv/CsvConfiguration.java | 24 +++++++++-
.../java/org/apache/metamodel/csv/CsvTable.java | 26 ++++++-----
.../fixedwidth/FixedWidthConfiguration.java | 48 +++++++++++---------
5 files changed, 111 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/0fcc4de3/core/src/main/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategy.java b/core/src/main/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategy.java
index 9aef863..2cc9fb7 100644
--- a/core/src/main/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategy.java
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategy.java
@@ -24,6 +24,8 @@ package org.apache.metamodel.schema.builder;
*/
public class DefaultColumnNamingStrategy extends DelegatingIntrinsicSwitchColumnNamingStrategy {
+ private static final long serialVersionUID = 1L;
+
public DefaultColumnNamingStrategy() {
super(new UniqueColumnNamingStrategy(), new AlphabeticColumnNamingStrategy());
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/0fcc4de3/core/src/test/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategyTest.java b/core/src/test/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategyTest.java
new file mode 100644
index 0000000..b903065
--- /dev/null
+++ b/core/src/test/java/org/apache/metamodel/schema/builder/DefaultColumnNamingStrategyTest.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.schema.builder;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class DefaultColumnNamingStrategyTest {
+
+ private final DefaultColumnNamingStrategy namingStrategy = new DefaultColumnNamingStrategy();
+
+ @Test
+ public void testDuplicateColumnNames() throws Exception {
+ try (final ColumnNamingSession session = namingStrategy.startColumnNamingSession()) {
+ assertEquals("foo", session.getNextColumnName(new ColumnNamingContextImpl(null, "foo", 0)));
+ assertEquals("bar", session.getNextColumnName(new ColumnNamingContextImpl(null, "bar", 1)));
+ assertEquals("foo2", session.getNextColumnName(new ColumnNamingContextImpl(null, "foo", 2)));
+ }
+ }
+
+ @Test
+ public void testNoIntrinsicColumnNames() throws Exception {
+ try (final ColumnNamingSession session = namingStrategy.startColumnNamingSession()) {
+ assertEquals("A", session.getNextColumnName(new ColumnNamingContextImpl(null, "", 0)));
+ assertEquals("B", session.getNextColumnName(new ColumnNamingContextImpl(null, null, 1)));
+ assertEquals("C", session.getNextColumnName(new ColumnNamingContextImpl(null, "", 2)));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/0fcc4de3/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
index d45709c..4d1874c 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvConfiguration.java
@@ -21,6 +21,8 @@ package org.apache.metamodel.csv;
import java.io.Serializable;
import java.util.List;
+import org.apache.metamodel.schema.builder.ColumnNamingStrategy;
+import org.apache.metamodel.schema.builder.DefaultColumnNamingStrategy;
import org.apache.metamodel.util.BaseObject;
import org.apache.metamodel.util.FileHelper;
@@ -50,6 +52,7 @@ public final class CsvConfiguration extends BaseObject implements Serializable {
private final char escapeChar;
private final boolean failOnInconsistentRowLength;
private final boolean multilineValues;
+ private final ColumnNamingStrategy columnNamingStrategy;
public CsvConfiguration() {
this(DEFAULT_COLUMN_NAME_LINE);
@@ -74,9 +77,16 @@ public final class CsvConfiguration extends BaseObject implements Serializable {
char escapeChar, boolean failOnInconsistentRowLength) {
this(columnNameLineNumber, encoding, separatorChar, quoteChar, escapeChar, failOnInconsistentRowLength, true);
}
-
+
public CsvConfiguration(int columnNameLineNumber, String encoding, char separatorChar, char quoteChar,
char escapeChar, boolean failOnInconsistentRowLength, boolean multilineValues) {
+ this(columnNameLineNumber, null, encoding, separatorChar, quoteChar, escapeChar, failOnInconsistentRowLength,
+ multilineValues);
+ }
+
+ public CsvConfiguration(int columnNameLineNumber, ColumnNamingStrategy columnNamingStrategy, String encoding,
+ char separatorChar, char quoteChar, char escapeChar, boolean failOnInconsistentRowLength,
+ boolean multilineValues) {
this.columnNameLineNumber = columnNameLineNumber;
this.encoding = encoding;
this.separatorChar = separatorChar;
@@ -84,6 +94,18 @@ public final class CsvConfiguration extends BaseObject implements Serializable {
this.escapeChar = escapeChar;
this.failOnInconsistentRowLength = failOnInconsistentRowLength;
this.multilineValues = multilineValues;
+ this.columnNamingStrategy = null;
+ }
+
+ /**
+ * Gets a {@link ColumnNamingStrategy} to use if needed.
+ * @return
+ */
+ public ColumnNamingStrategy getColumnNamingStrategy() {
+ if (columnNamingStrategy == null) {
+ return new DefaultColumnNamingStrategy();
+ }
+ return columnNamingStrategy;
}
/**
http://git-wip-us.apache.org/repos/asf/metamodel/blob/0fcc4de3/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java b/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
index b5ae485..e2a665d 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvTable.java
@@ -27,7 +27,9 @@ import org.apache.metamodel.schema.MutableColumn;
import org.apache.metamodel.schema.Relationship;
import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.TableType;
-import org.apache.metamodel.util.AlphabeticSequence;
+import org.apache.metamodel.schema.builder.ColumnNamingContextImpl;
+import org.apache.metamodel.schema.builder.ColumnNamingSession;
+import org.apache.metamodel.schema.builder.ColumnNamingStrategy;
import org.apache.metamodel.util.FileHelper;
import au.com.bytecode.opencsv.CSVReader;
@@ -109,23 +111,23 @@ final class CsvTable extends AbstractTable {
if (columnNames == null) {
return new Column[0];
}
-
+
final CsvConfiguration configuration = _schema.getDataContext().getConfiguration();
final int columnNameLineNumber = configuration.getColumnNameLineNumber();
final boolean nullable = !configuration.isFailOnInconsistentRowLength();
+ final ColumnNamingStrategy columnNamingStrategy = configuration.getColumnNamingStrategy();
final Column[] columns = new Column[columnNames.length];
- final AlphabeticSequence sequence = new AlphabeticSequence();
- for (int i = 0; i < columnNames.length; i++) {
- final String columnName;
- if (columnNameLineNumber == CsvConfiguration.NO_COLUMN_NAME_LINE) {
- columnName = sequence.next();
- } else {
- columnName = columnNames[i];
+ try (final ColumnNamingSession namingSession = columnNamingStrategy.startColumnNamingSession()) {
+ for (int i = 0; i < columnNames.length; i++) {
+ final String intrinsicColumnName = columnNameLineNumber == CsvConfiguration.NO_COLUMN_NAME_LINE ? null
+ : columnNames[i];
+ final String columnName = namingSession.getNextColumnName(new ColumnNamingContextImpl(this,
+ intrinsicColumnName, i));
+ final Column column = new MutableColumn(columnName, ColumnType.STRING, this, i, null, null, nullable,
+ null, false, null);
+ columns[i] = column;
}
- Column column = new MutableColumn(columnName, ColumnType.STRING, this, i, null, null, nullable, null,
- false, null);
- columns[i] = column;
}
return columns;
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/0fcc4de3/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java
----------------------------------------------------------------------
diff --git a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java
index 6538f5c..9c0dd46 100644
--- a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java
+++ b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java
@@ -56,30 +56,34 @@ public final class FixedWidthConfiguration extends BaseObject implements
false);
}
- public FixedWidthConfiguration(int columnNameLineNumber, String encoding,
- int fixedValueWidth) {
- this(columnNameLineNumber, encoding, fixedValueWidth, false);
- }
+ public FixedWidthConfiguration(int columnNameLineNumber, String encoding, int fixedValueWidth) {
+ this(columnNameLineNumber, encoding, fixedValueWidth, false);
+ }
- public FixedWidthConfiguration(int columnNameLineNumber, String encoding,
- int fixedValueWidth, boolean failOnInconsistentLineWidth) {
- this.encoding = encoding;
- this.fixedValueWidth = fixedValueWidth;
- this.columnNameLineNumber = columnNameLineNumber;
- this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;
- this.columnNamingStrategy = null;
- this.valueWidths = new int[0];
- }
+ public FixedWidthConfiguration(int columnNameLineNumber, String encoding, int fixedValueWidth,
+ boolean failOnInconsistentLineWidth) {
+ this.encoding = encoding;
+ this.fixedValueWidth = fixedValueWidth;
+ this.columnNameLineNumber = columnNameLineNumber;
+ this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;
+ this.columnNamingStrategy = null;
+ this.valueWidths = new int[0];
+ }
- public FixedWidthConfiguration(int columnNameLineNumber, String encoding,
- int[] valueWidths, boolean failOnInconsistentLineWidth) {
- this.encoding = encoding;
- this.fixedValueWidth = -1;
- this.columnNameLineNumber = columnNameLineNumber;
- this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;
- this.columnNamingStrategy = null;
- this.valueWidths = valueWidths;
- }
+ public FixedWidthConfiguration(int columnNameLineNumber, String encoding,
+ int[] valueWidths, boolean failOnInconsistentLineWidth) {
+ this(columnNameLineNumber, null, encoding, valueWidths, failOnInconsistentLineWidth);
+ }
+
+ public FixedWidthConfiguration(int columnNameLineNumber, ColumnNamingStrategy columnNamingStrategy, String encoding,
+ int[] valueWidths, boolean failOnInconsistentLineWidth) {
+ this.encoding = encoding;
+ this.fixedValueWidth = -1;
+ this.columnNameLineNumber = columnNameLineNumber;
+ this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;
+ this.columnNamingStrategy = columnNamingStrategy;
+ this.valueWidths = valueWidths;
+ }
/**
* The line number (1 based) from which to get the names of the columns.