[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