[ 
https://issues.apache.org/jira/browse/BEANUTILS-320?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vincenzo Vitale closed BEANUTILS-320.
-------------------------------------

    Resolution: Duplicate

The new improvement reuqest created for the Lang project : 

https://issues.apache.org/jira/browse/LANG-449

> Implement equals, hashCode and toString replacement
> ---------------------------------------------------
>
>                 Key: BEANUTILS-320
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-320
>             Project: Commons BeanUtils
>          Issue Type: New Feature
>          Components: Bean / Property Utils
>            Reporter: Vincenzo Vitale
>            Priority: Minor
>
> In my company (TomTom), we have internally developed a replacement of the 
> equals, hashcode and toString methods.
> The base idea is to use the annotation @BusinessObject at the class level and 
> @BusinessField at field level. Then what developers normally do is to 
> override the three methods delegating to the tomtom.BeanUtils methods:
>       @Override
>         public boolean equals(Object obj) {
>             return BeanUtils.equals(this, obj);
>         }
>         @Override
>         public int hashCode() {
>             return BeanUtils.hashCode(this);
>         }
>         @Override
>         public String toString() {
>             return BeanUtils.toString(this);
>         }
> And i.e. the method signature of equals is:
>     /**
>      * Compare two @BusinessObject beans comparing only the [EMAIL PROTECTED] 
> BusinessField}
>      * annotated fields.
>      * 
>      * @param firstBean First bean to compare.
>      * @param secondBean Second bean to compare.
>      * @return The equals result.
>      * @throws IllegalArgumentException If one of the beans compared is not an
>      *         instance of a [EMAIL PROTECTED] BusinessObject} annotated 
> class.
>      */
>     public static boolean equals(Object firstBean, Object secondBean);
> In the last versions of EqualsBuilder now there is the new method 
> reflectionEquals... but there is no a way to specify what to include in the 
> comparison. With our two annotations we are able to let developers exactly 
> define what need to be included in a Business comparison, as i.e. normally 
> required by persistence framework like hibernate. 
> The current implementation can also handle more complex case, comparing 
> correctly totally different kind of objects.
> For example if all my business logic cares only about the color, I can define:
> @BusinessObject
> public class Cat{
> }
> public class ColouredCat extends Cat{
> @BusinessField
> private String color;
> getter/setter
> }
> @BusinessObject
> public class SunSet{
> @BusinessField
> private String color="red";
> getter/setter
> }
> and then compare any instance of ColouredCat with a Sunset instance, finding 
> out that the redColouredCat is (for my business logic) equal to a default 
> instance of a Sunset. And also more tricky cases are handled (different 
> BusinessFields, no BusinessObject annotation and so on).
> We intensively use Hibernate and the utility demonstrated to work fine with 
> CGLIB proxies 
> We always thought about the possibility to create a new Open Source project 
> but then it was decided it would be better adding the feature to an already 
> well know open source project...
> If you are interested I can send you more details. How can we (me more one 
> other developer) eventually became committers?
> Thanks in advance,
> Vicio.
> P.s.: an utility method to automatically populate the BusinessFields of a 
> BusinessObject is also implemented.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to