I am using BeanUtils.copyProperties(Object dest, Object orig)  to copy from 
my "view" beans to my dto beans, and vica versa. I find that I need to apply 
slightly different rules based on which direction I am going.  I would like to 
add the idea of a "ConverterSet" to beanutils, and plan on passing up the 
changes, if anyone is interested.  

Here are the changes I am looking at:

Add a new ConverterSet class, which will contain a hashmap of Converter 
objects, and a name, as well as lookup and set methods for Converters.

Add a new method in BeanUtils with the signature copyProperties(Object dest, 
Object orig, ConverterSet converterSet). The current copyProperties(Object 
dest, Object orig) will chain to this new method, using a default ConverterSet. 

There will be many other methods in BeanUtils and ConvertUtils which will also 
have to undergo the same transition- i.e. copyProperty(Object bean, String 
name, Object value), etc.. 

In ConvertUtils, I will add a "Converter lookup(Class clazz, ConverterSet 
converterSet)" method, along with register(...), etc. Basically everything that 
currently does a lookup on the converters variable inside of ConvertUtils will 
be changed to allow the specification of a ConverterSet, and the default will 
be used if none is specified.

I will add a utility method on ConvertUtils to retrieve a given ConverterSet:
public static ConverterSet getConverterSet(String setName)

That should all be pretty straight forward and will maintain backwards 
compatability.


There is a chance for a larger refactoring here.. It might be appropriate to 
move some of the functionality from ConvertUtils into this new ConverterSet 
object, for example setDefaultDouble(double value) (and then deprecating those 
methods on ConvertUtils). Which would yield something like:

ConverterSet converterSet = ConvertUtils.getConverterSet("FormToDTO");
converterSet.setDefaultBoolean(false);

instead of:

ConverterSet converterSet = ConvertUtils.getConverterSet("FormToDTO");
converterUtils.setDefaultBoolean(false,converterSet);

(or use ConvertUtils.getDefaultConverterSet() to get the default set..)


On a side note, I initially thought I could use the name of the ConverterSet in 
such situations, and do something like:

converterUtils.setDefaultBoolean(false,"FormToDTO");

However, that got me in trouble inside BeanUtils, because overloading some of 
the methods with an additional String produced a method signature that was 
already in use. Hence the requirement for a ConverterSet object.


I wanted to run this by the list because I would rather have input now before I 
make a lot of changes, rather than after I make them :)   If anyone has strong 
opinions/comments/suggestions I would appreciate the feedback -- particularly 
in regards to whether to expose the ConverterSet functionality through the 
ConvertUtils (seems more in line with how the library currently works), or 
whether to expose it through ConverterSet (seems more OO) .  My preference is 
the latter of those two options, however it means fiddling with a public API, 
which might upset people...  

Thanks.

-Erik

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to