diff --git a/src/main/java/cokr/xit/foundation/data/Property.java b/src/main/java/cokr/xit/foundation/data/Property.java new file mode 100644 index 0000000..13cb485 --- /dev/null +++ b/src/main/java/cokr/xit/foundation/data/Property.java @@ -0,0 +1,113 @@ +package cokr.xit.foundation.data; + +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; + } + + /**객체에서 지정하는 프로퍼티 값을 읽을 수 있는지 반환한다. + * @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); + } + + /**객체에 지정하는 프로퍼티 값을 쓴다. + * @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); + } + } + + /**객체에 지정하는 프로퍼티 값을 쓴다. + * @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); + } + } +} \ No newline at end of file