Hi All,

Not sure if this is the correct place to post this, but I've attached a patch for the commons-configuration for some classes I've written to implement a DynaBean/DynaClass wrapper interface for a Configuration object.

Is this project still active? I can't seem to find downloads for it and the maven repository seems out of date?

Kind regards...

--
Ricardo Gladwell
Index: src/java/org/apache/commons/configuration/ConfigurationDynaBean.java
===================================================================
RCS file: src/java/org/apache/commons/configuration/ConfigurationDynaBean.java
diff -N src/java/org/apache/commons/configuration/ConfigurationDynaBean.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ src/java/org/apache/commons/configuration/ConfigurationDynaBean.java        1 Jan 
1970 00:00:00 -0000
@@ -0,0 +1,184 @@
+package org.apache.commons.configuration;
+
+import org.apache.commons.beanutils.BasicDynaBean;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The <tt>ConfigurationDynaBean</tt> dynamically reads and writes
+ * configurations properties from a configuration-collection
+ * [EMAIL PROTECTED] org.apache.commons.configuration.Configuration}
+ * instance. It also defines a [EMAIL PROTECTED] java.util.Map} interface
+ * so that it can be used in JSP 2.0 Expression Language
+ * expressions.
+ * @author ricardo
+ */
+public class ConfigurationDynaBean extends BasicDynaBean implements Map {
+
+    private final static Log log = LogFactory.getLog(ConfigurationDynaBean.class);
+
+    Configuration configuration;
+    ConfigurationMap map;
+
+    public ConfigurationDynaBean(Configuration configuration) {
+        super(new ConfigurationDynaClass(configuration));
+        if(log.isTraceEnabled()) 
log.trace("ConfigurationDynaBean("+configuration+")");
+        this.configuration = configuration;
+        map = new ConfigurationMap(configuration);
+    }
+
+    /**
+     * 
+     * @param isConfigured
+     */
+    public void set(String name, Object value) {
+        if(log.isTraceEnabled()) log.trace("set("+name+","+value+")");
+        configuration.setProperty(name, value);
+    }
+
+    public Object get(String name) {
+        if(log.isTraceEnabled()) log.trace("get("+name+")");
+        try {
+            Object result = configuration.getProperty(name);
+            if(result == null) {
+                // return configuration subset
+                Configuration subset = configuration.subset(name);
+                if(subset != null)
+                    result = new ConfigurationDynaBean(configuration.subset(name));
+                else {
+                    // TODO do something meaningful here
+                }
+            }
+            if(log.isDebugEnabled()) log.debug(name+"=["+result+"]");
+            return result;
+        } catch (Exception e) {
+            log.warn("Error reading configuration key=["+name+"]",e);
+            return null;
+        }
+    }
+
+       /**
+        * @return Returns the map.
+        */
+       public Map getMap() {
+               return new ConfigurationMap(configuration);
+       }
+
+    /**
+        * @param map The map to set.
+        */
+       public void setMap(Map map) {
+               // read properties
+       }
+
+       /**
+        * 
+        */
+       public void clear() {
+               map.clear();
+       }
+
+       /**
+        * @param key
+        * @return
+        */
+       public boolean containsKey(Object key) {
+               return map.containsKey(key);
+       }
+
+       /**
+        * @param value
+        * @return
+        */
+       public boolean containsValue(Object value) {
+               return map.containsValue(value);
+       }
+
+       /**
+        * @return
+        */
+       public Set entrySet() {
+               return map.entrySet();
+       }
+    
+       /**
+        * @see java.lang.Object#equals(java.lang.Object)
+        */
+       public boolean equals(Object obj) {
+               return map.equals(obj);
+       }
+
+       /**
+        * @param key
+        * @return
+        */
+       public Object get(Object key) {
+               return get((String) key);
+       }
+
+       /**
+        * @see java.lang.Object#hashCode()
+        */
+       public int hashCode() {
+               return map.hashCode();
+       }
+
+       /**
+        * @return
+        */
+       public boolean isEmpty() {
+               return map.isEmpty();
+       }
+
+       /**
+        * @return
+        */
+       public Set keySet() {
+               return map.keySet();
+       }
+
+       /**
+        * @param key
+        * @param value
+        * @return
+        */
+       public Object put(Object key, Object value) {
+               set((String) key, value);
+        return get(key);
+       }
+
+       /**
+        * @param t
+        */
+       public void putAll(Map t) {
+               map.putAll(t);
+       }
+
+       /**
+        * @param key
+        * @return
+        */
+       public Object remove(Object key) {
+               return map.remove(key);
+       }
+
+       /**
+        * @return
+        */
+       public int size() {
+               return map.size();
+       }
+
+       /**
+        * @return
+        */
+       public Collection values() {
+               return map.values();
+       }
+
+}
Index: src/java/org/apache/commons/configuration/ConfigurationDynaClass.java
===================================================================
RCS file: src/java/org/apache/commons/configuration/ConfigurationDynaClass.java
diff -N src/java/org/apache/commons/configuration/ConfigurationDynaClass.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ src/java/org/apache/commons/configuration/ConfigurationDynaClass.java       1 Jan 
1970 00:00:00 -0000
@@ -0,0 +1,53 @@
+package org.apache.commons.configuration;
+
+import java.util.Iterator;
+import java.util.ArrayList;
+
+import org.apache.commons.beanutils.BasicDynaClass;
+import org.apache.commons.beanutils.DynaProperty;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author ricardo
+ */
+public class ConfigurationDynaClass extends BasicDynaClass {
+
+    private final static Log log = LogFactory.getLog(ConfigurationDynaClass.class);
+
+    Configuration configuration;
+
+    public ConfigurationDynaClass(Configuration configuration) {
+        super();
+        if(log.isTraceEnabled()) 
log.trace("ConfigurationDynaClass("+configuration+")");
+        this.configuration = configuration;
+    }
+
+    public DynaProperty getDynaProperty(String name) {
+        if(log.isTraceEnabled()) log.trace("getDynaProperty("+name+")");
+        Object value = configuration.getProperty(name);
+        DynaProperty property;
+        if(value != null)
+            property = new DynaProperty(name,value.getClass());
+        else property = new DynaProperty(name,String.class);
+        if(log.isDebugEnabled()) log.debug(property);
+        return property;
+    }
+
+    public DynaProperty[] getDynaProperties() {
+        if(log.isTraceEnabled()) log.trace("getDynaProperties()");
+        Iterator keys = configuration.getKeys();
+        ArrayList properties = new ArrayList();
+        while(keys.hasNext()) {
+            String key = (String) keys.next();
+            DynaProperty property = getDynaProperty(key);
+            properties.add(property);
+        }
+        DynaProperty[] propertyArray = new DynaProperty[properties.size()];
+        properties.toArray(propertyArray);
+        if(log.isDebugEnabled()) log.debug("Found "+properties.size()+" properties.");
+        return propertyArray; 
+    }
+
+}
Index: src/java/org/apache/commons/configuration/ConfigurationEntrySet.java
===================================================================
RCS file: src/java/org/apache/commons/configuration/ConfigurationEntrySet.java
diff -N src/java/org/apache/commons/configuration/ConfigurationEntrySet.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ src/java/org/apache/commons/configuration/ConfigurationEntrySet.java        1 Jan 
1970 00:00:00 -0000
@@ -0,0 +1,65 @@
+package org.apache.commons.configuration;
+
+import java.util.AbstractSet;
+import java.util.Iterator;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author ricardo
+ */
+class ConfigurationEntrySet extends AbstractSet {
+
+    private final static Log log = LogFactory.getLog(ConfigurationEntrySet.class);
+
+    class ConfigurationEntrySetIterator implements Iterator {
+
+        Iterator keys;
+
+        public ConfigurationEntrySetIterator() {
+               keys = configuration.getKeys();
+        }
+
+        public boolean hasNext() {
+            return keys.hasNext();
+         }
+
+        public Object next() {
+            return keys.next();
+         }
+
+         public void remove() {
+               keys.remove();
+         }
+
+    }
+
+    Configuration configuration;
+
+    public ConfigurationEntrySet(Configuration configuration) {
+        if(log.isTraceEnabled()) 
log.trace("ConfigurationEntrySet("+configuration+")");
+        this.configuration = configuration;
+    }
+
+    /**
+        * @see java.util.Collection#size()
+        */
+       public int size() {
+        if(log.isTraceEnabled()) log.trace("size()");
+        int count = 0;
+               Iterator iterator = configuration.getKeys();
+        while(iterator.hasNext()) count++;
+        return count;
+       }
+
+       /**
+        * @see java.util.Collection#iterator()
+        */
+       public Iterator iterator() {
+        if(log.isTraceEnabled()) log.trace("iterator()");
+               return new ConfigurationEntrySetIterator();
+       }
+
+}
Index: src/java/org/apache/commons/configuration/ConfigurationMap.java
===================================================================
RCS file: src/java/org/apache/commons/configuration/ConfigurationMap.java
diff -N src/java/org/apache/commons/configuration/ConfigurationMap.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ src/java/org/apache/commons/configuration/ConfigurationMap.java     1 Jan 1970 
00:00:00 -0000
@@ -0,0 +1,26 @@
+package org.apache.commons.configuration;
+
+import java.util.AbstractMap;
+import java.util.Set;
+
+import org.apache.commons.configuration.Configuration;
+
+/**
+ * @author ricardo
+ */
+class ConfigurationMap extends AbstractMap {
+
+    Configuration configuration;
+
+    public ConfigurationMap(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+       /**
+        * @see java.util.Map#entrySet()
+        */
+       public Set entrySet() {
+               return new ConfigurationEntrySet(configuration);
+       }
+
+}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to