You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Rodrigues Adelino <Ad...@emea.eu.int> on 2005/11/08 11:28:53 UTC
BeanUtils: proposition for "controlled" copy of bean properties
Hi,
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.
What do you think of this?
Regards, Adelino.
P.S.: Here attached a simple implementation of such method.
________________________________________________________________________
This e-mail has been scanned for all known viruses by EMEA.
________________________________________________________________________