On Wed, Jul 31, 2013 at 9:34 AM, Emmanuel Bourg <ebo...@apache.org> wrote:

> Le 31/07/2013 15:08, Gary Gregory a écrit :
>
> > But that is exactly what _was_ happening! ;)
> >
> > If I called withHeader("A", "B", "C") the header was not skipped.
>
> Sounds good. The header is defined in the code, we don't expect to see
> the header in the file so nothing is skipped.
>

NOT good! ;) This is where we disagree. The parser used to behave
differently depending on the contents of the String[].
- From an API design standpoint, it's smelly to me.
- The feature is hard to understand. If we want that, we need two APIs for
two behaviors.

Using the withHeader API, I can tell the parser to:
- Ignore the fact that there is a header record, I am overriding it with my
own names
- There is no header record, so I am telling you what the header names are.

These two features clash because in one case the file has a header line and
in the other the file does not. This is why we need settings with different
names.

That or a setting that says 'skip the first record, it's the header, I do
not want to see it as a data record'

I see three scenarios:

1) I set the headers (the file does not have one), do not skip the first
record
2) I override the existing header record, skip the first record
3) The parser guesses the headers based on reading the first record, which
skips the first record as a data record

This can be accommodated with a skipHeaderRecord boolean setting.

I do not care what the default behavior is as long as I can say "this file
has headers, guess them please, and skip record 0" and "this file has a
header record, but I'm telling you to call them A, B, and C, so skip record
0"

1) withHeader("A", "B", "C").skipHeaderRecord(false);
2) withHeader("A", "B", "C").skipHeaderRecord(true);
3) withHeader()

Is there a better name for skipHeaderRecord? Maybe:

1b) withHeader("A", "B", "C").firstRecordIsHeader(false);
2b) withHeader("A", "B", "C").firstRecordIsHeader(true);

Here the difference is that the API does not describe behavior, instead it
describes the data, and behavior is implied.

There is also:

1c) withHeader("A", "B", "C")
2c) withHeaderOverride("A", "B", "C")

Thoughts?

Gary


>
> > If I called withHeader(new String[]{}) the header was skipped.
>
> Correct. The header is not defined in the code, the parser uses the
> first record as header and doesn't return it when iterating.
>
> > If I called withHeader() the header was skipped (same as line above).
>
> Sounds good too.
>
>
> What was the issue again ? ;)
>
>
> > What I am asking is: should we have a saveHeader setting such that IF you
> > ask for headers, then we save that record in the parser, it is currently
> > "lost", or, actually transformed into the header map.
>
> Keeping the header around might be useful, I wouldn't create a format
> parameter for this though. It could be made available at the record
> level, much like ResultSet.getMetaData().
>
> Emmanuel Bourg
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to