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), I 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 EqaulsBuilder 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
the it was decided than probably it would be better to add 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.