This is an automated email from the ASF dual-hosted git repository.

porcelli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new 3ac538855e #1708 - Replace original implementation and remove 
copyright info from license file (#6195)
3ac538855e is described below

commit 3ac538855e4dc34f20264f00e675be87d7eb4405
Author: Alex Porcelli <[email protected]>
AuthorDate: Mon Dec 16 06:43:25 2024 -0500

    #1708 - Replace original implementation and remove copyright info from 
license file (#6195)
    
    * #1708 - Replace original implementation and remove copyright info from 
license file
    
    * incorporating PR review feedback
---
 .rat-excludes                                      |   2 -
 LICENSE                                            |  11 --
 .../decisiontable/parser/csv/CsvLineParser.java    | 179 ++++++---------------
 3 files changed, 53 insertions(+), 139 deletions(-)

diff --git a/.rat-excludes b/.rat-excludes
index 124cf995ed..298ba4b109 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -4,8 +4,6 @@
 .rat-excludes
 # DISCLAIMER-WIP
 DISCLAIMER-WIP
-# 
drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
-CsvLineParser.java
 # drools-decisiontables/src/test/resources/data/ComplexWorkbook.drl.csv
 ComplexWorkbook.drl.csv
 # drools-decisiontables/src/test/resources/data/TestCsv.drl.csv
diff --git a/LICENSE b/LICENSE
index fc4062804b..5fe39d2c7a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -234,17 +234,6 @@ for 
drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/Ja
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
- 
------------------------------------------------------------------------------------
- for 
drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
-
- Inner logic adapted from a C++ original that was Copyright (C) 1999
- Lucent Technologies Excerpted from 'The Practice of Programming' by Brian
- Kernighan and Rob Pike.
-
- Included by permission of the http://tpop.awl.com/ web site, which says:
- "You may use this code for any purpose, as long as you leave the
- copyright notice and book citation attached."
-
  
------------------------------------------------------------------------------------
  for kie-dmn/kie-dmn-backend/src/test/resources/DC.xsd
      kie-dmn/kie-dmn-backend/src/test/resources/DI.xsd
diff --git 
a/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
 
b/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
index 19aa126451..4ee8e52a28 100644
--- 
a/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
+++ 
b/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/csv/CsvLineParser.java
@@ -1,150 +1,77 @@
+/**
+ * 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.drools.decisiontable.parser.csv;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
- * 
- *         a CSV line, with all the normal CSV features.
+ * A simple parser for CSV (Comma-Separated Values) format.
+ * Supports quoted fields and escaped quotes.
  */
 public class CsvLineParser {
-    private ICsvParser lineParser;
-
-    public CsvLineParser() {
-        this.lineParser = new CsvParserImpl();
-    }
+    private static final char DELIMITER = ',';
 
     /**
-     * Use the current lineParser implementation to return a CSV line as a List
-     * of cells. (Strings).
+     * Parses a line of CSV text into a list of fields.
+     *
+     * @param input The CSV line to parse
+     * @return List of fields extracted from the CSV line
      */
-    public List<String> parse(final CharSequence line) {
-        return this.lineParser.parse( line.toString() );
-    }
-
-    /**
-     * This is insurance incase I need to replace it with more complex Csv
-     * handlers in the future.
-     */
-    static interface ICsvParser {
-        public List<String> parse(String line);
-    }
-
-    /**
-     * Parse comma-separated values (CSV), a common Windows file format. Sample
-     * input: "LU",86.25,"11/4/1998","2:19PM",+4.0625
-     * <p>
-     * Inner logic adapted from a C++ original that was Copyright (C) 1999
-     * Lucent Technologies Excerpted from 'The Practice of Programming' by 
Brian
-     * W. Kernighan and Rob Pike.
-     * <p>
-     * Included by permission of the http://tpop.awl.com/ web site, which says:
-     * "You may use this code for any purpose, as long as you leave the
-     * copyright notice and book citation attached." I have done so.
-     * 
-     *         readability)
-     */
-    static class CsvParserImpl
-        implements
-        ICsvParser {
-
-        public static final char DEFAULT_SEP = ',';
+    public List<String> parse(CharSequence input) {
+        String line = input != null ? input.toString() : "";
+        List<String> fields = new ArrayList<>();
 
-        /** Construct a CSV parser, with the default separator (','). */
-        public CsvParserImpl() {
-            this( CsvParserImpl.DEFAULT_SEP );
+        if (line.isEmpty()) {
+            return Collections.singletonList("");
         }
 
-        /**
-         * Construct a CSV parser with a given separator.
-         * 
-         * @param sep
-         *            The single char for the separator (not a list of 
separator
-         *            characters)
-         */
-        public CsvParserImpl(final char sep) {
-            this.fieldSep = sep;
-        }
-
-        /** The fields in the current String */
-        protected List<String> list = new ArrayList<>();
+        StringBuilder currentField = new StringBuilder();
+        boolean insideQuotes = false;
 
-        /** the separator char for this parser */
-        protected char fieldSep;
+        for (int i = 0; i < line.length(); i++) {
+            char currentChar = line.charAt(i);
 
-        /**
-         * parse: break the input String into fields
-         * 
-         * @return java.util.Iterator containing each field from the original 
as
-         *         a String, in order.
-         */
-        public List<String> parse(final String line) {
-            final StringBuilder sb = new StringBuilder();
-            this.list.clear(); // recycle to initial state
-            int i = 0;
-
-            if ( line.length() == 0 ) {
-                this.list.add( line );
-                return this.list;
-            }
-
-            do {
-                sb.setLength( 0 );
-                if ( i < line.length() && line.charAt( i ) == '"' ) {
-                    i = advQuoted( line,
-                                                                               
        sb,
-                                                                               
        ++i ); // skip
+            if (currentChar == '"') {
+                if (insideQuotes && i + 1 < line.length() && line.charAt(i + 
1) == '"') {
+                    // Handle escaped quotes
+                    currentField.append('"');
+                    i++; // Skip the next quote
                 } else {
-                    i = advPlain( line,
-                                       sb,
-                                       i );
+                    insideQuotes = !insideQuotes;
                 }
-                this.list.add( sb.toString() );
-                i++;
-            } while ( i < line.length() );
-
-            return this.list;
-        }
-
-        /** advQuoted: quoted field; return index of next separator */
-        protected int advQuoted(final String s,
-                                final StringBuilder sb,
-                                final int i) {
-            int j;
-            final int len = s.length();
-            for ( j = i; j < len; j++ ) {
-                if ( s.charAt( j ) == '"' && j + 1 < len ) {
-                    if ( s.charAt( j + 1 ) == '"' ) {
-                        j++; // skip escape char
-                    } else if ( s.charAt( j + 1 ) == this.fieldSep ) { // next 
delimeter
-                        j++; // skip end quotes
-                        break;
-                    }
-                } else if ( s.charAt( j ) == '"' && j + 1 == len ) { // end 
quotes at end of line
-                    break; // done
-                }
-                sb.append( s.charAt( j ) ); // regular character.
+                continue;
             }
-            return j;
-        }
 
-        /** advPlain: unquoted field; return index of next separator */
-        protected int advPlain(final String s,
-                               final StringBuilder sb,
-                               final int i) {
-            int j;
-
-            j = s.indexOf( this.fieldSep,
-                           i ); // look for separator
-            if ( j == -1 ) { // none found
-                sb.append( s.substring( i ) );
-                return s.length();
-            } else {
-                sb.append( s.substring( i,
-                                        j ) );
-                return j;
+            if (currentChar == DELIMITER && !insideQuotes) {
+                fields.add(currentField.toString());
+                currentField.setLength(0);
+                continue;
             }
+
+            currentField.append(currentChar);
         }
 
+        // Add the last field
+        fields.add(currentField.toString());
+
+        return fields;
     }
-}
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to