Skip to content
Snippets Groups Projects
Commit e38f64a7 authored by izabel's avatar izabel
Browse files

parser warning improved

SVN: 4557
parent 95bfa397
No related branches found
No related tags found
No related merge requests found
...@@ -73,7 +73,7 @@ public class DefaultParser<E> implements IParser<E> ...@@ -73,7 +73,7 @@ public class DefaultParser<E> implements IParser<E>
// Parser // 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 throws ParsingException
{ {
final List<E> elements = new ArrayList<E>(); final List<E> elements = new ArrayList<E>();
...@@ -83,7 +83,7 @@ public class DefaultParser<E> implements IParser<E> ...@@ -83,7 +83,7 @@ public class DefaultParser<E> implements IParser<E>
while (lineIterator.hasNext()) while (lineIterator.hasNext())
{ {
Line line = lineIterator.next(); Line line = lineIterator.next();
final String nextLine = line.getText(); String nextLine = line.getText();
int number = line.getNumber(); int number = line.getNumber();
if (lineFilter.acceptLine(nextLine, number)) if (lineFilter.acceptLine(nextLine, number))
{ {
...@@ -91,11 +91,23 @@ public class DefaultParser<E> implements IParser<E> ...@@ -91,11 +91,23 @@ public class DefaultParser<E> implements IParser<E>
E object = null; E object = null;
try 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( throw new RuntimeException(String.format(
"Line <%s> has more columns (%s) than the header (%s)", number, String "Line <%s> has %s columns (%s) than the header (%s):\n%s", number, moreLessStr,
.valueOf(tokens.length), String.valueOf(headerLength))); String.valueOf(tokens.length), String.valueOf(headerLength), lineStructure
.toString()));
} }
object = createObject(tokens); object = createObject(tokens);
} catch (final ParserException parserException) } catch (final ParserException parserException)
......
...@@ -35,7 +35,7 @@ public interface IParser<E> ...@@ -35,7 +35,7 @@ public interface IParser<E>
* @param headerLength number of columns in the header * @param headerLength number of columns in the header
* @return a <code>List</code> of elements. * @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; throws ParsingException;
/** /**
......
...@@ -97,7 +97,7 @@ public class TabFileLoader<T> ...@@ -97,7 +97,7 @@ public class TabFileLoader<T>
{ {
reader = new FileReader(file); reader = new FileReader(file);
return load(reader); return load(reader);
} catch (IOException ex) } catch (final IOException ex)
{ {
throw new EnvironmentFailureException(ex.getMessage()); throw new EnvironmentFailureException(ex.getMessage());
} catch (final ParsingException ex) } catch (final ParsingException ex)
...@@ -110,10 +110,10 @@ public class TabFileLoader<T> ...@@ -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>(); final List<T> result = new ArrayList<T>();
Iterator<Line> lineIterator = createLineIterator(reader); final Iterator<Line> lineIterator = createLineIterator(reader);
if (lineIterator.hasNext() == false) if (lineIterator.hasNext() == false)
{ {
return result; return result;
...@@ -136,11 +136,11 @@ public class TabFileLoader<T> ...@@ -136,11 +136,11 @@ public class TabFileLoader<T>
final DefaultParser<T> parser = new DefaultParser<T>(); final DefaultParser<T> parser = new DefaultParser<T>();
final String[] tokens = StringUtils.split(headerLine, "\t"); final String[] tokens = StringUtils.split(headerLine, "\t");
final long headerLength = tokens.length; final int headerLength = tokens.length;
notUnique(tokens); notUnique(tokens);
final IAliasPropertyMapper propertyMapper = new HeaderFilePropertyMapper(tokens); final IAliasPropertyMapper propertyMapper = new HeaderFilePropertyMapper(tokens);
parser.setObjectFactory(factory.createFactory(propertyMapper)); parser.setObjectFactory(factory.createFactory(propertyMapper));
ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE; final ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE;
if (previousLineHasColumnHeaders) if (previousLineHasColumnHeaders)
{ {
result.addAll(parser.parse(Arrays.asList(line).iterator(), filter, headerLength)); result.addAll(parser.parse(Arrays.asList(line).iterator(), filter, headerLength));
...@@ -149,10 +149,10 @@ public class TabFileLoader<T> ...@@ -149,10 +149,10 @@ public class TabFileLoader<T>
return result; return result;
} }
private Iterator<Line> createLineIterator(Reader reader) private Iterator<Line> createLineIterator(final Reader reader)
{ {
final LineIterator lineIterator = IOUtils.lineIterator(reader); final LineIterator lineIterator = IOUtils.lineIterator(reader);
Iterator<Line> iterator = new Iterator<Line>() final Iterator<Line> iterator = new Iterator<Line>()
{ {
private int lineNumber; private int lineNumber;
......
...@@ -36,7 +36,7 @@ public final class DefaultParserTest ...@@ -36,7 +36,7 @@ public final class DefaultParserTest
"Charles\tDarwin\tHumboldt Ave. 1865\t4242 Somewhere", "Charles\tDarwin\tHumboldt Ave. 1865\t4242 Somewhere",
"Albert\tEinstein\tNewton Road 1905\t4711 Princton"); "Albert\tEinstein\tNewton Road 1905\t4711 Princton");
private final static long HEADER_LENGTH = 4; private final static int HEADER_LENGTH = 4;
@Test @Test
public final void testParseWithoutFactoryAndHeader() public final void testParseWithoutFactoryAndHeader()
...@@ -80,7 +80,7 @@ public final class DefaultParserTest ...@@ -80,7 +80,7 @@ public final class DefaultParserTest
try try
{ {
parser.parse(createLineIterator(), new HeaderLineFilter(2), HEADER_LENGTH); 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 assertEquals("Creating an object with following tokens '[firstName, lastName, address, city]' failed.", ex
.getMessage()); .getMessage());
...@@ -92,7 +92,7 @@ public final class DefaultParserTest ...@@ -92,7 +92,7 @@ public final class DefaultParserTest
{ {
return new Iterator<Line>() return new Iterator<Line>()
{ {
private Iterator<String> iterator = text.iterator(); private final Iterator<String> iterator = text.iterator();
private int lineNumber; private int lineNumber;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment