?? localebeanutilsbean.java
字號(hào):
Class type = null; // Java type of target property
if (target instanceof DynaBean) {
DynaClass dynaClass = ((DynaBean) target).getDynaClass();
DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
if (dynaProperty == null) {
return null; // Skip this property setter
}
type = dynaProperty.getType();
}
else {
PropertyDescriptor descriptor = null;
try {
descriptor =
getPropertyUtils().getPropertyDescriptor(target, name);
if (descriptor == null) {
return null; // Skip this property setter
}
}
catch (NoSuchMethodException e) {
return null; // Skip this property setter
}
if (descriptor instanceof MappedPropertyDescriptor) {
type = ((MappedPropertyDescriptor) descriptor).
getMappedPropertyType();
}
else if (descriptor instanceof IndexedPropertyDescriptor) {
type = ((IndexedPropertyDescriptor) descriptor).
getIndexedPropertyType();
}
else {
type = descriptor.getPropertyType();
}
}
return type;
}
/**
* Convert the specified value to the required type using the
* specified conversion pattern.
*
* @param type The Java type of target property
* @param index The indexed subscript value (if any)
* @param value The value to be converted
* @param pattern The conversion pattern
* @return The converted value
*/
protected Object convert(Class type, int index, Object value, String pattern) {
if (log.isTraceEnabled()) {
log.trace("Converting value '" + value + "' to type:" + type);
}
Object newValue = null;
if (type.isArray() && (index < 0)) { // Scalar value into array
if (value instanceof String) {
String[] values = new String[1];
values[0] = (String) value;
newValue = getLocaleConvertUtils().convert(values, type, pattern);
}
else if (value instanceof String[]) {
newValue = getLocaleConvertUtils().convert((String[]) value, type, pattern);
}
else {
newValue = value;
}
}
else if (type.isArray()) { // Indexed value into array
if (value instanceof String) {
newValue = getLocaleConvertUtils().convert((String) value,
type.getComponentType(), pattern);
}
else if (value instanceof String[]) {
newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
type.getComponentType(), pattern);
}
else {
newValue = value;
}
}
else { // Value into scalar
if (value instanceof String) {
newValue = getLocaleConvertUtils().convert((String) value, type, pattern);
}
else if (value instanceof String[]) {
newValue = getLocaleConvertUtils().convert(((String[]) value)[0],
type, pattern);
}
else {
newValue = value;
}
}
return newValue;
}
/**
* Convert the specified value to the required type.
*
* @param type The Java type of target property
* @param index The indexed subscript value (if any)
* @param value The value to be converted
* @return The converted value
*/
protected Object convert(Class type, int index, Object value) {
Object newValue = null;
if (value instanceof String) {
String[] values = new String[1];
values[0] = (String) value;
newValue = ConvertUtils.convert(values, type);
}
else if (value instanceof String[]) {
newValue = ConvertUtils.convert((String[]) value, type);
}
else {
newValue = value;
}
}
else if (type.isArray()) { // Indexed value into array
if (value instanceof String) {
newValue = ConvertUtils.convert((String) value,
type.getComponentType());
}
else if (value instanceof String[]) {
newValue = ConvertUtils.convert(((String[]) value)[0],
type.getComponentType());
}
else {
newValue = value;
}
}
else { // Value into scalar
if (value instanceof String) {
newValue = ConvertUtils.convert((String) value, type);
}
else if (value instanceof String[]) {
newValue = ConvertUtils.convert(((String[]) value)[0],
type);
}
else {
newValue = value;
}
}
return newValue;
}
/**
* Invoke the setter method.
*
* @param target The bean
* @param propName The Simple name of target property
* @param key The Mapped key value (if any)
* @param index The indexed subscript value (if any)
* @param newValue The value to be set
*
* @exception IllegalAccessException if the caller does not have
* access to the property accessor method
* @exception InvocationTargetException if the property accessor method
* throws an exception
*/
protected void invokeSetter(Object target, String propName, String key, int index, Object newValue)
throws IllegalAccessException, InvocationTargetException {
try {
if (index >= 0) {
getPropertyUtils().setIndexedProperty(target, propName,
index, newValue);
}
else if (key != null) {
getPropertyUtils().setMappedProperty(target, propName,
key, newValue);
}
else {
getPropertyUtils().setProperty(target, propName, newValue);
}
}
catch (NoSuchMethodException e) {
throw new InvocationTargetException
(e, "Cannot set " + propName);
}
}
/**
* Resolve any nested expression to get the actual target property.
*
* @param bean The bean
* @param name The property name
* @return The property's descriptor
*
* @exception IllegalAccessException if the caller does not have
* access to the property accessor method
* @exception InvocationTargetException if the property accessor method
* throws an exception
* @deprecated Property name expressions are now processed by
* the configured {@link Resolver} implementation and this method
* is no longer used by BeanUtils.
*/
protected Descriptor calculate(Object bean, String name)
throws IllegalAccessException, InvocationTargetException {
// Resolve any nested expression to get the actual target bean
Object target = bean;
Resolver resolver = getPropertyUtils().getResolver();
while (resolver.hasNested(name)) {
try {
target = getPropertyUtils().getProperty(target, resolver.next(name));
name = resolver.remove(name);
} catch (NoSuchMethodException e) {
return null; // Skip this property setter
}
}
if (log.isTraceEnabled()) {
log.trace(" Target bean = " + target);
log.trace(" Target name = " + name);
}
// Declare local variables we will require
String propName = resolver.getProperty(name); // Simple name of target property
int index = resolver.getIndex(name); // Indexed subscript value (if any)
String key = resolver.getKey(name); // Mapped key value (if any)
return new Descriptor(target, name, propName, key, index);
}
/**
* @deprecated Property name expressions are now processed by
* the configured {@link Resolver} implementation and this class
* is no longer used by BeanUtils.
*/
protected class Descriptor {
private int index = -1; // Indexed subscript value (if any)
private String name;
private String propName; // Simple name of target property
private String key; // Mapped key value (if any)
private Object target;
/**
* Construct a descriptor instance for the target bean and property.
*
* @param target The target bean
* @param name The property name (includes indexed/mapped expr)
* @param propName The property name
* @param key The mapped property key (if any)
* @param index The indexed property index (if any)
*/
public Descriptor(Object target, String name, String propName, String key, int index) {
setTarget(target);
setName(name);
setPropName(propName);
setKey(key);
setIndex(index);
}
/**
* Return the target bean.
*
* @return The descriptors target bean
*/
public Object getTarget() {
return target;
}
/**
* Set the target bean.
*
* @param target The target bean
*/
public void setTarget(Object target) {
this.target = target;
}
/**
* Return the mapped property key.
*
* @return the mapped property key (if any)
*/
public String getKey() {
return key;
}
/**
* Set the mapped property key.
*
* @param key The mapped property key (if any)
*/
public void setKey(String key) {
this.key = key;
}
/**
* Return indexed property index.
*
* @return indexed property index (if any)
*/
public int getIndex() {
return index;
}
/**
* Set the indexed property index.
*
* @param index The indexed property index (if any)
*/
public void setIndex(int index) {
this.index = index;
}
/**
* Return property name (includes indexed/mapped expr).
*
* @return The property name (includes indexed/mapped expr)
*/
public String getName() {
return name;
}
/**
* Set the property name (includes indexed/mapped expr).
*
* @param name The property name (includes indexed/mapped expr)
*/
public void setName(String name) {
this.name = name;
}
/**
* Return the property name.
*
* @return The property name
*/
public String getPropName() {
return propName;
}
/**
* Set the property name.
*
* @param propName The property name
*/
public void setPropName(String propName) {
this.propName = propName;
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -