[ http://issues.apache.org/jira/browse/BEANUTILS-259?page=all ]
Niall Pemberton updated BEANUTILS-259:
--------------------------------------
Attachment: Resolver.java
BasicResolver.java
BasicResolverTestCase.java
I'm attaching an example implementation for review. Its not well tested and I
haven't done the analysis to ensure that the implementation is backwardly
compatible. However it demonstrates the main concept.
As an example, the PropertyUtilsBean's getNestedPropertyMethod() would
(hopefully) look something like the following:
public Object getNestedProperty(Object bean, String name)
throws IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
if (bean == null) {
throw new IllegalArgumentException("No bean specified");
}
if (name == null) {
throw new IllegalArgumentException("No name specified");
}
while (true) {
String next = resolver.next(name);
String propName = resolver.getName(next);
String mapKey = resolver.getMapKey(next);
int index = resolver.getIndex(next);
if (bean instanceof Map) {
bean = getPropertyOfMapBean((Map) bean, next);
} else if (mapKey != null) {
bean = getMappedProperty(bean, propName, mapKey);
} else if (index >= 0) {
bean = getIndexedProperty(bean, propName, index);
} else {
bean = getSimpleProperty(bean, propName);
}
if (bean == null) {
throw new NestedNullException
("Null property value for '" + next + "'");
}
name = resolver.remove(name);
if (name == null) {
return bean;
}
}
}
> Plugable Expression Resolver
> ----------------------------
>
> Key: BEANUTILS-259
> URL: http://issues.apache.org/jira/browse/BEANUTILS-259
> Project: Commons BeanUtils
> Issue Type: Improvement
> Components: Bean / Property Utils
> Affects Versions: 1.7.0
> Reporter: Niall Pemberton
> Assigned To: Niall Pemberton
> Priority: Minor
> Attachments: BasicResolver.java, BasicResolverTestCase.java,
> Resolver.java
>
>
> There are a number of outstanding bugs against the BeanUtils expression
> syntax with people wanting BeanUtils to support different variations. There
> is also a duplication of the "expression evaluation" code in various methods
> which can't be tested in isolation and is difficult to maintain as changes
> have to be applied uniformly to various places.
> The main places where the code is duplicated:
> PropertyUtilsBean
> - getNestedProperty
> - setNestedProperty
> - getPropertyDescriptor
> BeanUtilsBean
> - copyProperty
> - setProperty
> LocaleBeanUtils has also implemented an alternative mechanism - using a
> Descriptor object to resolve references. BeanUtils and PropertyUtils also
> work in slightly different ways. There are also other methods (e.g.
> PropertyUtilsBean's getIndexedProperty() method) which also have related code.
> I propose to add a new "expression resolver" interface, which would be a
> singleton and everywhere would delegate to to resolve property expressions.
> This will allow easy testing as it can be tested in isolation and provide a
> uniform mechanism accross BeanUtils. It will also allow alternative syntax to
> be implemented if the resolver implementation can be configured.
--
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]