From e38f64a74da9ca6443aee6c66fcd06c40c003e24 Mon Sep 17 00:00:00 2001
From: izabel <izabel>
Date: Wed, 27 Feb 2008 10:42:16 +0000
Subject: [PATCH] parser warning improved

SVN: 4557
---
 .../cisd/common/parser/DefaultParser.java     | 22 ++++++++++++++-----
 .../systemsx/cisd/common/parser/IParser.java  |  2 +-
 .../cisd/common/parser/TabFileLoader.java     | 16 +++++++-------
 .../cisd/common/parser/DefaultParserTest.java |  6 ++---
 4 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
index d0c99bbe400..3f848408de3 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
@@ -73,7 +73,7 @@ public class DefaultParser<E> implements IParser<E>
     // Parser
     //
 
-    public final List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final long headerLength)
+    public final List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final int headerLength)
             throws ParsingException
     {
         final List<E> elements = new ArrayList<E>();
@@ -83,7 +83,7 @@ public class DefaultParser<E> implements IParser<E>
             while (lineIterator.hasNext())
             {
                 Line line = lineIterator.next();
-                final String nextLine = line.getText();
+                String nextLine = line.getText();
                 int number = line.getNumber();
                 if (lineFilter.acceptLine(nextLine, number))
                 {
@@ -91,11 +91,23 @@ public class DefaultParser<E> implements IParser<E>
                     E object = null;
                     try
                     {
-                        if (tokens.length > headerLength)
+                        if (tokens.length != headerLength)
                         {
+                            String moreLessStr = tokens.length > headerLength ? "more" : "less";
+                            StringBuilder lineStructure = new StringBuilder();
+                            for (int i = 0; i < tokens.length; i++)
+                            {
+                                lineStructure.append(tokens[i]);
+                                if (i + 1 < tokens.length)
+                                {
+                                    lineStructure.append(" <TAB> ");
+                                }
+                            }
+                            lineStructure.append(" <END_OF_LINE>");
                             throw new RuntimeException(String.format(
-                                    "Line <%s> has more columns (%s) than the header (%s)", number, String
-                                            .valueOf(tokens.length), String.valueOf(headerLength)));
+                                    "Line <%s> has %s columns (%s) than the header (%s):\n%s", number, moreLessStr,
+                                    String.valueOf(tokens.length), String.valueOf(headerLength), lineStructure
+                                            .toString()));
                         }
                         object = createObject(tokens);
                     } catch (final ParserException parserException)
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IParser.java b/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
index f3c5df833d3..59cbd702d02 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
@@ -35,7 +35,7 @@ public interface IParser<E>
      * @param headerLength number of columns in the header
      * @return a <code>List</code> of elements.
      */
-    public List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final long headerLength)
+    public List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final int headerLength)
             throws ParsingException;
 
     /**
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
index 2622ce2162f..d7880016f6e 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
@@ -97,7 +97,7 @@ public class TabFileLoader<T>
         {
             reader = new FileReader(file);
             return load(reader);
-        } catch (IOException ex)
+        } catch (final IOException ex)
         {
             throw new EnvironmentFailureException(ex.getMessage());
         } catch (final ParsingException ex)
@@ -110,10 +110,10 @@ public class TabFileLoader<T>
         }
     }
 
-    List<T> load(Reader reader)
+    List<T> load(final Reader reader)
     {
-        List<T> result = new ArrayList<T>();
-        Iterator<Line> lineIterator = createLineIterator(reader);
+        final List<T> result = new ArrayList<T>();
+        final Iterator<Line> lineIterator = createLineIterator(reader);
         if (lineIterator.hasNext() == false)
         {
             return result;
@@ -136,11 +136,11 @@ public class TabFileLoader<T>
 
         final DefaultParser<T> parser = new DefaultParser<T>();
         final String[] tokens = StringUtils.split(headerLine, "\t");
-        final long headerLength = tokens.length;
+        final int headerLength = tokens.length;
         notUnique(tokens);
         final IAliasPropertyMapper propertyMapper = new HeaderFilePropertyMapper(tokens);
         parser.setObjectFactory(factory.createFactory(propertyMapper));
-        ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE;
+        final ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE;
         if (previousLineHasColumnHeaders)
         {
             result.addAll(parser.parse(Arrays.asList(line).iterator(), filter, headerLength));
@@ -149,10 +149,10 @@ public class TabFileLoader<T>
         return result;
     }
 
-    private Iterator<Line> createLineIterator(Reader reader)
+    private Iterator<Line> createLineIterator(final Reader reader)
     {
         final LineIterator lineIterator = IOUtils.lineIterator(reader);
-        Iterator<Line> iterator = new Iterator<Line>()
+        final Iterator<Line> iterator = new Iterator<Line>()
             {
                 private int lineNumber;
 
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
index ac0d353cc24..7ac7e2c6056 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
@@ -36,7 +36,7 @@ public final class DefaultParserTest
                     "Charles\tDarwin\tHumboldt Ave. 1865\t4242 Somewhere",
                     "Albert\tEinstein\tNewton Road 1905\t4711 Princton");
 
-    private final static long HEADER_LENGTH = 4;
+    private final static int HEADER_LENGTH = 4;
 
     @Test
     public final void testParseWithoutFactoryAndHeader()
@@ -80,7 +80,7 @@ public final class DefaultParserTest
         try
         {
             parser.parse(createLineIterator(), new HeaderLineFilter(2), HEADER_LENGTH);
-        } catch (ParsingException ex)
+        } catch (final ParsingException ex)
         {
             assertEquals("Creating an object with following tokens '[firstName, lastName, address, city]' failed.", ex
                     .getMessage());
@@ -92,7 +92,7 @@ public final class DefaultParserTest
     {
         return new Iterator<Line>()
             {
-                private Iterator<String> iterator = text.iterator();
+                private final Iterator<String> iterator = text.iterator();
 
                 private int lineNumber;
 
-- 
GitLab