org.seasar.framework.beans.util.BeanUtil Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.framework.beans.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.seasar.framework.beans.BeanDesc;
import org.seasar.framework.beans.PropertyDesc;
import org.seasar.framework.beans.factory.BeanDescFactory;
/**
* JavaBeans用のユーティリティです。
*
* @author Kimura Satoshi
* @author higa
*
*/
public class BeanUtil {
/**
* インスタンスを構築します。
*/
protected BeanUtil() {
}
/**
* マップの値をJavaBeansにコピーします。
*
* @param src
* ソース
* @param dest
* あて先
*/
public static void copyProperties(Map src, Object dest) {
if (src == null || dest == null) {
return;
}
BeanDesc beanDesc = BeanDescFactory.getBeanDesc(dest.getClass());
for (Iterator i = src.keySet().iterator(); i.hasNext();) {
String key = i.next();
if (!beanDesc.hasPropertyDesc(key)) {
continue;
}
PropertyDesc pd = beanDesc.getPropertyDesc(key);
if (pd.isWritable()) {
pd.setValue(dest, src.get(key));
}
}
}
/**
* JavaBeansの値をマップにコピーします。
*
* @param src
* ソース
* @param dest
* あて先
*/
public static void copyProperties(Object src, Map dest) {
if (src == null || dest == null) {
return;
}
final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(src.getClass());
final int size = beanDesc.getPropertyDescSize();
for (int i = 0; i < size; ++i) {
final PropertyDesc pd = beanDesc.getPropertyDesc(i);
if (pd.isReadable() && pd.isWritable()) {
final Object value = pd.getValue(src);
dest.put(pd.getPropertyName(), value);
}
}
}
/**
* JavaBeansの値をJavaBeansにコピーします。
*
* @param src
* ソース
* @param dest
* あて先
*/
public static void copyProperties(final Object src, final Object dest) {
copyProperties(src, dest, true);
}
/**
* JavaBeansの値をJavaBeansにコピーします。
*
* @param src
* ソース
* @param dest
* あて先
* @param includeNull
* null
を含めるかどうか
*/
public static void copyProperties(final Object src, final Object dest,
final boolean includeNull) {
final BeanDesc srcBeanDesc = BeanDescFactory
.getBeanDesc(src.getClass());
final BeanDesc destBeanDesc = BeanDescFactory.getBeanDesc(dest
.getClass());
final int propertyDescSize = destBeanDesc.getPropertyDescSize();
for (int i = 0; i < propertyDescSize; i++) {
final PropertyDesc destPropertyDesc = destBeanDesc
.getPropertyDesc(i);
final String propertyName = destPropertyDesc.getPropertyName();
if (srcBeanDesc.hasPropertyDesc(propertyName)) {
final PropertyDesc srcPropertyDesc = srcBeanDesc
.getPropertyDesc(propertyName);
if (destPropertyDesc.isWritable()
&& srcPropertyDesc.isReadable()) {
final Object value = srcPropertyDesc.getValue(src);
if (includeNull || value != null) {
destPropertyDesc.setValue(dest, srcPropertyDesc
.getValue(src));
}
}
}
}
}
/**
* JavaBeansの値からマップを作成します。
*
* @param src
* ソース
* @return JavaBeansの値を持つマップ
*/
public static Map createProperties(Object src) {
return createProperties(src, null);
}
/**
* JavaBeansの値からマップを作成します。
*
* @param src
* ソース
* @param prefix
* プレフィックス
* @return JavaBeansの値を持つマップ
*/
public static Map createProperties(Object src, String prefix) {
Map map = new HashMap<>();
if (src == null) {
return map;
}
final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(src.getClass());
final int size = beanDesc.getPropertyDescSize();
for (int i = 0; i < size; ++i) {
final PropertyDesc pd = beanDesc.getPropertyDesc(i);
if (pd.isReadable()) {
if (prefix == null) {
final Object value = pd.getValue(src);
String name = pd.getPropertyName().replace('$', '.');
map.put(name, value);
} else if (pd.getPropertyName().startsWith(prefix)) {
final Object value = pd.getValue(src);
String name = pd.getPropertyName().substring(
prefix.length()).replace('$', '.');
map.put(name, value);
}
}
}
return map;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy