[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    Re: [configuration] Accessing from EL script
From:       "Mark R. Diggory" <mdiggory () latte ! harvard ! edu>
Date:       2004-05-19 13:03:06
Message-ID: 40AB5B0A.2070608 () latte ! harvard ! edu
[Download RAW message or body]

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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic