Hmm, I'm not sure your getting me, I'm refering to making the Configuration interface a proper Map via an extension of the Collection API's Map Interface and requiring all implementations to support that interface (Which could be facilitated through Abstraction/Polymorphism) with little impact to the existing usage.

http://jakarta.apache.org/commons/configuration/apidocs/org/apache/commons/configuration/Configuration.html

-Mark

Brent Verner wrote:

[2004-05-18 09:20] Mark R. Diggory said:
| Brent Verner wrote:
| | >[2004-05-18 08:43] Mark R. Diggory said:
| >| To extend the subject of refactoring. I want to be able to access | >| Configuration objects from EL references in JSP 2.0.
| >| | >| ${sessionScope.config.foo.bar}
| >
| >I do something similar _with_ properties configuration. The syntax
| >I use is
| > | > ${sessionScope.config['some.config.key']}
| >
| >after doing
| >
| > session.setAttribute("config",someMap);
| >
| >I'm not sure it is worth the effort to work around the "['...']"
| >syntax requirement/limitation, since the key/value configuration
| >would have to be copied into something that EL can address
| >directly (most simply a Map of Map [[of Map ] ...])
| >
| >cheers.
| > brent
| >
| | Yes, but maintaining a generic Map interface on the objects in the | configuration hierarchy would probably be very beneficial anywhere that | this similar approach of automation/reflection occurs. Would it not? It | probably would make for a simple backwards compatible refactoring.


  Yeah, that makes sense.  Here goes a sample impl. that looks like
it'd do what you want.

cheers
  b


import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.StringTokenizer;

public class x {
  public void insert(Map m, String key, String value){
    // XXX: will not account for non-separator '.' such as a key that looks like 
"some.key.adn[something.that.ya.don't.want.nested].whatever.else"
    Map rv = null;
    int dp = key.indexOf(".");
    String rest = null;
    String first = key;
    if( dp > 0 ){
      first = key.substring(0,dp);
      rest = key.substring(dp + 1);
    }
    rv = (Map)m.get(first);
    if( rv == null ){
      rv = new HashMap();
      m.put(first,rv);
    }
    if( rest != null ){
      insert(rv,rest,value);
    }
    else{
      rv.put(first,value);
    }
  }
  public Map blowItOut(Map m){
    Map rv = new HashMap();
    for( Iterator it = m.keySet().iterator(); it.hasNext(); ){
      String k = (String)it.next();
      String v = (String)m.get(k);
      insert(rv,k,v);
    }
    return rv;
  }


public void go(){ Map x = new HashMap(); Map top = null; x.put("a.b.c.d","abcd"); x.put("e.f.g","efgh"); x.put("h.i.j.k.l.m.n.o.p","hijklmnop"); x.put("q.r.s","qrs"); x.put("t.u.v","tuv"); x.put("w.x.y.and.z","wxyandz"); top = blowItOut(x); System.out.println(x); System.out.println(top); } public static void main(String[] args) throws Exception { x y = new x(); y.go(); } }


-- Mark Diggory Software Developer Harvard MIT Data Center http://www.hmdc.harvard.edu

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



Reply via email to