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 {