first commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package org.apache.commons.digester;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.apache.commons.beanutils.DynaBean;
|
||||
import org.apache.commons.beanutils.DynaProperty;
|
||||
import org.apache.commons.beanutils.PropertyUtils;
|
||||
|
||||
public class BeanPropertySetterRule extends Rule {
|
||||
protected String propertyName;
|
||||
|
||||
protected String bodyText;
|
||||
|
||||
public BeanPropertySetterRule(Digester digester, String propertyName) {
|
||||
this(propertyName);
|
||||
}
|
||||
|
||||
public BeanPropertySetterRule(Digester digester) {
|
||||
this();
|
||||
}
|
||||
|
||||
public BeanPropertySetterRule(String propertyName) {
|
||||
this.propertyName = null;
|
||||
this.bodyText = null;
|
||||
this.propertyName = propertyName;
|
||||
}
|
||||
|
||||
public BeanPropertySetterRule() {
|
||||
this((String)null);
|
||||
}
|
||||
|
||||
public void body(String namespace, String name, String text) throws Exception {
|
||||
if (this.digester.log.isDebugEnabled())
|
||||
this.digester.log.debug("[BeanPropertySetterRule]{" + this.digester.match + "} Called with text '" + text + "'");
|
||||
this.bodyText = text.trim();
|
||||
}
|
||||
|
||||
public void end(String namespace, String name) throws Exception {
|
||||
String property = this.propertyName;
|
||||
if (property == null)
|
||||
property = name;
|
||||
Object top = this.digester.peek();
|
||||
if (this.digester.log.isDebugEnabled())
|
||||
this.digester.log.debug("[BeanPropertySetterRule]{" + this.digester.match + "} Set " + top.getClass().getName() + " property " + property + " with text " + this.bodyText);
|
||||
if (top instanceof DynaBean) {
|
||||
DynaProperty desc = ((DynaBean)top).getDynaClass().getDynaProperty(property);
|
||||
if (desc == null)
|
||||
throw new NoSuchMethodException("Bean has no property named " + property);
|
||||
} else {
|
||||
PropertyDescriptor desc = PropertyUtils.getPropertyDescriptor(top, property);
|
||||
if (desc == null)
|
||||
throw new NoSuchMethodException("Bean has no property named " + property);
|
||||
}
|
||||
BeanUtils.setProperty(top, property, this.bodyText);
|
||||
}
|
||||
|
||||
public void finish() throws Exception {
|
||||
this.bodyText = null;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer("BeanPropertySetterRule[");
|
||||
sb.append("propertyName=");
|
||||
sb.append(this.propertyName);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user