You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
3.6 KiB
Java

package cokr.xit.foundation.data;
import java.beans.PropertyDescriptor;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import cokr.xit.foundation.AbstractComponent;
/**프로퍼티 지원 유틸리티
* @author mjkhan
*/
public class Property extends AbstractComponent {
private static Property instance;
private static Property get() {
if (instance == null)
instance = new Property();
return instance;
}
public static PropertyDescriptor descriptor(Object obj, String name) {
return get().getDescriptor(obj, name);
}
/**객체에서 지정하는 프로퍼티 값을 읽을 수 있는지 반환한다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체에서 지정하는 프로퍼티 값을 읽을 수 있는지 여부
*/
public static boolean readable(Object obj, String name) {
return get().isReadable(obj, name);
}
/**객체에 지정하는 프로퍼티 값을 쓸 수 있는지 반환한다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체에 지정하는 프로퍼티 값을 쓸 수 있는지 여부
*/
public static boolean writeable(Object obj, String name) {
return get().isWritable(obj, name);
}
/**객체에서 지정하는 프로퍼티 값을 읽는다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체의 프로퍼티 값
*/
public static String read(Object obj, String name) {
return get().get(obj, name);
}
public static Object value(Object obj, String name) {
return get().getValue(obj, name);
}
/**객체에 지정하는 프로퍼티 값을 쓴다.
* @param obj 객체
* @param name 프로퍼티 이름
* @param val 프로퍼티 값
*/
public static void write(Object obj, String name, Object val) {
get().set(obj, name, val);
}
/**객체에 지정하는 프로퍼티 값을 읽을 수 있는지 반환한다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체에서 지정하는 프로퍼티 값을 읽을 수 있는지 여부
*/
public boolean isReadable(Object obj, String name) {
if (isEmpty(obj))
return false;
try {
return PropertyUtils.isReadable(obj, name);
} catch (Exception e) {
return false;
}
}
/**객체에 지정하는 프로퍼티 값을 쓸 수 있는지 반환한다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체에 지정하는 프로퍼티 값을 쓸 수 있는지 여부
*/
public boolean isWritable(Object obj, String name) {
if (isEmpty(obj))
return false;
try {
return PropertyUtils.isWriteable(obj, name);
} catch (Exception e) {
return false;
}
}
/**객체에서 지정하는 프로퍼티 값을 읽는다.
* @param obj 객체
* @param name 프로퍼티 이름
* @return 객체의 프로퍼티 값
*/
public String get(Object obj, String name) {
try {
return BeanUtils.getProperty(obj, name);
} catch (Exception e) {
throw runtimeException(e);
}
}
public Object getValue(Object obj, String name) {
try {
return getDescriptor(obj, name)
.getReadMethod()
.invoke(obj);
} catch (Exception e) {
throw runtimeException(e);
}
}
/**객체에 지정하는 프로퍼티 값을 쓴다.
* @param obj 객체
* @param name 프로퍼티 이름
* @param val 프로퍼티 값
*/
public void set(Object obj, String name, Object val) {
try {
BeanUtils.setProperty(obj, name, val);
} catch (Exception e) {
throw runtimeException(e);
}
}
public PropertyDescriptor getDescriptor(Object obj, String name) {
try {
return PropertyUtils.getPropertyDescriptor(obj, name);
} catch (Exception e) {
throw runtimeException(e);
}
}
}