commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 37987] New: - proposition for "controlled" copy of bean properties
Date Wed, 21 Dec 2005 11:21:37 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=37987>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=37987

           Summary: proposition for "controlled" copy of bean properties
           Product: Commons
           Version: unspecified
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Bean Utilities
        AssignedTo: commons-dev@jakarta.apache.org
        ReportedBy: adelino.rodrigues@emea.eu.int


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.

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message