[ http://issues.apache.org/jira/browse/BEANUTILS-201?page=all ]

Henri Yandell updated BEANUTILS-201:
------------------------------------

      Bugzilla Id:   (was: 37987)
    Fix Version/s: LATER THAN 1.8.0

> [beanutils] Proposition for "controlled" copy of bean properties
> ----------------------------------------------------------------
>
>                 Key: BEANUTILS-201
>                 URL: http://issues.apache.org/jira/browse/BEANUTILS-201
>             Project: Commons BeanUtils
>          Issue Type: Improvement
>          Components: Bean / Property Utils
>         Environment: Operating System: All
> Platform: Other
>            Reporter: adelino
>            Priority: Minor
>             Fix For: LATER THAN 1.8.0
>
>
> IN SHORT
> This request is about adding to the BeanUtils class a new method:
> copyProperties(Object target, Object src, Class editable)
> ... that copies 'src' to 'target' as if they were declared as instances 
> of 'editable'. See sections below for more details.
> This request is to some extent related to the enhancement 32642.
> PROBLEM DESCRIPTION
> Today Commons BeanUtils offers the possibility to copy properties between
> 2 java beans:
> static void copyProperties(Object dest, Object orig)
>  
> As the instrospection does not 
> care about how the target variable was declared, calling such a method will
> copy more properties that one wants.
> To illustrate this point, let's consider the following types:
> interface EditablePriceableItem {
>       public int getPrice();
>       public void setPrice(int val);
> }
> class PurchaseItem implements EditablePriceableItem {
>       //... attributes
>       public String getPurchaseNr() { ... }
>       public void setPurchaseNr(String nr) { ... }
>       public int getPrice() { ... } ;
>       public void setPrice(int val) { ... };
> }
> class Project implements EditablePriceableItem {
>       //... attributes
>       public String getDescription() { ... }
>       public void setDescription(String desc) { ... }
>       public int getPrice() { ... } ;
>       public void setPrice(int val) { ... };
> }
> Somewhere in a class, we have:
>       EditablePriceableItem priceableSrc;
>       EditablePriceableItem priceableTarget;
>       //(1)
>       // ...
>       // priceableSrc is set by some method
>       // ...
>       //
>       //(2)
>       // priceableTarget gets instanciated
>       // ...
>       //(3)
>       //Now I want to copy Priceable properties (and only priceable 
> properties !)
>       //from priceableSrc to priceableTarget
>       BeanUtils.copyProperties(priceableTarget,priceableSrc);
> Although variables are declared as EditablePriceableItem, what gets copied in 
> (3)
> depends on the concrete type of priceableSrc and priceableTarget.
> a) When priceableSrc and priceableTarget are instances of PurchaseItem,
>       price and purchaseNr are copied
> b) When priceableSrc and priceableTarget are instances of Project,
>       price and description are copied
> c) When priceableSrc is an instance of PurchaseItem and priceableTarget
>     is an instance of Project (or the opposite) only price gets copied
> As a conclusion the behaviour in (3) is not uniform.
> PROPOSITION
> To control the scope of properties that are copied, it would be very useful
> to have a method such as:
> static void copyProperties(Object target, Object source, Class editableScope)
> where editableScope is an interface or class that declares the properties.
> Writing (3) as:
>       BeanUtils.copyProperties(priceableTarget,priceableSrc,
>                                EditablePriceableItem.class);
> would provide a consistent behaviour.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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

Reply via email to