[Seasar-user:8656] Re: [S2Dao] Bean のプロパティに基本型以外を使う方法
Nakata Kouji
[E-MAIL ADDRESS DELETED]
2007年 6月 25日 (月) 18:58:09 JST
なかたです。
org.seasar.framework.beans.impl.PropertyDescImpl クラスを改造
してみました。
これで、Enum クラスに対応でき、また、DBに格納したデータが
String 以外の場合にも、その型に適合した
static valueOf メソッドを用意しておくとそのインスタンスを生成して
設定します。
#実行効率を無視して組んだので、遅いと思いますが。
public Object convertIfNeed(Object arg) {
if (propertyType.isPrimitive()) {
return convertPrimitiveWrapper(arg);
} else if (Number.class.isAssignableFrom(propertyType)) {
return convertNumber(arg);
} else if (java.util.Date.class.isAssignableFrom(propertyType)) {
return convertDate(arg);
} else if (Boolean.class.isAssignableFrom(propertyType)) {
return BooleanConversionUtil.toBoolean(arg);
} else if (arg instanceof String && !String.class.equals(propertyType)) {
if (stringConstructor != null) {
return convertWithStringConstructor(arg);
} else {
Method[] methods = propertyType.getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("valueOf")) {
if ((methods[i].getModifiers() & Modifier.STATIC) != 0) {
if (methods[i].getReturnType().equals(propertyType)) {
Class[] parameterTypes = methods[i].getParameterTypes();
if (parameterTypes.length == 1
&& parameterTypes[0].isAssignableFrom(arg.getClass())) {
// 第二引数に意味はない
return MethodUtil.invoke(methods[i], propertyType,
new Object[]{arg});
}
}
}
}
}
return arg;
}
} else if (java.util.Calendar.class.isAssignableFrom(propertyType)) {
return CalendarConversionUtil.toCalendar(arg);
} else {
Method[] methods = propertyType.getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("valueOf")) {
if ((methods[i].getModifiers() & Modifier.STATIC) != 0) {
if (methods[i].getReturnType().equals(propertyType)) {
Class[] parameterTypes = methods[i].getParameterTypes();
if (parameterTypes.length == 1
&& parameterTypes[0].isAssignableFrom(arg.getClass())) {
// 第二引数に意味はない
return MethodUtil.invoke(methods[i], propertyType, new
Object[]{arg});
}
}
}
}
}
}
return arg;
}
Seasar-user メーリングリストの案内