Updated line-endings
authorKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Sun, 13 Nov 2016 19:00:44 +0000 (11:00 -0800)
committerKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Sun, 13 Nov 2016 19:00:44 +0000 (11:00 -0800)
17 files changed:
core/src/main/java/org/apache/metamodel/schema/naming/AlphabeticColumnNamingStrategy.java
core/src/main/java/org/apache/metamodel/schema/naming/ColumnNamingContext.java
core/src/main/java/org/apache/metamodel/schema/naming/ColumnNamingContextImpl.java
core/src/main/java/org/apache/metamodel/schema/naming/ColumnNamingStrategies.java
core/src/main/java/org/apache/metamodel/schema/naming/ColumnNamingStrategy.java
core/src/main/java/org/apache/metamodel/schema/naming/CustomColumnNamingStrategy.java
core/src/main/java/org/apache/metamodel/schema/naming/DelegatingIntrinsicSwitchColumnNamingStrategy.java
core/src/main/java/org/apache/metamodel/schema/naming/UniqueColumnNamingStrategy.java
core/src/test/java/org/apache/metamodel/insert/AbstractRowInsertionBuilderTest.java
elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/JestElasticSearchUpdateCallback.java
fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthColumnSpec.java
fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfiguration.java
fixedwidth/src/main/java/org/apache/metamodel/fixedwidth/FixedWidthConfigurationReader.java
fixedwidth/src/test/java/org/apache/metamodel/fixedwidth/FixedWidthConfigurationReaderTest.java
fixedwidth/src/test/resources/metadata_spec1/data.txt
fixedwidth/src/test/resources/metadata_spec1/sas-formatfile-metadata.txt
fixedwidth/src/test/resources/metadata_spec1/sas-input-metadata.txt

index f6575c7..34498de 100644 (file)
@@ -1,43 +1,43 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import org.apache.metamodel.util.AlphabeticSequence;\r
-\r
-public class AlphabeticColumnNamingStrategy implements ColumnNamingStrategy {\r
-\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    @Override\r
-    public ColumnNamingSession startColumnNamingSession() {\r
-        return new ColumnNamingSession() {\r
-            private final AlphabeticSequence seq = new AlphabeticSequence();\r
-\r
-            @Override\r
-            public String getNextColumnName(ColumnNamingContext ctx) {\r
-                return seq.next();\r
-            }\r
-\r
-            @Override\r
-            public void close() {\r
-            }\r
-        };\r
-    }\r
-\r
-}\r
+/**
+ * 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.naming;
+
+import org.apache.metamodel.util.AlphabeticSequence;
+
+public class AlphabeticColumnNamingStrategy implements ColumnNamingStrategy {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    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() {
+            }
+        };
+    }
+
+}
index b613913..b43ad87 100644 (file)
@@ -1,52 +1,52 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */package org.apache.metamodel.schema.naming;\r
-\r
-import org.apache.metamodel.schema.Table;\r
-\r
-/**\r
- * Defines the context for naming a single column in a\r
- * {@link ColumnNamingStrategy} session.\r
- */\r
-public interface ColumnNamingContext {\r
-\r
-    /**\r
-     * Gets the index of the column being named.\r
-     * \r
-     * @return\r
-     */\r
-    public int getColumnIndex();\r
-\r
-    /**\r
-     * Gets the {@link Table} that the column is to pertain to. If the table is\r
-     * not yet available then this may return null.\r
-     * \r
-     * @return\r
-     */\r
-    public Table getTable();\r
-\r
-    /**\r
-     * Gets the intrinsic column name, if this is defined in the datastore\r
-     * itself. This may be in the form of a header or such. Sometimes intrinsic\r
-     * column names exist only for some columns and sometimes there may be\r
-     * duplicate names or other anomalies which are often discouraged.\r
-     * \r
-     * @return\r
-     */\r
-    public String getIntrinsicColumnName();\r
-}\r
+/**
+ * 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.naming;
+
+import org.apache.metamodel.schema.Table;
+
+/**
+ * Defines the context for naming a single column in a
+ * {@link ColumnNamingStrategy} session.
+ */
+public interface ColumnNamingContext {
+
+    /**
+     * Gets the index of the column being named.
+     * 
+     * @return
+     */
+    public int getColumnIndex();
+
+    /**
+     * Gets the {@link Table} that the column is to pertain to. If the table is
+     * not yet available then this may return null.
+     * 
+     * @return
+     */
+    public Table getTable();
+
+    /**
+     * Gets the intrinsic column name, if this is defined in the datastore
+     * itself. This may be in the form of a header or such. Sometimes intrinsic
+     * column names exist only for some columns and sometimes there may be
+     * duplicate names or other anomalies which are often discouraged.
+     * 
+     * @return
+     */
+    public String getIntrinsicColumnName();
+}
index cc7a24e..ec77440 100644 (file)
@@ -1,64 +1,64 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import org.apache.metamodel.schema.Table;\r
-\r
-public class ColumnNamingContextImpl implements ColumnNamingContext {\r
-\r
-    private final int columnIndex;\r
-    private final Table table;\r
-    private final String intrinsicColumnName;\r
-\r
-    /**\r
-     * \r
-     * @param table\r
-     * @param intrinsicColumnName\r
-     * @param columnIndex\r
-     */\r
-    public ColumnNamingContextImpl(Table table, String intrinsicColumnName, int columnIndex) {\r
-        this.table = table;\r
-        this.intrinsicColumnName = intrinsicColumnName;\r
-        this.columnIndex = columnIndex;\r
-    }\r
-\r
-    /**\r
-     * \r
-     * @param columnIndex\r
-     */\r
-    public ColumnNamingContextImpl(int columnIndex) {\r
-        this(null, null, columnIndex);\r
-    }\r
-\r
-    @Override\r
-    public int getColumnIndex() {\r
-        return columnIndex;\r
-    }\r
-\r
-    @Override\r
-    public Table getTable() {\r
-        return table;\r
-    }\r
-\r
-    @Override\r
-    public String getIntrinsicColumnName() {\r
-        return intrinsicColumnName;\r
-    }\r
-\r
-}\r
+/**
+ * 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.naming;
+
+import org.apache.metamodel.schema.Table;
+
+public class ColumnNamingContextImpl implements ColumnNamingContext {
+
+    private final int columnIndex;
+    private final Table table;
+    private final String intrinsicColumnName;
+
+    /**
+     * 
+     * @param table
+     * @param intrinsicColumnName
+     * @param columnIndex
+     */
+    public ColumnNamingContextImpl(Table table, String intrinsicColumnName, int columnIndex) {
+        this.table = table;
+        this.intrinsicColumnName = intrinsicColumnName;
+        this.columnIndex = columnIndex;
+    }
+
+    /**
+     * 
+     * @param columnIndex
+     */
+    public ColumnNamingContextImpl(int columnIndex) {
+        this(null, null, columnIndex);
+    }
+
+    @Override
+    public int getColumnIndex() {
+        return columnIndex;
+    }
+
+    @Override
+    public Table getTable() {
+        return table;
+    }
+
+    @Override
+    public String getIntrinsicColumnName() {
+        return intrinsicColumnName;
+    }
+
+}
index 0696376..f0da83a 100644 (file)
@@ -1,45 +1,45 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import java.util.List;\r
-\r
-/**\r
- * Constructors and common utilities for {@link ColumnNamingStrategy} objects.\r
- */\r
-public class ColumnNamingStrategies {\r
-\r
-    private static final DelegatingIntrinsicSwitchColumnNamingStrategy DEFAULT_STRATEGY = new DelegatingIntrinsicSwitchColumnNamingStrategy(\r
-            new UniqueColumnNamingStrategy(), new AlphabeticColumnNamingStrategy());\r
-\r
-    private ColumnNamingStrategies() {\r
-    }\r
-\r
-    public static ColumnNamingStrategy defaultStrategy() {\r
-        return DEFAULT_STRATEGY;\r
-    }\r
-\r
-    public static ColumnNamingStrategy customNames(List<String> columnNames) {\r
-        return new CustomColumnNamingStrategy(columnNames);\r
-    }\r
-\r
-    public static ColumnNamingStrategy customNames(String ... columnNames) {\r
-        return new CustomColumnNamingStrategy(columnNames);\r
-    }\r
-}\r
+/**
+ * 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.naming;
+
+import java.util.List;
+
+/**
+ * Constructors and common utilities for {@link ColumnNamingStrategy} objects.
+ */
+public class ColumnNamingStrategies {
+
+    private static final DelegatingIntrinsicSwitchColumnNamingStrategy DEFAULT_STRATEGY = new DelegatingIntrinsicSwitchColumnNamingStrategy(
+            new UniqueColumnNamingStrategy(), new AlphabeticColumnNamingStrategy());
+
+    private ColumnNamingStrategies() {
+    }
+
+    public static ColumnNamingStrategy defaultStrategy() {
+        return DEFAULT_STRATEGY;
+    }
+
+    public static ColumnNamingStrategy customNames(List<String> columnNames) {
+        return new CustomColumnNamingStrategy(columnNames);
+    }
+
+    public static ColumnNamingStrategy customNames(String ... columnNames) {
+        return new CustomColumnNamingStrategy(columnNames);
+    }
+}
index 6ccccbf..27e85ea 100644 (file)
@@ -1,31 +1,31 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import java.io.Serializable;\r
-\r
-/**\r
- * A strategy that defines how columns are logically named. Such strategies are\r
- * mostly used when a particular datastore is not itself intrinsically\r
- * specifying the column name.\r
- */\r
-public interface ColumnNamingStrategy extends Serializable {\r
-    \r
-    public ColumnNamingSession startColumnNamingSession();\r
-}\r
+/**
+ * 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.naming;
+
+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 extends Serializable {
+    
+    public ColumnNamingSession startColumnNamingSession();
+}
index e6cc706..39397d7 100644 (file)
@@ -1,62 +1,62 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import java.util.Arrays;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-/**\r
- * A {@link ColumnNamingStrategy} that allows the user to supply his own list of\r
- * custom column names.\r
- */\r
-public class CustomColumnNamingStrategy implements ColumnNamingStrategy {\r
-\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    private final List<String> columnNames;\r
-\r
-    public CustomColumnNamingStrategy(List<String> columnNames) {\r
-        this.columnNames = columnNames;\r
-    }\r
-\r
-    public CustomColumnNamingStrategy(String... columnNames) {\r
-        this(Arrays.asList(columnNames));\r
-    }\r
-\r
-    @Override\r
-    public ColumnNamingSession startColumnNamingSession() {\r
-        final Iterator<String> iterator = columnNames.iterator();\r
-        return new ColumnNamingSession() {\r
-\r
-            @Override\r
-            public String getNextColumnName(ColumnNamingContext ctx) {\r
-                if (iterator.hasNext()) {\r
-                    return iterator.next();\r
-                }\r
-                return null;\r
-            }\r
-\r
-            @Override\r
-            public void close() {\r
-            }\r
-        };\r
-    }\r
-\r
-}\r
+/**
+ * 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.naming;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A {@link ColumnNamingStrategy} that allows the user to supply his own list of
+ * custom column names.
+ */
+public class CustomColumnNamingStrategy implements ColumnNamingStrategy {
+
+    private static final long serialVersionUID = 1L;
+
+    private final List<String> columnNames;
+
+    public CustomColumnNamingStrategy(List<String> columnNames) {
+        this.columnNames = columnNames;
+    }
+
+    public CustomColumnNamingStrategy(String... columnNames) {
+        this(Arrays.asList(columnNames));
+    }
+
+    @Override
+    public ColumnNamingSession startColumnNamingSession() {
+        final Iterator<String> iterator = columnNames.iterator();
+        return new ColumnNamingSession() {
+
+            @Override
+            public String getNextColumnName(ColumnNamingContext ctx) {
+                if (iterator.hasNext()) {
+                    return iterator.next();
+                }
+                return null;
+            }
+
+            @Override
+            public void close() {
+            }
+        };
+    }
+
+}
index e18cb3a..35a0f39 100644 (file)
@@ -1,60 +1,60 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-/**\r
- * A {@link ColumnNamingStrategy} that switches between two other\r
- * {@link ColumnNamingStrategy} delegates depending on the availability of a\r
- * intrinsic column name.\r
- */\r
-public class DelegatingIntrinsicSwitchColumnNamingStrategy implements ColumnNamingStrategy {\r
-\r
-    private static final long serialVersionUID = 1L;\r
-    private final ColumnNamingStrategy intrinsicStrategy;\r
-    private final ColumnNamingStrategy nonIntrinsicStrategy;\r
-\r
-    public DelegatingIntrinsicSwitchColumnNamingStrategy(ColumnNamingStrategy intrinsicStrategy,\r
-            ColumnNamingStrategy nonIntrinsicStrategy) {\r
-        this.intrinsicStrategy = intrinsicStrategy;\r
-        this.nonIntrinsicStrategy = nonIntrinsicStrategy;\r
-    }\r
-\r
-    @Override\r
-    public ColumnNamingSession startColumnNamingSession() {\r
-        final ColumnNamingSession intrinsicSession = intrinsicStrategy.startColumnNamingSession();\r
-        final ColumnNamingSession nonIntrinsicSession = nonIntrinsicStrategy.startColumnNamingSession();\r
-        return new ColumnNamingSession() {\r
-\r
-            @Override\r
-            public String getNextColumnName(ColumnNamingContext ctx) {\r
-                final String intrinsicColumnName = ctx.getIntrinsicColumnName();\r
-                if (intrinsicColumnName == null || intrinsicColumnName.isEmpty()) {\r
-                    return nonIntrinsicSession.getNextColumnName(ctx);\r
-                }\r
-                return intrinsicSession.getNextColumnName(ctx);\r
-            }\r
-\r
-            @Override\r
-            public void close() {\r
-                intrinsicSession.close();\r
-                nonIntrinsicSession.close();\r
-            }\r
-        };\r
-    }\r
-}\r
+/**
+ * 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.naming;
+
+/**
+ * A {@link ColumnNamingStrategy} that switches between two other
+ * {@link ColumnNamingStrategy} delegates depending on the availability of a
+ * intrinsic column name.
+ */
+public class DelegatingIntrinsicSwitchColumnNamingStrategy implements ColumnNamingStrategy {
+
+    private static final long serialVersionUID = 1L;
+    private final ColumnNamingStrategy intrinsicStrategy;
+    private final ColumnNamingStrategy nonIntrinsicStrategy;
+
+    public DelegatingIntrinsicSwitchColumnNamingStrategy(ColumnNamingStrategy intrinsicStrategy,
+            ColumnNamingStrategy nonIntrinsicStrategy) {
+        this.intrinsicStrategy = intrinsicStrategy;
+        this.nonIntrinsicStrategy = nonIntrinsicStrategy;
+    }
+
+    @Override
+    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();
+            }
+        };
+    }
+}
index d4d21dd..9321998 100644 (file)
@@ -1,62 +1,62 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.schema.naming;\r
-\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-/**\r
- * A {@link ColumnNamingStrategy} that uses the intrinsic column names, but\r
- * ensures that all column names are unique. When duplicate names are\r
- * encountered a number will be appended yielding column names like "name",\r
- * "name_2", "name_3" etc.\r
- */\r
-public class UniqueColumnNamingStrategy implements ColumnNamingStrategy {\r
-\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    @Override\r
-    public ColumnNamingSession startColumnNamingSession() {\r
-        return new ColumnNamingSession() {\r
-\r
-            private final Set<String> names = new HashSet<>();\r
-\r
-            @Override\r
-            public String getNextColumnName(ColumnNamingContext ctx) {\r
-                final String intrinsicName = ctx.getIntrinsicColumnName();\r
-                boolean unique = names.add(intrinsicName);\r
-                if (unique) {\r
-                    return intrinsicName;\r
-                }\r
-\r
-                String newName = null;\r
-                for (int i = 2; !unique; i++) {\r
-                    newName = intrinsicName + '_' + i;\r
-                    unique = names.add(newName);\r
-                }\r
-                return newName;\r
-            }\r
-\r
-            @Override\r
-            public void close() {\r
-            }\r
-        };\r
-    }\r
-\r
-}\r
+/**
+ * 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.naming;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * A {@link ColumnNamingStrategy} that uses the intrinsic column names, but
+ * ensures that all column names are unique. When duplicate names are
+ * encountered a number will be appended yielding column names like "name",
+ * "name_2", "name_3" etc.
+ */
+public class UniqueColumnNamingStrategy implements ColumnNamingStrategy {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    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() {
+            }
+        };
+    }
+
+}
index fc9f6bd..1b8ea7c 100644 (file)
@@ -1,49 +1,49 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.insert;\r
-\r
-import static org.junit.Assert.assertEquals;\r
-\r
-import org.apache.metamodel.MetaModelException;\r
-import org.apache.metamodel.UpdateCallback;\r
-import org.apache.metamodel.schema.MutableColumn;\r
-import org.apache.metamodel.schema.MutableTable;\r
-import org.junit.Test;\r
-\r
-public class AbstractRowInsertionBuilderTest {\r
-\r
-    @Test\r
-    public void testToString() {\r
-        final MutableTable table = new MutableTable("tbl");\r
-        final MutableColumn col1 = new MutableColumn("col1").setTable(table);\r
-        final MutableColumn col2 = new MutableColumn("col2").setTable(table);\r
-        table.addColumn(col1).addColumn(col2);\r
-\r
-        final AbstractRowInsertionBuilder<UpdateCallback> builder = new AbstractRowInsertionBuilder<UpdateCallback>(\r
-                null, table) {\r
-            @Override\r
-            public void execute() throws MetaModelException {\r
-                throw new UnsupportedOperationException();\r
-            }\r
-        };\r
-\r
-        builder.value(col1, "value1").value(col2, "value2");\r
-        assertEquals("INSERT INTO tbl(col1,col2) VALUES (\"value1\",\"value2\")", builder.toString());\r
-    }\r
-}\r
+/**
+ * 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.insert;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.metamodel.MetaModelException;
+import org.apache.metamodel.UpdateCallback;
+import org.apache.metamodel.schema.MutableColumn;
+import org.apache.metamodel.schema.MutableTable;
+import org.junit.Test;
+
+public class AbstractRowInsertionBuilderTest {
+
+    @Test
+    public void testToString() {
+        final MutableTable table = new MutableTable("tbl");
+        final MutableColumn col1 = new MutableColumn("col1").setTable(table);
+        final MutableColumn col2 = new MutableColumn("col2").setTable(table);
+        table.addColumn(col1).addColumn(col2);
+
+        final AbstractRowInsertionBuilder<UpdateCallback> builder = new AbstractRowInsertionBuilder<UpdateCallback>(
+                null, table) {
+            @Override
+            public void execute() throws MetaModelException {
+                throw new UnsupportedOperationException();
+            }
+        };
+
+        builder.value(col1, "value1").value(col2, "value2");
+        assertEquals("INSERT INTO tbl(col1,col2) VALUES (\"value1\",\"value2\")", builder.toString());
+    }
+}
index 521955d..94e557c 100644 (file)
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.elasticsearch.rest;\r
-\r
-import java.util.List;\r
-\r
-import org.apache.metamodel.AbstractUpdateCallback;\r
-import org.apache.metamodel.MetaModelException;\r
-import org.apache.metamodel.UpdateCallback;\r
-import org.apache.metamodel.create.TableCreationBuilder;\r
-import org.apache.metamodel.delete.RowDeletionBuilder;\r
-import org.apache.metamodel.drop.TableDropBuilder;\r
-import org.apache.metamodel.insert.RowInsertionBuilder;\r
-import org.apache.metamodel.schema.Schema;\r
-import org.apache.metamodel.schema.Table;\r
-import org.elasticsearch.action.bulk.BulkRequest;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import io.searchbox.action.Action;\r
-import io.searchbox.action.BulkableAction;\r
-import io.searchbox.client.JestResult;\r
-import io.searchbox.core.Bulk;\r
-import io.searchbox.core.Bulk.Builder;\r
-import io.searchbox.core.BulkResult;\r
-import io.searchbox.core.BulkResult.BulkResultItem;\r
-import io.searchbox.indices.Refresh;\r
-\r
-/**\r
- * {@link UpdateCallback} implementation for\r
- * {@link ElasticSearchRestDataContext}.\r
- */\r
-final class JestElasticSearchUpdateCallback extends AbstractUpdateCallback {\r
-\r
-    private static final Logger logger = LoggerFactory.getLogger(JestElasticSearchUpdateCallback.class);\r
-\r
-    private static final int BULK_BUFFER_SIZE = 1000;\r
-\r
-    private Bulk.Builder bulkBuilder;\r
-    private int bulkActionCount = 0;\r
-    private final boolean isBatch;\r
-\r
-    public JestElasticSearchUpdateCallback(ElasticSearchRestDataContext dataContext, boolean isBatch) {\r
-        super(dataContext);\r
-        this.isBatch = isBatch;\r
-    }\r
-\r
-    private boolean isBatch() {\r
-        return isBatch;\r
-    }\r
-\r
-    @Override\r
-    public ElasticSearchRestDataContext getDataContext() {\r
-        return (ElasticSearchRestDataContext) super.getDataContext();\r
-    }\r
-\r
-    @Override\r
-    public TableCreationBuilder createTable(Schema schema, String name) throws IllegalArgumentException,\r
-            IllegalStateException {\r
-        return new JestElasticSearchCreateTableBuilder(this, schema, name);\r
-    }\r
-\r
-    @Override\r
-    public boolean isDropTableSupported() {\r
-        return true;\r
-    }\r
-\r
-    @Override\r
-    public TableDropBuilder dropTable(Table table) throws IllegalArgumentException, IllegalStateException,\r
-            UnsupportedOperationException {\r
-        return new JestElasticSearchDropTableBuilder(this, table);\r
-    }\r
-\r
-    @Override\r
-    public RowInsertionBuilder insertInto(Table table) throws IllegalArgumentException, IllegalStateException,\r
-            UnsupportedOperationException {\r
-        return new JestElasticSearchInsertBuilder(this, table);\r
-    }\r
-\r
-    @Override\r
-    public boolean isDeleteSupported() {\r
-        return true;\r
-    }\r
-\r
-    @Override\r
-    public RowDeletionBuilder deleteFrom(Table table) throws IllegalArgumentException, IllegalStateException,\r
-            UnsupportedOperationException {\r
-        return new JestElasticSearchDeleteBuilder(this, table);\r
-    }\r
-\r
-    public void onExecuteUpdateFinished() {\r
-        if (isBatch()) {\r
-            flushBulkActions();\r
-        }\r
-\r
-        final String indexName = getDataContext().getIndexName();\r
-        final Refresh refresh = new Refresh.Builder().addIndex(indexName).build();\r
-\r
-        JestClientExecutor.execute(getDataContext().getElasticSearchClient(), refresh, false);\r
-    }\r
-\r
-    private void flushBulkActions() {\r
-        if (bulkBuilder == null || bulkActionCount == 0) {\r
-            // nothing to flush\r
-            return;\r
-        }\r
-        final Bulk bulk = getBulkBuilder().build();\r
-        logger.info("Flushing {} actions to ElasticSearch index {}", bulkActionCount, getDataContext().getIndexName());\r
-        executeBlocking(bulk);\r
-\r
-        bulkActionCount = 0;\r
-        bulkBuilder = null;\r
-    }\r
-\r
-    public void execute(Action<?> action) {\r
-        if (isBatch() && action instanceof BulkableAction) {\r
-            final Bulk.Builder bulkBuilder = getBulkBuilder();\r
-            bulkBuilder.addAction((BulkableAction<?>) action);\r
-            bulkActionCount++;\r
-            if (bulkActionCount == BULK_BUFFER_SIZE) {\r
-                flushBulkActions();\r
-            }\r
-        } else {\r
-            executeBlocking(action);\r
-        }\r
-    }\r
-\r
-    private void executeBlocking(Action<?> action) {\r
-        final JestResult result = JestClientExecutor.execute(getDataContext().getElasticSearchClient(), action);\r
-        if (!result.isSucceeded()) {\r
-            if (result instanceof BulkResult) {\r
-                final List<BulkResultItem> failedItems = ((BulkResult) result).getFailedItems();\r
-                for (int i = 0; i < failedItems.size(); i++) {\r
-                    final BulkResultItem failedItem = failedItems.get(i);\r
-                    logger.error("Bulk failed with item no. {} of {}: id={} op={} status={} error={}", i+1, failedItems.size(), failedItem.id, failedItem.operation, failedItem.status, failedItem.error);\r
-                }\r
-            }\r
-            throw new MetaModelException(result.getResponseCode() + " - " + result.getErrorMessage());\r
-        }\r
-    }\r
-\r
-    private Builder getBulkBuilder() {\r
-        if (bulkBuilder == null) {\r
-            bulkBuilder = new Bulk.Builder();\r
-            bulkBuilder.defaultIndex(getDataContext().getIndexName());\r
-        }\r
-        return bulkBuilder;\r
-    }\r
-}\r
+/**
+ * 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.elasticsearch.rest;
+
+import java.util.List;
+
+import org.apache.metamodel.AbstractUpdateCallback;
+import org.apache.metamodel.MetaModelException;
+import org.apache.metamodel.UpdateCallback;
+import org.apache.metamodel.create.TableCreationBuilder;
+import org.apache.metamodel.delete.RowDeletionBuilder;
+import org.apache.metamodel.drop.TableDropBuilder;
+import org.apache.metamodel.insert.RowInsertionBuilder;
+import org.apache.metamodel.schema.Schema;
+import org.apache.metamodel.schema.Table;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.searchbox.action.Action;
+import io.searchbox.action.BulkableAction;
+import io.searchbox.client.JestResult;
+import io.searchbox.core.Bulk;
+import io.searchbox.core.Bulk.Builder;
+import io.searchbox.core.BulkResult;
+import io.searchbox.core.BulkResult.BulkResultItem;
+import io.searchbox.indices.Refresh;
+
+/**
+ * {@link UpdateCallback} implementation for
+ * {@link ElasticSearchRestDataContext}.
+ */
+final class JestElasticSearchUpdateCallback extends AbstractUpdateCallback {
+
+    private static final Logger logger = LoggerFactory.getLogger(JestElasticSearchUpdateCallback.class);
+
+    private static final int BULK_BUFFER_SIZE = 1000;
+
+    private Bulk.Builder bulkBuilder;
+    private int bulkActionCount = 0;
+    private final boolean isBatch;
+
+    public JestElasticSearchUpdateCallback(ElasticSearchRestDataContext dataContext, boolean isBatch) {
+        super(dataContext);
+        this.isBatch = isBatch;
+    }
+
+    private boolean isBatch() {
+        return isBatch;
+    }
+
+    @Override
+    public ElasticSearchRestDataContext getDataContext() {
+        return (ElasticSearchRestDataContext) super.getDataContext();
+    }
+
+    @Override
+    public TableCreationBuilder createTable(Schema schema, String name) throws IllegalArgumentException,
+            IllegalStateException {
+        return new JestElasticSearchCreateTableBuilder(this, schema, name);
+    }
+
+    @Override
+    public boolean isDropTableSupported() {
+        return true;
+    }
+
+    @Override
+    public TableDropBuilder dropTable(Table table) throws IllegalArgumentException, IllegalStateException,
+            UnsupportedOperationException {
+        return new JestElasticSearchDropTableBuilder(this, table);
+    }
+
+    @Override
+    public RowInsertionBuilder insertInto(Table table) throws IllegalArgumentException, IllegalStateException,
+            UnsupportedOperationException {
+        return new JestElasticSearchInsertBuilder(this, table);
+    }
+
+    @Override
+    public boolean isDeleteSupported() {
+        return true;
+    }
+
+    @Override
+    public RowDeletionBuilder deleteFrom(Table table) throws IllegalArgumentException, IllegalStateException,
+            UnsupportedOperationException {
+        return new JestElasticSearchDeleteBuilder(this, table);
+    }
+
+    public void onExecuteUpdateFinished() {
+        if (isBatch()) {
+            flushBulkActions();
+        }
+
+        final String indexName = getDataContext().getIndexName();
+        final Refresh refresh = new Refresh.Builder().addIndex(indexName).build();
+
+        JestClientExecutor.execute(getDataContext().getElasticSearchClient(), refresh, false);
+    }
+
+    private void flushBulkActions() {
+        if (bulkBuilder == null || bulkActionCount == 0) {
+            // nothing to flush
+            return;
+        }
+        final Bulk bulk = getBulkBuilder().build();
+        logger.info("Flushing {} actions to ElasticSearch index {}", bulkActionCount, getDataContext().getIndexName());
+        executeBlocking(bulk);
+
+        bulkActionCount = 0;
+        bulkBuilder = null;
+    }
+
+    public void execute(Action<?> action) {
+        if (isBatch() && action instanceof BulkableAction) {
+            final Bulk.Builder bulkBuilder = getBulkBuilder();
+            bulkBuilder.addAction((BulkableAction<?>) action);
+            bulkActionCount++;
+            if (bulkActionCount == BULK_BUFFER_SIZE) {
+                flushBulkActions();
+            }
+        } else {
+            executeBlocking(action);
+        }
+    }
+
+    private void executeBlocking(Action<?> action) {
+        final JestResult result = JestClientExecutor.execute(getDataContext().getElasticSearchClient(), action);
+        if (!result.isSucceeded()) {
+            if (result instanceof BulkResult) {
+                final List<BulkResultItem> failedItems = ((BulkResult) result).getFailedItems();
+                for (int i = 0; i < failedItems.size(); i++) {
+                    final BulkResultItem failedItem = failedItems.get(i);
+                    logger.error("Bulk failed with item no. {} of {}: id={} op={} status={} error={}", i+1, failedItems.size(), failedItem.id, failedItem.operation, failedItem.status, failedItem.error);
+                }
+            }
+            throw new MetaModelException(result.getResponseCode() + " - " + result.getErrorMessage());
+        }
+    }
+
+    private Builder getBulkBuilder() {
+        if (bulkBuilder == null) {
+            bulkBuilder = new Bulk.Builder();
+            bulkBuilder.defaultIndex(getDataContext().getIndexName());
+        }
+        return bulkBuilder;
+    }
+}
index dedfbcd..5f53ff5 100644 (file)
@@ -1,45 +1,45 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.fixedwidth;\r
-\r
-import org.apache.metamodel.util.HasName;\r
-\r
-/**\r
- * Represents the specification of a single column for a\r
- * {@link FixedWidthDataContext}.\r
- */\r
-final class FixedWidthColumnSpec implements HasName {\r
-\r
-    private final String name;\r
-    private final int width;\r
-\r
-    public FixedWidthColumnSpec(String name, int width) {\r
-        this.name = name;\r
-        this.width = width;\r
-    }\r
-\r
-    @Override\r
-    public String getName() {\r
-        return name;\r
-    }\r
-\r
-    public int getWidth() {\r
-        return width;\r
-    }\r
-}\r
+/**
+ * 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.fixedwidth;
+
+import org.apache.metamodel.util.HasName;
+
+/**
+ * Represents the specification of a single column for a
+ * {@link FixedWidthDataContext}.
+ */
+final class FixedWidthColumnSpec implements HasName {
+
+    private final String name;
+    private final int width;
+
+    public FixedWidthColumnSpec(String name, int width) {
+        this.name = name;
+        this.width = width;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    public int getWidth() {
+        return width;
+    }
+}
index c53ff16..79aac36 100644 (file)
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.fixedwidth;\r
-\r
-import java.io.Serializable;\r
-import java.util.Arrays;\r
-import java.util.List;\r
-\r
-import org.apache.metamodel.data.DataSet;\r
-import org.apache.metamodel.schema.naming.ColumnNamingStrategies;\r
-import org.apache.metamodel.schema.naming.ColumnNamingStrategy;\r
-import org.apache.metamodel.util.BaseObject;\r
-import org.apache.metamodel.util.CollectionUtils;\r
-import org.apache.metamodel.util.FileHelper;\r
-import org.apache.metamodel.util.HasNameMapper;\r
-\r
-/**\r
- * Configuration of metadata about a fixed width values data context.\r
- */\r
-public class FixedWidthConfiguration extends BaseObject implements Serializable {\r
-\r
-    private static final long serialVersionUID = 1L;\r
-\r
-    public static final int NO_COLUMN_NAME_LINE = 0;\r
-    public static final int DEFAULT_COLUMN_NAME_LINE = 1;\r
-\r
-    private final String encoding;\r
-    private final int fixedValueWidth;\r
-    private final int[] valueWidths;\r
-    private final int columnNameLineNumber;\r
-    private final boolean failOnInconsistentLineWidth;\r
-    private final ColumnNamingStrategy columnNamingStrategy;\r
-\r
-    public FixedWidthConfiguration(int fixedValueWidth) {\r
-        this(DEFAULT_COLUMN_NAME_LINE, FileHelper.DEFAULT_ENCODING, fixedValueWidth);\r
-    }\r
-\r
-    public FixedWidthConfiguration(int[] valueWidth) {\r
-        this(DEFAULT_COLUMN_NAME_LINE, FileHelper.DEFAULT_ENCODING, valueWidth, false);\r
-    }\r
-\r
-    public FixedWidthConfiguration(int columnNameLineNumber, String encoding, int fixedValueWidth) {\r
-        this(columnNameLineNumber, encoding, fixedValueWidth, false);\r
-    }\r
-\r
-    public FixedWidthConfiguration(int columnNameLineNumber, String encoding, int fixedValueWidth,\r
-            boolean failOnInconsistentLineWidth) {\r
-        this.encoding = encoding;\r
-        this.fixedValueWidth = fixedValueWidth;\r
-        this.columnNameLineNumber = columnNameLineNumber;\r
-        this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;\r
-        this.columnNamingStrategy = null;\r
-        this.valueWidths = new int[0];\r
-    }\r
-\r
-    public FixedWidthConfiguration(int columnNameLineNumber, String encoding, int[] valueWidths, \r
-            boolean failOnInconsistentLineWidth) {\r
-        this(columnNameLineNumber, null, encoding, valueWidths, failOnInconsistentLineWidth);\r
-    }\r
-\r
-    public FixedWidthConfiguration(int columnNameLineNumber, ColumnNamingStrategy columnNamingStrategy, String encoding,\r
-            int[] valueWidths, boolean failOnInconsistentLineWidth) {\r
-        this.encoding = encoding;\r
-        this.fixedValueWidth = -1;\r
-        this.columnNameLineNumber = columnNameLineNumber;\r
-        this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;\r
-        this.columnNamingStrategy = columnNamingStrategy;\r
-        this.valueWidths = valueWidths;\r
-    }\r
-\r
-    public FixedWidthConfiguration(String encoding, List<FixedWidthColumnSpec> columnSpecs) {\r
-        this(encoding, columnSpecs, false);\r
-    }\r
-\r
-    public FixedWidthConfiguration(String encoding, List<FixedWidthColumnSpec> columnSpecs,\r
-            boolean failOnInconsistentLineWidth) {\r
-        this.encoding = encoding;\r
-        this.fixedValueWidth = -1;\r
-        this.columnNameLineNumber = NO_COLUMN_NAME_LINE;\r
-        this.columnNamingStrategy = ColumnNamingStrategies.customNames(CollectionUtils.map(columnSpecs,\r
-                new HasNameMapper()));\r
-        this.valueWidths = new int[columnSpecs.size()];\r
-        for (int i = 0; i < valueWidths.length; i++) {\r
-            valueWidths[i] = columnSpecs.get(i).getWidth();\r
-        }\r
-        this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;\r
-    }\r
-\r
-    /**\r
-     * The line number (1 based) from which to get the names of the columns.\r
-     *\r
-     * @return an int representing the line number of the column headers/names.\r
-     */\r
-    public int getColumnNameLineNumber() {\r
-        return columnNameLineNumber;\r
-    }\r
-\r
-    /**\r
-     * Gets a {@link ColumnNamingStrategy} to use if needed.\r
-     * @return column naming strategy\r
-     */\r
-    public ColumnNamingStrategy getColumnNamingStrategy() {\r
-        if (columnNamingStrategy == null) {\r
-            return ColumnNamingStrategies.defaultStrategy();\r
-        }\r
-        return columnNamingStrategy;\r
-    }\r
-\r
-    /**\r
-     * Gets the file encoding to use for reading the file.\r
-     *\r
-     * @return the text encoding to use for reading the file.\r
-     */\r
-    public String getEncoding() {\r
-        return encoding;\r
-    }\r
-\r
-    /**\r
-     * Gets the width of each value within the fixed width value file.\r
-     *\r
-     * @return the fixed width to use when parsing the file.\r
-     */\r
-    public int getFixedValueWidth() {\r
-        return fixedValueWidth;\r
-    }\r
-\r
-    public int[] getValueWidths() {\r
-        return valueWidths;\r
-    }\r
-\r
-    /**\r
-     * Determines if the {@link DataSet#next()} should throw an exception in\r
-     * case of inconsistent line width in the fixed width value file.\r
-     *\r
-     * @return a boolean indicating whether or not to fail on inconsistent line\r
-     *         widths.\r
-     */\r
-    public boolean isFailOnInconsistentLineWidth() {\r
-        return failOnInconsistentLineWidth;\r
-    }\r
-\r
-    @Override\r
-    protected void decorateIdentity(List<Object> identifiers) {\r
-        identifiers.add(columnNameLineNumber);\r
-        identifiers.add(encoding);\r
-        identifiers.add(fixedValueWidth);\r
-        identifiers.add(valueWidths);\r
-        identifiers.add(failOnInconsistentLineWidth);\r
-    }\r
-\r
-    @Override\r
-    public String toString() {\r
-        return "FixedWidthConfiguration[encoding=" + encoding\r
-                + ", fixedValueWidth=" + fixedValueWidth + ", valueWidths="\r
-                + Arrays.toString(valueWidths) + ", columnNameLineNumber="\r
-                + columnNameLineNumber + ", failOnInconsistentLineWidth="\r
-                + failOnInconsistentLineWidth + "]";\r
-    }\r
-\r
-    public boolean isConstantValueWidth() {\r
-        return fixedValueWidth != -1;\r
-    }\r
-\r
-    public int getValueWidth(int columnIndex) {\r
-        if (isConstantValueWidth()) {\r
-            return fixedValueWidth;\r
-        }\r
-        return valueWidths[columnIndex];\r
-    }\r
-}\r
+/**
+ * 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.fixedwidth;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.metamodel.data.DataSet;
+import org.apache.metamodel.schema.naming.ColumnNamingStrategies;
+import org.apache.metamodel.schema.naming.ColumnNamingStrategy;
+import org.apache.metamodel.util.BaseObject;
+import org.apache.metamodel.util.CollectionUtils;
+import org.apache.metamodel.util.FileHelper;
+import org.apache.metamodel.util.HasNameMapper;
+
+/**
+ * Configuration of metadata about a fixed width values data context.
+ */
+public class FixedWidthConfiguration extends BaseObject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    public static final int NO_COLUMN_NAME_LINE = 0;
+    public static final int DEFAULT_COLUMN_NAME_LINE = 1;
+
+    private final String encoding;
+    private final int fixedValueWidth;
+    private final int[] valueWidths;
+    private final int columnNameLineNumber;
+    private final boolean failOnInconsistentLineWidth;
+    private final ColumnNamingStrategy columnNamingStrategy;
+
+    public FixedWidthConfiguration(int fixedValueWidth) {
+        this(DEFAULT_COLUMN_NAME_LINE, FileHelper.DEFAULT_ENCODING, fixedValueWidth);
+    }
+
+    public FixedWidthConfiguration(int[] valueWidth) {
+        this(DEFAULT_COLUMN_NAME_LINE, FileHelper.DEFAULT_ENCODING, valueWidth, 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[] 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;
+    }
+
+    public FixedWidthConfiguration(String encoding, List<FixedWidthColumnSpec> columnSpecs) {
+        this(encoding, columnSpecs, false);
+    }
+
+    public FixedWidthConfiguration(String encoding, List<FixedWidthColumnSpec> columnSpecs,
+            boolean failOnInconsistentLineWidth) {
+        this.encoding = encoding;
+        this.fixedValueWidth = -1;
+        this.columnNameLineNumber = NO_COLUMN_NAME_LINE;
+        this.columnNamingStrategy = ColumnNamingStrategies.customNames(CollectionUtils.map(columnSpecs,
+                new HasNameMapper()));
+        this.valueWidths = new int[columnSpecs.size()];
+        for (int i = 0; i < valueWidths.length; i++) {
+            valueWidths[i] = columnSpecs.get(i).getWidth();
+        }
+        this.failOnInconsistentLineWidth = failOnInconsistentLineWidth;
+    }
+
+    /**
+     * The line number (1 based) from which to get the names of the columns.
+     *
+     * @return an int representing the line number of the column headers/names.
+     */
+    public int getColumnNameLineNumber() {
+        return columnNameLineNumber;
+    }
+
+    /**
+     * Gets a {@link ColumnNamingStrategy} to use if needed.
+     * @return column naming strategy
+     */
+    public ColumnNamingStrategy getColumnNamingStrategy() {
+        if (columnNamingStrategy == null) {
+            return ColumnNamingStrategies.defaultStrategy();
+        }
+        return columnNamingStrategy;
+    }
+
+    /**
+     * Gets the file encoding to use for reading the file.
+     *
+     * @return the text encoding to use for reading the file.
+     */
+    public String getEncoding() {
+        return encoding;
+    }
+
+    /**
+     * Gets the width of each value within the fixed width value file.
+     *
+     * @return the fixed width to use when parsing the file.
+     */
+    public int getFixedValueWidth() {
+        return fixedValueWidth;
+    }
+
+    public int[] getValueWidths() {
+        return valueWidths;
+    }
+
+    /**
+     * Determines if the {@link DataSet#next()} should throw an exception in
+     * case of inconsistent line width in the fixed width value file.
+     *
+     * @return a boolean indicating whether or not to fail on inconsistent line
+     *         widths.
+     */
+    public boolean isFailOnInconsistentLineWidth() {
+        return failOnInconsistentLineWidth;
+    }
+
+    @Override
+    protected void decorateIdentity(List<Object> identifiers) {
+        identifiers.add(columnNameLineNumber);
+        identifiers.add(encoding);
+        identifiers.add(fixedValueWidth);
+        identifiers.add(valueWidths);
+        identifiers.add(failOnInconsistentLineWidth);
+    }
+
+    @Override
+    public String toString() {
+        return "FixedWidthConfiguration[encoding=" + encoding
+                + ", fixedValueWidth=" + fixedValueWidth + ", valueWidths="
+                + Arrays.toString(valueWidths) + ", columnNameLineNumber="
+                + columnNameLineNumber + ", failOnInconsistentLineWidth="
+                + failOnInconsistentLineWidth + "]";
+    }
+
+    public boolean isConstantValueWidth() {
+        return fixedValueWidth != -1;
+    }
+
+    public int getValueWidth(int columnIndex) {
+        if (isConstantValueWidth()) {
+            return fixedValueWidth;
+        }
+        return valueWidths[columnIndex];
+    }
+}
index 264287f..71a2640 100644 (file)
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.fixedwidth;\r
-\r
-import java.io.BufferedReader;\r
-import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Map.Entry;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-import org.apache.metamodel.csv.CsvConfiguration;\r
-import org.apache.metamodel.csv.CsvDataContext;\r
-import org.apache.metamodel.data.DataSet;\r
-import org.apache.metamodel.schema.Table;\r
-import org.apache.metamodel.util.Action;\r
-import org.apache.metamodel.util.Resource;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-/**\r
- * Object capable of reading fixed width metadata from external sources and\r
- * thereby producing an appropriate {@link FixedWidthConfiguration} to use with\r
- * a {@link FixedWidthDataContext}.\r
- */\r
-public class FixedWidthConfigurationReader {\r
-\r
-    private static final Logger logger = LoggerFactory.getLogger(FixedWidthConfigurationReader.class);\r
-\r
-    // example: @1 COL1 $char1.\r
-    private final Pattern PATTERN_SAS_INPUT_LINE = Pattern.compile("\\@(\\d+) (.+) .*?(\\d+)\\.");\r
-\r
-    // example: COL1 "Record type"\r
-    private final Pattern PATTERN_SAS_LABEL_LINE = Pattern.compile("(.+) \\\"(.+)\\\"");\r
-\r
-    /**\r
-     * Reads a {@link FixedWidthConfiguration} based on a SAS 'format file',\r
-     * <a href=\r
-     * "http://support.sas.com/documentation/cdl/en/etlug/67323/HTML/default/viewer.htm#p0h03yig7fp1qan1arghp3lwjqi6.htm">\r
-     * described here</a>.\r
-     * \r
-     * @param encoding the format file encoding\r
-     * @param resource the format file resource \r
-     * @param failOnInconsistentLineWidth flag specifying whether inconsistent line should stop processing or not\r
-     * @return a {@link FixedWidthConfiguration} object to use\r
-     */\r
-    public FixedWidthConfiguration readFromSasFormatFile(String encoding, Resource resource,\r
-            boolean failOnInconsistentLineWidth) {\r
-        final List<FixedWidthColumnSpec> columnSpecs = new ArrayList<>();\r
-\r
-        final CsvDataContext dataContext = new CsvDataContext(resource, new CsvConfiguration());\r
-        final Table table = dataContext.getDefaultSchema().getTable(0);\r
-        try (final DataSet dataSet = dataContext.query().from(table).select("Name", "BeginPosition", "EndPosition")\r
-                .execute()) {\r
-            while (dataSet.next()) {\r
-                final String name = (String) dataSet.getRow().getValue(0);\r
-                final int beginPosition = Integer.parseInt((String) dataSet.getRow().getValue(1));\r
-                final int endPosition = Integer.parseInt((String) dataSet.getRow().getValue(2));\r
-                final int width = 1 + endPosition - beginPosition;\r
-                columnSpecs.add(new FixedWidthColumnSpec(name, width));\r
-            }\r
-        }\r
-\r
-        return new FixedWidthConfiguration(encoding, columnSpecs, failOnInconsistentLineWidth);\r
-    }\r
-\r
-    /**\r
-     * Reads a {@link FixedWidthConfiguration} based on a SAS INPUT declaration.\r
-     * The reader method also optionally will look for a LABEL definition for column naming.\r
-     * \r
-     * @param encoding the format file encoding\r
-     * @param resource the format file resource\r
-     * @param failOnInconsistentLineWidth flag specifying whether inconsistent line should stop processing or not\r
-     * @return a {@link FixedWidthConfiguration} object to use\r
-     */\r
-    public FixedWidthConfiguration readFromSasInputDefinition(String encoding, Resource resource,\r
-            boolean failOnInconsistentLineWidth) {\r
-\r
-        final Map<String, Integer> inputWidthDeclarations = new LinkedHashMap<>();\r
-        final Map<String, String> labelDeclarations = new HashMap<>();\r
-\r
-        resource.read(new Action<InputStream>() {\r
-\r
-            private boolean inInputSection = false;\r
-            private boolean inLabelSection = false;\r
-\r
-            @Override\r
-            public void run(InputStream in) throws Exception {\r
-                try (final BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {\r
-                    for (String line = reader.readLine(); line != null; line = reader.readLine()) {\r
-                        processLine(line);\r
-                    }\r
-                }\r
-            }\r
-\r
-            private void processLine(String line) {\r
-                line = line.trim();\r
-                if (line.isEmpty()) {\r
-                    return;\r
-                }\r
-                if (";".equals(line)) {\r
-                    inInputSection = false;\r
-                    inLabelSection = false;\r
-                    return;\r
-                } else if ("INPUT".equals(line)) {\r
-                    inInputSection = true;\r
-                    return;\r
-                } else if ("LABEL".equals(line)) {\r
-                    inLabelSection = true;\r
-                    return;\r
-                }\r
-\r
-                if (inInputSection) {\r
-                    final Matcher matcher = PATTERN_SAS_INPUT_LINE.matcher(line);\r
-                    if (matcher.matches()) {\r
-                        final String positionSpec = matcher.group(1);\r
-                        final String nameSpec = matcher.group(2);\r
-                        final int width = Integer.parseInt(matcher.group(3));\r
-                        logger.debug("Parsed INPUT line \"{}\": position={}, name={}, width={}", line, positionSpec,\r
-                                nameSpec, width);\r
-                        inputWidthDeclarations.put(nameSpec, width);\r
-                    } else {\r
-                        logger.debug("Failed to parse/recognize INPUT line \"{}\"", line);\r
-                    }\r
-                } else if (inLabelSection) {\r
-                    final Matcher matcher = PATTERN_SAS_LABEL_LINE.matcher(line);\r
-                    if (matcher.matches()) {\r
-                        final String nameSpec = matcher.group(1);\r
-                        final String labelSpec = matcher.group(2);\r
-                        logger.debug("Parsed LABEL line \"{}\": name={}, label={}", line, nameSpec, labelSpec);\r
-                        labelDeclarations.put(nameSpec, labelSpec);\r
-                    } else {\r
-                        logger.debug("Failed to parse/recognize LABEL line \"{}\"", line);\r
-                    }\r
-                }\r
-\r
-                if (line.endsWith(";")) {\r
-                    inInputSection = false;\r
-                    inLabelSection = false;\r
-                }\r
-            }\r
-        });\r
-\r
-        final List<FixedWidthColumnSpec> columnSpecs = new ArrayList<>();\r
-        for (Entry<String, Integer> entry : inputWidthDeclarations.entrySet()) {\r
-            final String columnKey = entry.getKey();\r
-            final Integer columnWidth = entry.getValue();\r
-            final String columnLabel = labelDeclarations.get(columnKey);\r
-            final String columnName = columnLabel == null ? columnKey : columnLabel;\r
-            columnSpecs.add(new FixedWidthColumnSpec(columnName, columnWidth));\r
-        }\r
-\r
-        return new FixedWidthConfiguration(encoding, columnSpecs, failOnInconsistentLineWidth);\r
-    }\r
-}\r
+/**
+ * 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.fixedwidth;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.metamodel.csv.CsvConfiguration;
+import org.apache.metamodel.csv.CsvDataContext;
+import org.apache.metamodel.data.DataSet;
+import org.apache.metamodel.schema.Table;
+import org.apache.metamodel.util.Action;
+import org.apache.metamodel.util.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Object capable of reading fixed width metadata from external sources and
+ * thereby producing an appropriate {@link FixedWidthConfiguration} to use with
+ * a {@link FixedWidthDataContext}.
+ */
+public class FixedWidthConfigurationReader {
+
+    private static final Logger logger = LoggerFactory.getLogger(FixedWidthConfigurationReader.class);
+
+    // example: @1 COL1 $char1.
+    private final Pattern PATTERN_SAS_INPUT_LINE = Pattern.compile("\\@(\\d+) (.+) .*?(\\d+)\\.");
+
+    // example: COL1 "Record type"
+    private final Pattern PATTERN_SAS_LABEL_LINE = Pattern.compile("(.+) \\\"(.+)\\\"");
+
+    /**
+     * Reads a {@link FixedWidthConfiguration} based on a SAS 'format file',
+     * <a href=
+     * "http://support.sas.com/documentation/cdl/en/etlug/67323/HTML/default/viewer.htm#p0h03yig7fp1qan1arghp3lwjqi6.htm">
+     * described here</a>.
+     * 
+     * @param encoding the format file encoding
+     * @param resource the format file resource 
+     * @param failOnInconsistentLineWidth flag specifying whether inconsistent line should stop processing or not
+     * @return a {@link FixedWidthConfiguration} object to use
+     */
+    public FixedWidthConfiguration readFromSasFormatFile(String encoding, Resource resource,
+            boolean failOnInconsistentLineWidth) {
+        final List<FixedWidthColumnSpec> columnSpecs = new ArrayList<>();
+
+        final CsvDataContext dataContext = new CsvDataContext(resource, new CsvConfiguration());
+        final Table table = dataContext.getDefaultSchema().getTable(0);
+        try (final DataSet dataSet = dataContext.query().from(table).select("Name", "BeginPosition", "EndPosition")
+                .execute()) {
+            while (dataSet.next()) {
+                final String name = (String) dataSet.getRow().getValue(0);
+                final int beginPosition = Integer.parseInt((String) dataSet.getRow().getValue(1));
+                final int endPosition = Integer.parseInt((String) dataSet.getRow().getValue(2));
+                final int width = 1 + endPosition - beginPosition;
+                columnSpecs.add(new FixedWidthColumnSpec(name, width));
+            }
+        }
+
+        return new FixedWidthConfiguration(encoding, columnSpecs, failOnInconsistentLineWidth);
+    }
+
+    /**
+     * Reads a {@link FixedWidthConfiguration} based on a SAS INPUT declaration.
+     * The reader method also optionally will look for a LABEL definition for column naming.
+     * 
+     * @param encoding the format file encoding
+     * @param resource the format file resource
+     * @param failOnInconsistentLineWidth flag specifying whether inconsistent line should stop processing or not
+     * @return a {@link FixedWidthConfiguration} object to use
+     */
+    public FixedWidthConfiguration readFromSasInputDefinition(String encoding, Resource resource,
+            boolean failOnInconsistentLineWidth) {
+
+        final Map<String, Integer> inputWidthDeclarations = new LinkedHashMap<>();
+        final Map<String, String> labelDeclarations = new HashMap<>();
+
+        resource.read(new Action<InputStream>() {
+
+            private boolean inInputSection = false;
+            private boolean inLabelSection = false;
+
+            @Override
+            public void run(InputStream in) throws Exception {
+                try (final BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
+                    for (String line = reader.readLine(); line != null; line = reader.readLine()) {
+                        processLine(line);
+                    }
+                }
+            }
+
+            private void processLine(String line) {
+                line = line.trim();
+                if (line.isEmpty()) {
+                    return;
+                }
+                if (";".equals(line)) {
+                    inInputSection = false;
+                    inLabelSection = false;
+                    return;
+                } else if ("INPUT".equals(line)) {
+                    inInputSection = true;
+                    return;
+                } else if ("LABEL".equals(line)) {
+                    inLabelSection = true;
+                    return;
+                }
+
+                if (inInputSection) {
+                    final Matcher matcher = PATTERN_SAS_INPUT_LINE.matcher(line);
+                    if (matcher.matches()) {
+                        final String positionSpec = matcher.group(1);
+                        final String nameSpec = matcher.group(2);
+                        final int width = Integer.parseInt(matcher.group(3));
+                        logger.debug("Parsed INPUT line \"{}\": position={}, name={}, width={}", line, positionSpec,
+                                nameSpec, width);
+                        inputWidthDeclarations.put(nameSpec, width);
+                    } else {
+                        logger.debug("Failed to parse/recognize INPUT line \"{}\"", line);
+                    }
+                } else if (inLabelSection) {
+                    final Matcher matcher = PATTERN_SAS_LABEL_LINE.matcher(line);
+                    if (matcher.matches()) {
+                        final String nameSpec = matcher.group(1);
+                        final String labelSpec = matcher.group(2);
+                        logger.debug("Parsed LABEL line \"{}\": name={}, label={}", line, nameSpec, labelSpec);
+                        labelDeclarations.put(nameSpec, labelSpec);
+                    } else {
+                        logger.debug("Failed to parse/recognize LABEL line \"{}\"", line);
+                    }
+                }
+
+                if (line.endsWith(";")) {
+                    inInputSection = false;
+                    inLabelSection = false;
+                }
+            }
+        });
+
+        final List<FixedWidthColumnSpec> columnSpecs = new ArrayList<>();
+        for (Entry<String, Integer> entry : inputWidthDeclarations.entrySet()) {
+            final String columnKey = entry.getKey();
+            final Integer columnWidth = entry.getValue();
+            final String columnLabel = labelDeclarations.get(columnKey);
+            final String columnName = columnLabel == null ? columnKey : columnLabel;
+            columnSpecs.add(new FixedWidthColumnSpec(columnName, columnWidth));
+        }
+
+        return new FixedWidthConfiguration(encoding, columnSpecs, failOnInconsistentLineWidth);
+    }
+}
index eb57233..c34b294 100644 (file)
@@ -1,89 +1,89 @@
-/**\r
- * Licensed to the Apache Software Foundation (ASF) under one\r
- * or more contributor license agreements.  See the NOTICE file\r
- * distributed with this work for additional information\r
- * regarding copyright ownership.  The ASF licenses this file\r
- * to you under the Apache License, Version 2.0 (the\r
- * "License"); you may not use this file except in compliance\r
- * with the License.  You may obtain a copy of the License at\r
- *\r
- *   http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing,\r
- * software distributed under the License is distributed on an\r
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- * KIND, either express or implied.  See the License for the\r
- * specific language governing permissions and limitations\r
- * under the License.\r
- */\r
-package org.apache.metamodel.fixedwidth;\r
-\r
-import static org.junit.Assert.*;\r
-\r
-import java.util.Arrays;\r
-\r
-import org.apache.metamodel.DataContext;\r
-import org.apache.metamodel.data.DataSet;\r
-import org.apache.metamodel.schema.Table;\r
-import org.apache.metamodel.util.FileResource;\r
-import org.apache.metamodel.util.Resource;\r
-import org.junit.Test;\r
-\r
-public class FixedWidthConfigurationReaderTest {\r
-\r
-    private final FileResource dataResource = new FileResource("src/test/resources/metadata_spec1/data.txt");\r
-\r
-    @Test\r
-    public void testReadConfigurationFromSasFormatFile() throws Exception {\r
-        final FixedWidthConfigurationReader reader = new FixedWidthConfigurationReader();\r
-        final Resource resource = new FileResource("src/test/resources/metadata_spec1/sas-formatfile-metadata.txt");\r
-        assertTrue(resource.isExists());\r
-\r
-        final FixedWidthConfiguration configuration = reader.readFromSasFormatFile("UTF8", resource, false);\r
-        assertEquals("[1, 20, 2]", Arrays.toString(configuration.getValueWidths()));\r
-\r
-        final FixedWidthDataContext dataContext = new FixedWidthDataContext(dataResource, configuration);\r
-\r
-        performAssertionsOnSpec1(dataContext);\r
-    }\r
-    \r
-    @Test\r
-    public void testReadConfigurationFromSasInputMetadata() throws Exception {\r
-        final FixedWidthConfigurationReader reader = new FixedWidthConfigurationReader();\r
-        final Resource resource = new FileResource("src/test/resources/metadata_spec1/sas-input-metadata.txt");\r
-        assertTrue(resource.isExists());\r
-\r
-        final FixedWidthConfiguration configuration = reader.readFromSasInputDefinition("UTF8", resource, false);\r
-        assertEquals("[1, 20, 2]", Arrays.toString(configuration.getValueWidths()));\r
-\r
-        final FixedWidthDataContext dataContext = new FixedWidthDataContext(dataResource, configuration);\r
-\r
-        performAssertionsOnSpec1(dataContext);\r
-    }\r
-\r
-    /**\r
-     * Shared assertions section once the 'metadata_spec1' {@link DataContext}\r
-     * has been loaded.\r
-     * \r
-     * @param dataContext\r
-     */\r
-    private void performAssertionsOnSpec1(FixedWidthDataContext dataContext) {\r
-        final Table table = dataContext.getDefaultSchema().getTable(0);\r
-        final String[] columnNames = table.getColumnNames();\r
-        assertEquals("[Record type, Description, Initials]", Arrays.toString(columnNames));\r
-\r
-        try (final DataSet dataSet = dataContext.query().from(table).selectAll().execute()) {\r
-            assertTrue(dataSet.next());\r
-            assertEquals("Row[values=[P, Kasper Sorensen, KS]]", dataSet.getRow().toString());\r
-            assertTrue(dataSet.next());\r
-            assertEquals("Row[values=[C, Human Inference, HI]]", dataSet.getRow().toString());\r
-            assertTrue(dataSet.next());\r
-            assertEquals("Row[values=[P, Ankit Kumar, AK]]", dataSet.getRow().toString());\r
-            assertTrue(dataSet.next());\r
-            assertEquals("Row[values=[C, Stratio, S]]", dataSet.getRow().toString());\r
-            assertTrue(dataSet.next());\r
-            assertEquals("Row[values=[U, Unknown, ]]", dataSet.getRow().toString());\r
-            assertFalse(dataSet.next());\r
-        }\r
-    }\r
-}\r
+/**
+ * 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.fixedwidth;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+
+import org.apache.metamodel.DataContext;
+import org.apache.metamodel.data.DataSet;
+import org.apache.metamodel.schema.Table;
+import org.apache.metamodel.util.FileResource;
+import org.apache.metamodel.util.Resource;
+import org.junit.Test;
+
+public class FixedWidthConfigurationReaderTest {
+
+    private final FileResource dataResource = new FileResource("src/test/resources/metadata_spec1/data.txt");
+
+    @Test
+    public void testReadConfigurationFromSasFormatFile() throws Exception {
+        final FixedWidthConfigurationReader reader = new FixedWidthConfigurationReader();
+        final Resource resource = new FileResource("src/test/resources/metadata_spec1/sas-formatfile-metadata.txt");
+        assertTrue(resource.isExists());
+
+        final FixedWidthConfiguration configuration = reader.readFromSasFormatFile("UTF8", resource, false);
+        assertEquals("[1, 20, 2]", Arrays.toString(configuration.getValueWidths()));
+
+        final FixedWidthDataContext dataContext = new FixedWidthDataContext(dataResource, configuration);
+
+        performAssertionsOnSpec1(dataContext);
+    }
+    
+    @Test
+    public void testReadConfigurationFromSasInputMetadata() throws Exception {
+        final FixedWidthConfigurationReader reader = new FixedWidthConfigurationReader();
+        final Resource resource = new FileResource("src/test/resources/metadata_spec1/sas-input-metadata.txt");
+        assertTrue(resource.isExists());
+
+        final FixedWidthConfiguration configuration = reader.readFromSasInputDefinition("UTF8", resource, false);
+        assertEquals("[1, 20, 2]", Arrays.toString(configuration.getValueWidths()));
+
+        final FixedWidthDataContext dataContext = new FixedWidthDataContext(dataResource, configuration);
+
+        performAssertionsOnSpec1(dataContext);
+    }
+
+    /**
+     * Shared assertions section once the 'metadata_spec1' {@link DataContext}
+     * has been loaded.
+     * 
+     * @param dataContext
+     */
+    private void performAssertionsOnSpec1(FixedWidthDataContext dataContext) {
+        final Table table = dataContext.getDefaultSchema().getTable(0);
+        final String[] columnNames = table.getColumnNames();
+        assertEquals("[Record type, Description, Initials]", Arrays.toString(columnNames));
+
+        try (final DataSet dataSet = dataContext.query().from(table).selectAll().execute()) {
+            assertTrue(dataSet.next());
+            assertEquals("Row[values=[P, Kasper Sorensen, KS]]", dataSet.getRow().toString());
+            assertTrue(dataSet.next());
+            assertEquals("Row[values=[C, Human Inference, HI]]", dataSet.getRow().toString());
+            assertTrue(dataSet.next());
+            assertEquals("Row[values=[P, Ankit Kumar, AK]]", dataSet.getRow().toString());
+            assertTrue(dataSet.next());
+            assertEquals("Row[values=[C, Stratio, S]]", dataSet.getRow().toString());
+            assertTrue(dataSet.next());
+            assertEquals("Row[values=[U, Unknown, ]]", dataSet.getRow().toString());
+            assertFalse(dataSet.next());
+        }
+    }
+}
index 785a539..ac055c9 100644 (file)
@@ -1,5 +1,5 @@
-PKasper Sorensen     KS\r
-CHuman Inference     HI\r
-PAnkit Kumar         AK\r
-CStratio             S \r
-UUnknown               \r
+PKasper Sorensen     KS
+CHuman Inference     HI
+PAnkit Kumar         AK
+CStratio             S 
+UUnknown               
index 9bbe411..38b0e04 100644 (file)
@@ -1,4 +1,4 @@
-Name,SASColumnType,BeginPosition,EndPosition,ReadFlag,Desc,SASFormat,SASInformat\r
-Record type,C,1,1,y,Record Type,$char.,$char.\r
-Description,C,2,21,y,Description of record,$char.,$char.\r
-Initials,C,22,23,y,Initials of record,,\r
+Name,SASColumnType,BeginPosition,EndPosition,ReadFlag,Desc,SASFormat,SASInformat
+Record type,C,1,1,y,Record Type,$char.,$char.
+Description,C,2,21,y,Description of record,$char.,$char.
+Initials,C,22,23,y,Initials of record,,
index f12e418..6839a9b 100644 (file)
@@ -1,19 +1,19 @@
-INPUT\r
-\r
-   @1 COL1 $char1.\r
-\r
-   @2 COL2 $char20.\r
-\r
-   @22 COL3 $char2.\r
-   \r
-;\r
-\r
-LABEL\r
-\r
-   COL1 "Record type"\r
-\r
-   COL2 "Description"\r
-\r
-   COL3 "Initials"\r
-\r
-;\r
+INPUT
+
+   @1 COL1 $char1.
+
+   @2 COL2 $char20.
+
+   @22 COL3 $char2.
+   
+;
+
+LABEL
+
+   COL1 "Record type"
+
+   COL2 "Description"
+
+   COL3 "Initials"
+
+;