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:01 UTC
[26/42] metamodel git commit: METAMODEL-244: Scoped the column naming
session and state into an object
METAMODEL-244: Scoped the column naming session and state into an object
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/d5b9e12a
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/d5b9e12a
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/d5b9e12a
Branch: refs/heads/5.x
Commit: d5b9e12a016e94af78cceeeaf966a226afe8650d
Parents: 0da8f1a
Author: Kasper S�rensen <i....@gmail.com>
Authored: Sun Apr 24 13:32:15 2016 -0700
Committer: Kasper S�rensen <i....@gmail.com>
Committed: Sun Apr 24 13:32:15 2016 -0700
----------------------------------------------------------------------
.../builder/AlphabeticColumnNamingStrategy.java | 19 ++++++--
.../schema/builder/ColumnNamingSession.java | 47 ++++++++++++++++++++
.../schema/builder/ColumnNamingStrategy.java | 16 +++----
...tingIntrinsicSwitchColumnNamingStrategy.java | 28 +++++++++---
.../builder/UniqueColumnNamingStrategy.java | 40 +++++++++++------
.../fixedwidth/FixedWidthDataContext.java | 11 +++--
6 files changed, 121 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/core/src/main/java/org/apache/metamodel/schema/builder/AlphabeticColumnNamingStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/AlphabeticColumnNamingStrategy.java b/core/src/main/java/org/apache/metamodel/schema/builder/AlphabeticColumnNamingStrategy.java
index 83679a3..91d1b85 100644
--- a/core/src/main/java/org/apache/metamodel/schema/builder/AlphabeticColumnNamingStrategy.java
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/AlphabeticColumnNamingStrategy.java
@@ -21,12 +21,23 @@ package org.apache.metamodel.schema.builder;
import org.apache.metamodel.util.AlphabeticSequence;
public class AlphabeticColumnNamingStrategy implements ColumnNamingStrategy {
-
- private final AlphabeticSequence seq = new AlphabeticSequence();
+
+ private static final long serialVersionUID = 1L;
@Override
- public String getNextColumnName(ColumnNamingContext ctx) {
- return seq.next();
+ public ColumnNamingSession startColumnNamingSession() {
+ return new ColumnNamingSession() {
+ private final AlphabeticSequence seq = new AlphabeticSequence();
+
+ @Override
+ public String getNextColumnName(ColumnNamingContext ctx) {
+ return seq.next();
+ }
+
+ @Override
+ public void close() {
+ }
+ };
}
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingSession.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingSession.java b/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingSession.java
new file mode 100644
index 0000000..2c6f7b2
--- /dev/null
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingSession.java
@@ -0,0 +1,47 @@
+/**
+ * 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 java.io.Closeable;
+
+import org.apache.metamodel.schema.Column;
+import org.apache.metamodel.schema.Table;
+
+/**
+ * Represents a 'session' in which a single {@link Table}'s {@link Column}s are
+ * named.
+ */
+public interface ColumnNamingSession extends Closeable {
+
+ /**
+ * Provides the name to apply for a given column.
+ *
+ * @param ctx
+ * the context of the column naming taking place. This contains
+ * column index, intrinsic name etc. if available.
+ * @return the name to provide to the column.
+ */
+ public String getNextColumnName(ColumnNamingContext ctx);
+
+ /**
+ * Ends the column naming session.
+ */
+ @Override
+ public void close();
+}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingStrategy.java b/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingStrategy.java
index 4923c58..2219fb7 100644
--- a/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingStrategy.java
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/ColumnNamingStrategy.java
@@ -18,20 +18,14 @@
*/
package org.apache.metamodel.schema.builder;
+import java.io.Serializable;
+
/**
* A strategy that defines how columns are logically named. Such strategies are
* mostly used when a particular datastore is not itself intrinsically
* specifying the column name.
*/
-public interface ColumnNamingStrategy {
-
- /**
- * Provides the name to apply for a given column.
- *
- * @param ctx
- * the context of the column naming taking place. This contains
- * column index, intrinsic name etc. if available.
- * @return the name to provide to the column.
- */
- public String getNextColumnName(ColumnNamingContext ctx);
+public interface ColumnNamingStrategy extends Serializable {
+
+ public ColumnNamingSession startColumnNamingSession();
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/core/src/main/java/org/apache/metamodel/schema/builder/DelegatingIntrinsicSwitchColumnNamingStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/DelegatingIntrinsicSwitchColumnNamingStrategy.java b/core/src/main/java/org/apache/metamodel/schema/builder/DelegatingIntrinsicSwitchColumnNamingStrategy.java
index 99cdaf5..612f81d 100644
--- a/core/src/main/java/org/apache/metamodel/schema/builder/DelegatingIntrinsicSwitchColumnNamingStrategy.java
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/DelegatingIntrinsicSwitchColumnNamingStrategy.java
@@ -25,6 +25,7 @@ package org.apache.metamodel.schema.builder;
*/
public class DelegatingIntrinsicSwitchColumnNamingStrategy implements ColumnNamingStrategy {
+ private static final long serialVersionUID = 1L;
private final ColumnNamingStrategy intrinsicStrategy;
private final ColumnNamingStrategy nonIntrinsicStrategy;
@@ -35,12 +36,25 @@ public class DelegatingIntrinsicSwitchColumnNamingStrategy implements ColumnNami
}
@Override
- public String getNextColumnName(ColumnNamingContext ctx) {
- final String intrinsicColumnName = ctx.getIntrinsicColumnName();
- if (intrinsicColumnName == null || intrinsicColumnName.isEmpty()) {
- return nonIntrinsicStrategy.getNextColumnName(ctx);
- }
- return intrinsicStrategy.getNextColumnName(ctx);
- }
+ public ColumnNamingSession startColumnNamingSession() {
+ final ColumnNamingSession intrinsicSession = intrinsicStrategy.startColumnNamingSession();
+ final ColumnNamingSession nonIntrinsicSession = nonIntrinsicStrategy.startColumnNamingSession();
+ return new ColumnNamingSession() {
+
+ @Override
+ public String getNextColumnName(ColumnNamingContext ctx) {
+ final String intrinsicColumnName = ctx.getIntrinsicColumnName();
+ if (intrinsicColumnName == null || intrinsicColumnName.isEmpty()) {
+ return nonIntrinsicSession.getNextColumnName(ctx);
+ }
+ return intrinsicSession.getNextColumnName(ctx);
+ }
+ @Override
+ public void close() {
+ intrinsicSession.close();
+ nonIntrinsicSession.close();
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/core/src/main/java/org/apache/metamodel/schema/builder/UniqueColumnNamingStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/builder/UniqueColumnNamingStrategy.java b/core/src/main/java/org/apache/metamodel/schema/builder/UniqueColumnNamingStrategy.java
index 9371059..17e7830 100644
--- a/core/src/main/java/org/apache/metamodel/schema/builder/UniqueColumnNamingStrategy.java
+++ b/core/src/main/java/org/apache/metamodel/schema/builder/UniqueColumnNamingStrategy.java
@@ -29,22 +29,34 @@ import java.util.Set;
*/
public class UniqueColumnNamingStrategy implements ColumnNamingStrategy {
- private final Set<String> names = new HashSet<>();
+ private static final long serialVersionUID = 1L;
@Override
- public String getNextColumnName(ColumnNamingContext ctx) {
- final String intrinsicName = ctx.getIntrinsicColumnName();
- boolean unique = names.add(intrinsicName);
- if (unique) {
- return intrinsicName;
- }
-
- String newName = null;
- for (int i = 2; !unique; i++) {
- newName = intrinsicName + i;
- unique = names.add(newName);
- }
- return newName;
+ public ColumnNamingSession startColumnNamingSession() {
+ return new ColumnNamingSession() {
+
+ private final Set<String> names = new HashSet<>();
+
+ @Override
+ public String getNextColumnName(ColumnNamingContext ctx) {
+ final String intrinsicName = ctx.getIntrinsicColumnName();
+ boolean unique = names.add(intrinsicName);
+ if (unique) {
+ return intrinsicName;
+ }
+
+ String newName = null;
+ for (int i = 2; !unique; i++) {
+ newName = intrinsicName + i;
+ unique = names.add(newName);
+ }
+ return newName;
+ }
+
+ @Override
+ public void close() {
+ }
+ };
}
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/d5b9e12a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContext.java
----------------------------------------------------------------------
diff --git a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContext.java b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContext.java
index 0a326cc..25a8457 100644
--- a/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContext.java
+++ b/fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthDataContext.java
@@ -34,6 +34,7 @@ import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.Table;
import org.apache.metamodel.schema.TableType;
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 org.apache.metamodel.util.FileResource;
@@ -134,10 +135,12 @@ public class FixedWidthDataContext extends QueryPostprocessDataContext {
}
final ColumnNamingStrategy columnNamingStrategy = _configuration.getColumnNamingStrategy();
if (columnNames != null) {
- for (int i = 0; i < columnNames.length; i++) {
- final String intrinsicColumnName = hasColumnHeader ? columnNames[i] : null;
- columnNames[i] = columnNamingStrategy.getNextColumnName(new ColumnNamingContextImpl(table,
- intrinsicColumnName, i));
+ try (final ColumnNamingSession columnNamingSession = columnNamingStrategy.startColumnNamingSession()) {
+ for (int i = 0; i < columnNames.length; i++) {
+ final String intrinsicColumnName = hasColumnHeader ? columnNames[i] : null;
+ columnNames[i] = columnNamingSession.getNextColumnName(new ColumnNamingContextImpl(table,
+ intrinsicColumnName, i));
+ }
}
}
} finally {