On 26 March 2013 14:05, Gary Gregory <garydgreg...@gmail.com> wrote: > Hi All: > > This is a discussion to see if we should remove the requirement to use the > builder pattern. > > Right now, the CSVParser Javadoc has this simple example: > > Reader in = new StringReader("a\tb\nc\td"); > CSVFormat format = new CSVFormat('\t', '"', '#'); > List<CSVRecord> records = new CSVParser(in, format).getRecords(); > > This does not compile because we force the builder API on users but it > shows the previous intent of the API before the builder was made a > requirement. > > The CSVFormat ctor is not public and takes 9 parameters. > > So today, you have to write: > > Iterable<CSVRecord> parse = > CSVFormat.newBuilder().withCommentStart('#').withDelimiter('\t').withQuoteChar('"').build().parse(in); > for (CSVRecord csvRecord : parse) { > // ... > } > > If you use a predefined format, like Excel, then it's simpler: > > final Iterable<CSVRecord> parse2 = CSVFormat.EXCEL.parse(in); > > I see the issue flowing like this: > > - Let's make sure we provide the best set of CSVFormat preconfigured > instances. Do we need different Excel formats for different Excel versions > for example? My claim here is that if you use a preconfigured format, like > CSVFormat.EXCEL, then the API is OK. Today we have: > > - EXCEL > - MYSQL > - RFC4180 > - RFC4180_EMPTY_LINES > > - If you cannot use a preconfigured format, then this is when we need to > talk... > > One way to make the builder API optional is to make the CSVFormat ctor > public. It has 9 param ctor so it's not very user friendly and does not do > validation ATM. > > As soon as we do this, we run into the issue of adding ctors for 'common' > or 'simpler' uses, which means adding a lot of ctors. At this point, we > then have two APIs: the raw ctor (the one or a set) and the fluent builder > API. > > So I have two questions: > > Should the CSVFormat be made public? Would that make Emmanuel happy? I am > guessing not due to the 9 params.
-1 from me. > If the ctor is made public, should we add a bunch of ctors for simpler or > all cases? I think that's the wrong question at this point. What are the common use-cases for which neither the Builder nor the predefined formats are suitable? How does the user code look with the current API to create them? Is that code really too complicated? If so, only then do we look at how to simplify it. > Gary > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0 > Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org