[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:22:16
Message-ID: 40AB5F88.1000500 () latte ! harvard ! edu
[Download RAW message or body]

To further my point, with no effort on the EL side, Configuration can be 
made probable using the Collection API such that

${sessionScope.configAttribute["foo.bar"]} and 
${sessionScope.configAttribute.foo.bar}

can both be resolved. To actually make this possible, one also needs to 
provide a hierarchical context to the configuration such that the 
following is possible.

Configuration config = session.getAttribute("configAttribute");
Collection subcontext = (Collection)config.get("foo");
Object value = subcontext.get("bar");

This doesn't mean you can't still do:

Configuration config = ...;
double d = config.getDouble("foo.bar");

Its just facilitated differently in the Collection methods where a 
simple recursive parse/search algorithm would be required.

I'll provide a patch for this so you have an example...

Mark R. Diggory wrote:

> 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