Author: tchemit Date: 2008-04-27 12:40:27 +0000 (Sun, 27 Apr 2008) New Revision: 794 Modified: branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/Config.java branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleConfig.java branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleIdentityConfig.java Log: add copyFrom and copyTo method to bind config to another object via introspection. add constructor Modified: branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/Config.java =================================================================== --- branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/Config.java 2008-04-27 12:00:51 UTC (rev 793) +++ branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/Config.java 2008-04-27 12:40:27 UTC (rev 794) @@ -29,4 +29,8 @@ void setProperty(E key, Object value); + void copyFrom(Object src); + + void copyTo(Object dst); + } \ No newline at end of file Modified: branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleConfig.java =================================================================== --- branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleConfig.java 2008-04-27 12:00:51 UTC (rev 793) +++ branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleConfig.java 2008-04-27 12:40:27 UTC (rev 794) @@ -14,8 +14,13 @@ */ package org.codelutin.util.config; -import org.codelutin.util.config.Config; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import java.lang.reflect.InvocationTargetException; +import java.util.EnumMap; + /** * simple config implementation based on a Enum to obtain properties * @@ -23,12 +28,19 @@ */ public class SimpleConfig<E extends Enum<E>> implements Config<E> { + static protected final Log log = LogFactory.getLog(SimpleConfig.class); + protected java.util.EnumMap<E, Object> properties; public SimpleConfig(Class<E> klass) { this.properties = new java.util.EnumMap<E, Object>(klass); } + public SimpleConfig(Class<E> klass, EnumMap<E, Object> properties) { + this(klass); + setProperties(properties); + } + public java.util.EnumMap<E, Object> getProperties() { return properties.clone(); } @@ -41,12 +53,48 @@ public void setProperty(E key, Object value) { if (value == null && properties.containsKey(key)) { + // never keep a reference on a null value property properties.remove(key); } else { properties.put(key, value); } } + public void copyFrom(Object src) { + for (java.util.Map.Entry<E, Object> entry : properties.entrySet()) { + E key = entry.getKey(); + try { + Object value = BeanUtils.getProperty(src, key.name()); + setProperty(key, value); + } catch (IllegalAccessException e) { + //TODO + log.warn("could not retreave property " + key + " on object " + src, e); + } catch (InvocationTargetException e) { + //TODO + log.warn("could not retreave property " + key + " on object " + src, e); + } catch (NoSuchMethodException e) { + //TODO + log.warn("could not retreave property " + key + " on object " + src, e); + } + + } + } + + public void copyTo(Object dst) { + for (java.util.Map.Entry<E, Object> entry : properties.entrySet()) { + Object value = entry.getValue(); + try { + BeanUtils.setProperty(dst, entry.getKey().name(), value); + } catch (IllegalAccessException e) { + //TODO + log.warn("could not set property " + entry.getKey() + " to object " + dst, e); + } catch (InvocationTargetException e) { + //TODO + log.warn("could not set property " + entry.getKey() + " to object " + dst, e); + } + } + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); Modified: branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleIdentityConfig.java =================================================================== --- branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleIdentityConfig.java 2008-04-27 12:00:51 UTC (rev 793) +++ branches/lutinutil-sans-vcs/lutinutil/src/java/org/codelutin/util/config/SimpleIdentityConfig.java 2008-04-27 12:40:27 UTC (rev 794) @@ -18,6 +18,8 @@ import static org.codelutin.util.config.IdentityConfigProperty.firstName; import static org.codelutin.util.config.IdentityConfigProperty.lastName; +import java.util.EnumMap; + /** @author chemit */ public class SimpleIdentityConfig extends SimpleConfig<IdentityConfigProperty> implements IdentityConfig { @@ -32,6 +34,10 @@ setEmail(email); } + public SimpleIdentityConfig(EnumMap<IdentityConfigProperty, Object> properties) { + super(IdentityConfigProperty.class, properties); + } + public String getFirstName() { return (String) properties.get(firstName); }