I don't think CSV needs anything special to accommodate type conversion.

The pattern I tried to introduce in the Commons Convert "Getting Started" section is one that works in any part of an application where conversion might be needed. So, instead of hard-coding conversions, the developer creates a facade that accommodates conversion anywhere in the program (not just in CSV).

Instead of

int columnInt = record.getValueAsInt(1);

the developer would use

Integer columnInt = Util.convertTo(record.getValue(1), Integer.class);

By keeping type conversion separated, you can convert anything you encounter during development. Plus, this approach relieves CSV from being concerned with conversions - that is the developer's responsibility.

If a developer used Commons Convert, then they could keep conversion details out of the code entirely and design external declarative conversions:

<file-reader>
  <input-file name="dailyForex" format="CSV" />
    <field name="fromCurrency" type="java.lang.String" />
    <field name="toCurrency" type="java.lang.String" />
    <field name="conversionRate" type="java.lang.Double" />
  </input-file>
</file-reader>

-Adrian


On 8/14/2013 7:54 AM, Gary Gregory wrote:
On Tue, Aug 13, 2013 at 4:01 PM, Oliver Heger
<oliver.he...@oliver-heger.de>wrote:

Hi all,

recently, there was a discussion about extending the [csv] interface to
provide data conversions to different types. If such a use case is to be
supported, what would be the best approach to integrate a library like
[convert]?

Well, the first step would be to release [Convert] 1.0 ;)

It seems there would first need to be agreement that conversion belongs in
[csv] in the first place, which is not the case for [CSV] 1.0.

Personally, I'd like to focus on getting [CSV] 1.0 out the door and then
adding features.

It is good to talk about conversion now of course because it may affect the
[CSV] APIs we provide. We do want to be backward compatible.


Gary


Doing all required conversions manually would probably mean a
bunch of boilerplate code, wouldn't it?

I had an idea how to automate this use case. Given an interface with a
method
T getValue(...);
where T is some base type like String or Object. Now we want to provide
other methods like
int getValueAsInt(...);
long getValueAsLong(...);
...

If there is an extended interface with all getValueAsXXX() methods,
couldn't the conversion be done by a proxy? The invocation handler would
obtain the return type of the invoked method in order to determine the
target class of the conversion. It would then call the basic getValue()
method with the provided arguments, convert the result, and return it.

This is the general idea, in practice probably some filtering would be
needed to react only on certain method invocations.

Do you think this use case is generic enough to support it in [convert]
(e.g. by providing an abstract base class of an invocation handler and
some convenience methods for creating proxy objects)?

Oliver

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to