commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Java Developer (JIRA)" <j...@apache.org>
Subject [jira] Commented: (BEANUTILS-304) BeanDiff - encapsulate, apply, and merge bean differences
Date Thu, 09 Sep 2010 13:53:34 GMT

    [ https://issues.apache.org/jira/browse/BEANUTILS-304?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12907625#action_12907625
] 

Java Developer commented on BEANUTILS-304:
------------------------------------------

Sorry for English:

Take advantage of both worlds, I mean we can have a default behavior for beans which doesn't
implement the interface nor annotated( like BeanUtils.copyProperties(dest, src) ), and, customized
differentiating behavior for beans which implement the interface or are annotated.

This way the programmer can implement his/her customized differentiating behavior as well.

Choice between interface and annotation is a bit challenging because some decisions of differentiating
algorithm could be made at run-time. Annotations can not help in run-time case. For an example:
the decision about Sub-diff for current property may be annotated with @Subdiff or be implemented
with the assist of an interface which is more flexible and dynamic.

Think about both annotation and interface :)

> BeanDiff - encapsulate, apply, and merge bean differences
> ---------------------------------------------------------
>
>                 Key: BEANUTILS-304
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-304
>             Project: Commons BeanUtils
>          Issue Type: New Feature
>          Components: Bean / Property Utils, Bean-Collections, ConvertUtils & Converters,
DynaBean
>    Affects Versions: LATER THAN 1.8.4
>            Reporter: Mark Lewis
>             Fix For: LATER THAN 1.8.4
>
>   Original Estimate: 240h
>  Remaining Estimate: 240h
>
> It would be great to have a way to compare two beans and capture the diff somehow.  This
is just my initial brainstorm on the idea:
> - The BeanDiff class encapsulates differences between two beans -of the same type-, the
source bean and the target bean.
> - A BeanDiff instance represents what property assignments would be necessary to turn
the target bean into the source bean.
> - A BeanDiff can be applied to a target bean, performing the necessary property assignments
to make its property values exactly match the source bean.
> - Two BeanDiff instances can be merged into a single BeanDiff instance, allowing multiple
source beans to be merged into one target bean.
> - If a conflict would occur during a merge (from a property being assigned two different
values), a BeanDiffConflictException is thrown.
> - The BeanDiffConflictException contains an array of BeanDiffConflict objects.
> - Each BeanDiffConflict instance represents a single property and the two conflicting
values that were to be assigned.
> - All these actions would work on DynaBeans as well.
> - +Converters would be able to account for type differences in source and target bean
properties.+
> An example of how this could be used is when dealing with ORM and optimistic locking.
 Knowing exactly which properties have been modified would allow concurrent modification of
a bean (record) without fear of reasserting the original values and destroying someone else's
changes.

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


Mime
View raw message