> -----Original Message-----
> From: Berin Loritsch [mailto:[EMAIL PROTECTED]
> Sent: 12 December 2001 21:05
> To: Avalon Developers List
> Subject: Re: new method Configuration.containsAttribute() ?
> 
> Vincent Massol wrote:
> 
> > Ok. Here is my use case :
> >
> > <configurationFactory>
> >
> >   <bundle id="short name1"
> >           [language="language1"]
> >           [country="Country1"]>
> >
> >     /path/to/bundle1
> >
> >   </bundle>
> >
> > </configurationFactory>
> >
> > In the implementation code I'd like to take one action if no
> > language/country are specified and another if they are (because
behind
> > the scenes I need to call an API which has 2 signatures, one with a
> > Locale and one without - I don't want to get the default locale and
only
> > use the signature that accepts a locale as this would mean I
override
> > the default implementation of the API I'm referring to as I would
> > introduce my own logic).
> 
> 
> The single parameter method is only a shortcut for what you are really
> doing.  It is not your "own" logic per se.
> 
> In your case, the ResourceBundle.getBundle(String) method is exactly
the
> same as:
> 
>   getBundle(baseName, Locale.getDefault(),
> this.getClass().getClassLoader())
> 
> As it says directly in the JavaDocs.  The Locale is a bit different if
> you are not using the default because you have to have a language, but
> can further specify it with a country or variant.


hehe doing some extrapolation ... :) I had voluntarily not explained
what I was doing with the Locale in my previous email so that you would
not find a way around ... :) ... but apparently it failed ...

Actually, I'm not doing a ResourceBundle.getBundle() but using another
class which wraps around Bundle. However, I wanted the discussion to be
more generic and simply consider the case where I need to decide what to
do in my code based upon the fact that an attribute exist or not.

> 
> In this particular case, I might do something like this:
> 
> Locale defLocale = Locale.getDefault();
> String language = conf.getAttribute("language",
defLocale.getLanguage());
> String country = conf.getAttribute("country", defLocale.getCountry());
> 
> Locale usedLocale = new Locale(language, country);
> getBundle(baseName, usedLocale);
> 
> 
> Ideally, you would have a static constants interface that would define
> your
> default language/country:
> 
> interface Constants
> {
>      String DEFAULT_LANGUAGE = Locale.getDefault().getLanguage();
>      String DEFAULT_COUNTRY = Locale.getDefault().getCountry();
> }
> 
> 
> 
> > I can imagine lots of cases where you would need to verify if an
> > attribute exists because you may want to do something different if
it
> > does than if it does not.
> 
> 
> We would have to vote on adding the "boolean attributeExists()" method
> to Configuration.  It might not happen, and I am +0 on it.  I'm not
> going to stand in it's way, but not totally convinced it's necessary.
> 

The getChild() API has a signature that allows for returning null and
thus testing for existence. Why couldn't we have the same thing for
attributes. However, I'm not going to press this issue as I can always
use the 

null == getAttribute("key", null)

construct. Let's forget it then, until someone else needs it ... :)

Thanks for the help.
-Vincent

> 
> > Ok about immutability :)
> >
> > Forget about hashtable. Isn't there an ImmutableHashtable in a
utility
> > class anywhere that would have the same API save for the write
methods ?
> 
> 
> java.util.Collections.unmodifiableMap(Map)
> 
> And for this purpose is a hack.
> 
> --
> 
> "They that give up essential liberty to obtain a little temporary
safety
>   deserve neither liberty nor safety."
>                  - Benjamin Franklin
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:avalon-dev-
> [EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:avalon-dev-
> [EMAIL PROTECTED]>
> 




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

Reply via email to