<!DOCTYPE HTML>
<html lang="de">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">package org.apache.fulcrum.localization;</a>
<span class="sourceLineNo">002</span><a id="line.2"></a>
<span class="sourceLineNo">003</span><a id="line.3">/*</a>
<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this work for additional information</a>
<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">010</span><a id="line.10"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> *   http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">013</span><a id="line.13"> *</a>
<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">015</span><a id="line.15"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">018</span><a id="line.18"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
<span class="sourceLineNo">020</span><a id="line.20"> */</a>
<span class="sourceLineNo">021</span><a id="line.21"></a>
<span class="sourceLineNo">022</span><a id="line.22">import java.text.MessageFormat;</a>
<span class="sourceLineNo">023</span><a id="line.23">import java.util.HashMap;</a>
<span class="sourceLineNo">024</span><a id="line.24">import java.util.Locale;</a>
<span class="sourceLineNo">025</span><a id="line.25">import java.util.Map;</a>
<span class="sourceLineNo">026</span><a id="line.26">import java.util.MissingResourceException;</a>
<span class="sourceLineNo">027</span><a id="line.27">import java.util.ResourceBundle;</a>
<span class="sourceLineNo">028</span><a id="line.28"></a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.avalon.framework.activity.Initializable;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.avalon.framework.configuration.Configurable;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.avalon.framework.configuration.Configuration;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.apache.avalon.framework.configuration.ConfigurationException;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.apache.avalon.framework.logger.AbstractLogEnabled;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.apache.commons.lang3.StringUtils;</a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36">/**</a>
<span class="sourceLineNo">037</span><a id="line.37"> * &lt;p&gt;</a>
<span class="sourceLineNo">038</span><a id="line.38"> * This class is the single point of access to all localization</a>
<span class="sourceLineNo">039</span><a id="line.39"> * resources.  It caches different ResourceBundles for different</a>
<span class="sourceLineNo">040</span><a id="line.40"> * Locales.</a>
<span class="sourceLineNo">041</span><a id="line.41"> * &lt;/p&gt;</a>
<span class="sourceLineNo">042</span><a id="line.42"> *</a>
<span class="sourceLineNo">043</span><a id="line.43"> * &lt;p&gt;Usage example:&lt;/p&gt;</a>
<span class="sourceLineNo">044</span><a id="line.44"> *</a>
<span class="sourceLineNo">045</span><a id="line.45"> * &lt;pre&gt;</a>
<span class="sourceLineNo">046</span><a id="line.46"> * &lt;code&gt;</a>
<span class="sourceLineNo">047</span><a id="line.47"> * SimpleLocalizationService ls = (SimpleLocalizationService) TurbineServices</a>
<span class="sourceLineNo">048</span><a id="line.48"> *     .getInstance().getService(SimpleLocalizationService.SERVICE_NAME);</a>
<span class="sourceLineNo">049</span><a id="line.49"> * &lt;/code&gt;</a>
<span class="sourceLineNo">050</span><a id="line.50"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">051</span><a id="line.51"> *</a>
<span class="sourceLineNo">052</span><a id="line.52"> * &lt;p&gt;</a>
<span class="sourceLineNo">053</span><a id="line.53"> * Then call {@link #getString(String, Locale, String)}, or one of</a>
<span class="sourceLineNo">054</span><a id="line.54"> * two methods to retrieve a ResourceBundle:</a>
<span class="sourceLineNo">055</span><a id="line.55"> * &lt;/p&gt;</a>
<span class="sourceLineNo">056</span><a id="line.56"> *</a>
<span class="sourceLineNo">057</span><a id="line.57"> * &lt;ul&gt;</a>
<span class="sourceLineNo">058</span><a id="line.58"> * &lt;li&gt;getBundle("MyBundleName")&lt;/li&gt;</a>
<span class="sourceLineNo">059</span><a id="line.59"> * &lt;li&gt;getBundle("MyBundleName", Locale)&lt;/li&gt;</a>
<span class="sourceLineNo">060</span><a id="line.60"> * &lt;li&gt;etc.&lt;/li&gt;</a>
<span class="sourceLineNo">061</span><a id="line.61"> * &lt;/ul&gt;</a>
<span class="sourceLineNo">062</span><a id="line.62"> *</a>
<span class="sourceLineNo">063</span><a id="line.63"> * @author &lt;a href="mailto:jm@mediaphil.de"&gt;Jonas Maurus&lt;/a&gt;</a>
<span class="sourceLineNo">064</span><a id="line.64"> * @author &lt;a href="mailto:jon@latchkey.com"&gt;Jon S. Stevens&lt;/a&gt;</a>
<span class="sourceLineNo">065</span><a id="line.65"> * @author &lt;a href="mailto:novalidemail@foo.com"&gt;Frank Y. Kim&lt;/a&gt;</a>
<span class="sourceLineNo">066</span><a id="line.66"> * @author &lt;a href="mailto:dlr@finemaltcoding.com"&gt;Daniel Rall&lt;/a&gt;</a>
<span class="sourceLineNo">067</span><a id="line.67"> * @author &lt;a href="mailto:leonardr@collab.net"&gt;Leonard Richardson&lt;/a&gt;</a>
<span class="sourceLineNo">068</span><a id="line.68"> * @author &lt;a href="mailto:mcconnell@apache.org"&gt;Stephen McConnell&lt;/a&gt;</a>
<span class="sourceLineNo">069</span><a id="line.69"> * @author &lt;a href="mailto:tv@apache.org"&gt;Thomas Vandahl&lt;/a&gt;</a>
<span class="sourceLineNo">070</span><a id="line.70"> * @version $Id: DefaultLocalizationService.java 535465 2007-05-05 06:58:06Z tv $</a>
<span class="sourceLineNo">071</span><a id="line.71"> * </a>
<span class="sourceLineNo">072</span><a id="line.72"> * avalon.component name="localization" lifestyle="singleton"</a>
<span class="sourceLineNo">073</span><a id="line.73"> * avalon.service type="org.apache.fulcrum.localization.SimpleLocalizationService"</a>
<span class="sourceLineNo">074</span><a id="line.74"> */</a>
<span class="sourceLineNo">075</span><a id="line.75">public class SimpleLocalizationServiceImpl</a>
<span class="sourceLineNo">076</span><a id="line.76">    extends AbstractLogEnabled</a>
<span class="sourceLineNo">077</span><a id="line.77">    implements SimpleLocalizationService, Configurable, Initializable</a>
<span class="sourceLineNo">078</span><a id="line.78">{</a>
<span class="sourceLineNo">079</span><a id="line.79">    /** Key Prefix for our bundles */</a>
<span class="sourceLineNo">080</span><a id="line.80">    private static final String BUNDLES = "bundles";</a>
<span class="sourceLineNo">081</span><a id="line.81">    </a>
<span class="sourceLineNo">082</span><a id="line.82">    /**</a>
<span class="sourceLineNo">083</span><a id="line.83">     * The value to pass to &lt;code&gt;MessageFormat&lt;/code&gt; if a</a>
<span class="sourceLineNo">084</span><a id="line.84">     * &lt;code&gt;null&lt;/code&gt; reference is passed to &lt;code&gt;format()&lt;/code&gt;.</a>
<span class="sourceLineNo">085</span><a id="line.85">     */</a>
<span class="sourceLineNo">086</span><a id="line.86">    private static final Object[] NO_ARGS = new Object[0];</a>
<span class="sourceLineNo">087</span><a id="line.87">    </a>
<span class="sourceLineNo">088</span><a id="line.88">    /**</a>
<span class="sourceLineNo">089</span><a id="line.89">     * Bundle name keys a HashMap of the ResourceBundles in this</a>
<span class="sourceLineNo">090</span><a id="line.90">     * service (which is in turn keyed by Locale).</a>
<span class="sourceLineNo">091</span><a id="line.91">     */</a>
<span class="sourceLineNo">092</span><a id="line.92">    private HashMap&lt;String, HashMap&lt;Locale, ResourceBundle&gt;&gt; bundles = null;</a>
<span class="sourceLineNo">093</span><a id="line.93">    </a>
<span class="sourceLineNo">094</span><a id="line.94">    /**</a>
<span class="sourceLineNo">095</span><a id="line.95">     * The list of default bundles to search.</a>
<span class="sourceLineNo">096</span><a id="line.96">     */</a>
<span class="sourceLineNo">097</span><a id="line.97">    private String[] bundleNames = null;</a>
<span class="sourceLineNo">098</span><a id="line.98"></a>
<span class="sourceLineNo">099</span><a id="line.99">    /**</a>
<span class="sourceLineNo">100</span><a id="line.100">     * The name of the default locale to use (includes language and</a>
<span class="sourceLineNo">101</span><a id="line.101">     * country).</a>
<span class="sourceLineNo">102</span><a id="line.102">     */</a>
<span class="sourceLineNo">103</span><a id="line.103">    private Locale defaultLocale = null;</a>
<span class="sourceLineNo">104</span><a id="line.104">    </a>
<span class="sourceLineNo">105</span><a id="line.105">    /** The name of the default language to use. */</a>
<span class="sourceLineNo">106</span><a id="line.106">    private String defaultLanguage = null;</a>
<span class="sourceLineNo">107</span><a id="line.107">    </a>
<span class="sourceLineNo">108</span><a id="line.108">    /** The name of the default country to use. */</a>
<span class="sourceLineNo">109</span><a id="line.109">    private String defaultCountry = null;</a>
<span class="sourceLineNo">110</span><a id="line.110"></a>
<span class="sourceLineNo">111</span><a id="line.111">    /**</a>
<span class="sourceLineNo">112</span><a id="line.112">     * Creates a new instance.</a>
<span class="sourceLineNo">113</span><a id="line.113">     */</a>
<span class="sourceLineNo">114</span><a id="line.114">    public SimpleLocalizationServiceImpl()</a>
<span class="sourceLineNo">115</span><a id="line.115">    {</a>
<span class="sourceLineNo">116</span><a id="line.116">        bundles = new HashMap&lt;String, HashMap&lt;Locale, ResourceBundle&gt;&gt;();</a>
<span class="sourceLineNo">117</span><a id="line.117">    }</a>
<span class="sourceLineNo">118</span><a id="line.118"></a>
<span class="sourceLineNo">119</span><a id="line.119">    /**</a>
<span class="sourceLineNo">120</span><a id="line.120">     * Avalon lifecycle method</a>
<span class="sourceLineNo">121</span><a id="line.121">     * </a>
<span class="sourceLineNo">122</span><a id="line.122">     * {@link org.apache.avalon.framework.configuration.Configurable}</a>
<span class="sourceLineNo">123</span><a id="line.123">     * </a>
<span class="sourceLineNo">124</span><a id="line.124">     * @param conf the configuration</a>
<span class="sourceLineNo">125</span><a id="line.125">     * @throws ConfigurationException if failed to configure</a>
<span class="sourceLineNo">126</span><a id="line.126">     */</a>
<span class="sourceLineNo">127</span><a id="line.127">    @Override</a>
<span class="sourceLineNo">128</span><a id="line.128">        public void configure(Configuration conf) throws ConfigurationException</a>
<span class="sourceLineNo">129</span><a id="line.129">    {</a>
<span class="sourceLineNo">130</span><a id="line.130">        Locale jvmDefault = Locale.getDefault();</a>
<span class="sourceLineNo">131</span><a id="line.131">        defaultLanguage =</a>
<span class="sourceLineNo">132</span><a id="line.132">            conf</a>
<span class="sourceLineNo">133</span><a id="line.133">                .getAttribute(</a>
<span class="sourceLineNo">134</span><a id="line.134">                    "locale-default-language",</a>
<span class="sourceLineNo">135</span><a id="line.135">                    jvmDefault.getLanguage())</a>
<span class="sourceLineNo">136</span><a id="line.136">                .trim();</a>
<span class="sourceLineNo">137</span><a id="line.137">        defaultCountry =</a>
<span class="sourceLineNo">138</span><a id="line.138">            conf</a>
<span class="sourceLineNo">139</span><a id="line.139">                .getAttribute("locale-default-country", jvmDefault.getCountry())</a>
<span class="sourceLineNo">140</span><a id="line.140">                .trim();</a>
<span class="sourceLineNo">141</span><a id="line.141">        // FIXME! need to add bundle names</a>
<span class="sourceLineNo">142</span><a id="line.142">        getLogger().info(</a>
<span class="sourceLineNo">143</span><a id="line.143">            "initialized lang="</a>
<span class="sourceLineNo">144</span><a id="line.144">                + defaultLanguage</a>
<span class="sourceLineNo">145</span><a id="line.145">                + " country="</a>
<span class="sourceLineNo">146</span><a id="line.146">                + defaultCountry);</a>
<span class="sourceLineNo">147</span><a id="line.147">        final Configuration bundles = conf.getChild(BUNDLES, false);</a>
<span class="sourceLineNo">148</span><a id="line.148">        if (bundles != null)</a>
<span class="sourceLineNo">149</span><a id="line.149">        {</a>
<span class="sourceLineNo">150</span><a id="line.150">            Configuration[] nameVal = bundles.getChildren();</a>
<span class="sourceLineNo">151</span><a id="line.151">            String bundleName[] = new String[nameVal.length];</a>
<span class="sourceLineNo">152</span><a id="line.152">            for (int i = 0; i &lt; nameVal.length; i++)</a>
<span class="sourceLineNo">153</span><a id="line.153">            {</a>
<span class="sourceLineNo">154</span><a id="line.154">                String val = nameVal[i].getValue();</a>
<span class="sourceLineNo">155</span><a id="line.155">                getLogger().debug("Registered bundle " + val);</a>
<span class="sourceLineNo">156</span><a id="line.156">                bundleName[i] = val;</a>
<span class="sourceLineNo">157</span><a id="line.157">            }</a>
<span class="sourceLineNo">158</span><a id="line.158">            initBundleNames(bundleName);</a>
<span class="sourceLineNo">159</span><a id="line.159">        }</a>
<span class="sourceLineNo">160</span><a id="line.160">    }</a>
<span class="sourceLineNo">161</span><a id="line.161">    </a>
<span class="sourceLineNo">162</span><a id="line.162">    /**</a>
<span class="sourceLineNo">163</span><a id="line.163">     * Called the first time the Service is used.</a>
<span class="sourceLineNo">164</span><a id="line.164">     * </a>
<span class="sourceLineNo">165</span><a id="line.165">     * @throws Exception generic exception</a>
<span class="sourceLineNo">166</span><a id="line.166">     */</a>
<span class="sourceLineNo">167</span><a id="line.167">    @Override</a>
<span class="sourceLineNo">168</span><a id="line.168">        public void initialize() throws Exception</a>
<span class="sourceLineNo">169</span><a id="line.169">    {</a>
<span class="sourceLineNo">170</span><a id="line.170">        defaultLocale = new Locale(defaultLanguage, defaultCountry);</a>
<span class="sourceLineNo">171</span><a id="line.171">        if (getLogger().isInfoEnabled())</a>
<span class="sourceLineNo">172</span><a id="line.172">        {</a>
<span class="sourceLineNo">173</span><a id="line.173">            getLogger().info("Localization Service is Initialized now..");</a>
<span class="sourceLineNo">174</span><a id="line.174">        }</a>
<span class="sourceLineNo">175</span><a id="line.175">    }</a>
<span class="sourceLineNo">176</span><a id="line.176">    </a>
<span class="sourceLineNo">177</span><a id="line.177">    /**</a>
<span class="sourceLineNo">178</span><a id="line.178">     * Initialize list of default bundle names.</a>
<span class="sourceLineNo">179</span><a id="line.179">     *</a>
<span class="sourceLineNo">180</span><a id="line.180">     * @param intBundleNames set bundle names</a>
<span class="sourceLineNo">181</span><a id="line.181">     */</a>
<span class="sourceLineNo">182</span><a id="line.182">    protected void initBundleNames(String[] intBundleNames)</a>
<span class="sourceLineNo">183</span><a id="line.183">    {</a>
<span class="sourceLineNo">184</span><a id="line.184">        if (intBundleNames == null)</a>
<span class="sourceLineNo">185</span><a id="line.185">            bundleNames = new String[0];</a>
<span class="sourceLineNo">186</span><a id="line.186">        else</a>
<span class="sourceLineNo">187</span><a id="line.187">                bundleNames = intBundleNames;</a>
<span class="sourceLineNo">188</span><a id="line.188">    }</a>
<span class="sourceLineNo">189</span><a id="line.189">    </a>
<span class="sourceLineNo">190</span><a id="line.190">    /**</a>
<span class="sourceLineNo">191</span><a id="line.191">     * Retrieves the default language (specified in the config file).</a>
<span class="sourceLineNo">192</span><a id="line.192">     * </a>
<span class="sourceLineNo">193</span><a id="line.193">     * @return the default language</a>
<span class="sourceLineNo">194</span><a id="line.194">     */</a>
<span class="sourceLineNo">195</span><a id="line.195">    @Override</a>
<span class="sourceLineNo">196</span><a id="line.196">        public String getDefaultLanguage()</a>
<span class="sourceLineNo">197</span><a id="line.197">    {</a>
<span class="sourceLineNo">198</span><a id="line.198">        return defaultLanguage;</a>
<span class="sourceLineNo">199</span><a id="line.199">    }</a>
<span class="sourceLineNo">200</span><a id="line.200">    </a>
<span class="sourceLineNo">201</span><a id="line.201">    /**</a>
<span class="sourceLineNo">202</span><a id="line.202">     * Retrieves the default country (specified in the config file).</a>
<span class="sourceLineNo">203</span><a id="line.203">     * </a>
<span class="sourceLineNo">204</span><a id="line.204">     * @return the default country</a>
<span class="sourceLineNo">205</span><a id="line.205">     */</a>
<span class="sourceLineNo">206</span><a id="line.206">    @Override</a>
<span class="sourceLineNo">207</span><a id="line.207">        public String getDefaultCountry()</a>
<span class="sourceLineNo">208</span><a id="line.208">    {</a>
<span class="sourceLineNo">209</span><a id="line.209">        return defaultCountry;</a>
<span class="sourceLineNo">210</span><a id="line.210">    }</a>
<span class="sourceLineNo">211</span><a id="line.211">    </a>
<span class="sourceLineNo">212</span><a id="line.212">    /**</a>
<span class="sourceLineNo">213</span><a id="line.213">     * Retrieves the default Locale (as created from default</a>
<span class="sourceLineNo">214</span><a id="line.214">     * language and default country).</a>
<span class="sourceLineNo">215</span><a id="line.215">     * </a>
<span class="sourceLineNo">216</span><a id="line.216">     * @return the default locale</a>
<span class="sourceLineNo">217</span><a id="line.217">     */</a>
<span class="sourceLineNo">218</span><a id="line.218">    @Override</a>
<span class="sourceLineNo">219</span><a id="line.219">        public Locale getDefaultLocale()</a>
<span class="sourceLineNo">220</span><a id="line.220">    {</a>
<span class="sourceLineNo">221</span><a id="line.221">        return defaultLocale;</a>
<span class="sourceLineNo">222</span><a id="line.222">    }</a>
<span class="sourceLineNo">223</span><a id="line.223"></a>
<span class="sourceLineNo">224</span><a id="line.224">    /**</a>
<span class="sourceLineNo">225</span><a id="line.225">     * {@link org.apache.fulcrum.localization.SimpleLocalizationService#getDefaultBundleName()}</a>
<span class="sourceLineNo">226</span><a id="line.226">     * </a>
<span class="sourceLineNo">227</span><a id="line.227">     * @return the default bundle name</a>
<span class="sourceLineNo">228</span><a id="line.228">     */</a>
<span class="sourceLineNo">229</span><a id="line.229">    @Override</a>
<span class="sourceLineNo">230</span><a id="line.230">        public String getDefaultBundleName()</a>
<span class="sourceLineNo">231</span><a id="line.231">    {</a>
<span class="sourceLineNo">232</span><a id="line.232">        return (bundleNames.length &gt; 0 ? bundleNames[0] : "");</a>
<span class="sourceLineNo">233</span><a id="line.233">    }</a>
<span class="sourceLineNo">234</span><a id="line.234">    </a>
<span class="sourceLineNo">235</span><a id="line.235">    /**</a>
<span class="sourceLineNo">236</span><a id="line.236">     * {@link org.apache.fulcrum.localization.SimpleLocalizationService#getBundleNames()}</a>
<span class="sourceLineNo">237</span><a id="line.237">     * </a>
<span class="sourceLineNo">238</span><a id="line.238">     * @return list of bundle names available</a>
<span class="sourceLineNo">239</span><a id="line.239">     */</a>
<span class="sourceLineNo">240</span><a id="line.240">    @Override</a>
<span class="sourceLineNo">241</span><a id="line.241">        public String[] getBundleNames()</a>
<span class="sourceLineNo">242</span><a id="line.242">    {</a>
<span class="sourceLineNo">243</span><a id="line.243">        return bundleNames.clone();</a>
<span class="sourceLineNo">244</span><a id="line.244">    }</a>
<span class="sourceLineNo">245</span><a id="line.245">    </a>
<span class="sourceLineNo">246</span><a id="line.246">    /**</a>
<span class="sourceLineNo">247</span><a id="line.247">     * @see org.apache.fulcrum.localization.SimpleLocalizationService#getBundle()</a>
<span class="sourceLineNo">248</span><a id="line.248">     * </a>
<span class="sourceLineNo">249</span><a id="line.249">     * @return the default resource bundle</a>
<span class="sourceLineNo">250</span><a id="line.250">     */</a>
<span class="sourceLineNo">251</span><a id="line.251">    @Override</a>
<span class="sourceLineNo">252</span><a id="line.252">        public ResourceBundle getBundle()</a>
<span class="sourceLineNo">253</span><a id="line.253">    {</a>
<span class="sourceLineNo">254</span><a id="line.254">        return getBundle(getDefaultBundleName(), (Locale) null);</a>
<span class="sourceLineNo">255</span><a id="line.255">    }</a>
<span class="sourceLineNo">256</span><a id="line.256">    </a>
<span class="sourceLineNo">257</span><a id="line.257">    /**</a>
<span class="sourceLineNo">258</span><a id="line.258">     * @see org.apache.fulcrum.localization.SimpleLocalizationService#getBundle(java.lang.String)</a>
<span class="sourceLineNo">259</span><a id="line.259">     * </a>
<span class="sourceLineNo">260</span><a id="line.260">     * @param bundleName the name of a bundle</a>
<span class="sourceLineNo">261</span><a id="line.261">     * @return the resource bundle</a>
<span class="sourceLineNo">262</span><a id="line.262">     */</a>
<span class="sourceLineNo">263</span><a id="line.263">    @Override</a>
<span class="sourceLineNo">264</span><a id="line.264">        public ResourceBundle getBundle(String bundleName)</a>
<span class="sourceLineNo">265</span><a id="line.265">    {</a>
<span class="sourceLineNo">266</span><a id="line.266">        return getBundle(bundleName, (Locale) null);</a>
<span class="sourceLineNo">267</span><a id="line.267">    }</a>
<span class="sourceLineNo">268</span><a id="line.268">    </a>
<span class="sourceLineNo">269</span><a id="line.269">    /**</a>
<span class="sourceLineNo">270</span><a id="line.270">     * @see org.apache.fulcrum.localization.SimpleLocalizationService#getBundle(java.lang.String, java.util.Locale)</a>
<span class="sourceLineNo">271</span><a id="line.271">     * </a>
<span class="sourceLineNo">272</span><a id="line.272">     * This method returns a ResourceBundle for the given bundle name</a>
<span class="sourceLineNo">273</span><a id="line.273">     * and the given Locale.</a>
<span class="sourceLineNo">274</span><a id="line.274">     *</a>
<span class="sourceLineNo">275</span><a id="line.275">     * @param bundleName Name of bundle (or &lt;code&gt;null&lt;/code&gt; for the</a>
<span class="sourceLineNo">276</span><a id="line.276">     * default bundle).</a>
<span class="sourceLineNo">277</span><a id="line.277">     * @param locale The locale (or &lt;code&gt;null&lt;/code&gt; for the locale</a>
<span class="sourceLineNo">278</span><a id="line.278">     * indicated by the default language and country).</a>
<span class="sourceLineNo">279</span><a id="line.279">     * @return A localized ResourceBundle.</a>
<span class="sourceLineNo">280</span><a id="line.280">     */</a>
<span class="sourceLineNo">281</span><a id="line.281">    @Override</a>
<span class="sourceLineNo">282</span><a id="line.282">        public ResourceBundle getBundle(String bundleName, Locale locale)</a>
<span class="sourceLineNo">283</span><a id="line.283">    {</a>
<span class="sourceLineNo">284</span><a id="line.284">        // Assure usable inputs.</a>
<span class="sourceLineNo">285</span><a id="line.285">        bundleName =</a>
<span class="sourceLineNo">286</span><a id="line.286">            (bundleName == null ? getDefaultBundleName() : bundleName.trim());</a>
<span class="sourceLineNo">287</span><a id="line.287">        if (locale == null)</a>
<span class="sourceLineNo">288</span><a id="line.288">        {</a>
<span class="sourceLineNo">289</span><a id="line.289">            locale = getDefaultLocale();</a>
<span class="sourceLineNo">290</span><a id="line.290">        }</a>
<span class="sourceLineNo">291</span><a id="line.291">        // Find/retrieve/cache bundle.</a>
<span class="sourceLineNo">292</span><a id="line.292">        ResourceBundle rb = null;</a>
<span class="sourceLineNo">293</span><a id="line.293">        HashMap&lt;?, ?&gt; bundlesByLocale = (HashMap&lt;?, ?&gt;) bundles.get(bundleName);</a>
<span class="sourceLineNo">294</span><a id="line.294">        if (bundlesByLocale != null)</a>
<span class="sourceLineNo">295</span><a id="line.295">        {</a>
<span class="sourceLineNo">296</span><a id="line.296">            // Cache of bundles by locale for the named bundle exists.</a>
<span class="sourceLineNo">297</span><a id="line.297">            // Check the cache for a bundle corresponding to locale.</a>
<span class="sourceLineNo">298</span><a id="line.298">            rb = (ResourceBundle) bundlesByLocale.get(locale);</a>
<span class="sourceLineNo">299</span><a id="line.299">            if (rb == null)</a>
<span class="sourceLineNo">300</span><a id="line.300">            {</a>
<span class="sourceLineNo">301</span><a id="line.301">                // Not yet cached.</a>
<span class="sourceLineNo">302</span><a id="line.302">                rb = cacheBundle(bundleName, locale);</a>
<span class="sourceLineNo">303</span><a id="line.303">            }</a>
<span class="sourceLineNo">304</span><a id="line.304">        }</a>
<span class="sourceLineNo">305</span><a id="line.305">        else</a>
<span class="sourceLineNo">306</span><a id="line.306">        {</a>
<span class="sourceLineNo">307</span><a id="line.307">            rb = cacheBundle(bundleName, locale);</a>
<span class="sourceLineNo">308</span><a id="line.308">        }</a>
<span class="sourceLineNo">309</span><a id="line.309">        return rb;</a>
<span class="sourceLineNo">310</span><a id="line.310">    }</a>
<span class="sourceLineNo">311</span><a id="line.311">    </a>
<span class="sourceLineNo">312</span><a id="line.312">    /**</a>
<span class="sourceLineNo">313</span><a id="line.313">     * Caches the named bundle for fast lookups.  This operation is</a>
<span class="sourceLineNo">314</span><a id="line.314">     * relatively expensive in terms of memory use, but is optimized</a>
<span class="sourceLineNo">315</span><a id="line.315">     * for run-time speed in the usual case.</a>
<span class="sourceLineNo">316</span><a id="line.316">     *</a>
<span class="sourceLineNo">317</span><a id="line.317">     * @param bundleName Name of bundle (or &lt;code&gt;null&lt;/code&gt; for the</a>
<span class="sourceLineNo">318</span><a id="line.318">     * default bundle).</a>
<span class="sourceLineNo">319</span><a id="line.319">     * @param locale The locale (or &lt;code&gt;null&lt;/code&gt; for the locale</a>
<span class="sourceLineNo">320</span><a id="line.320">     * indicated by the default language and country).</a>
<span class="sourceLineNo">321</span><a id="line.321">     * @throws MissingResourceException Bundle not found.</a>
<span class="sourceLineNo">322</span><a id="line.322">     * @return a localized resource bundle</a>
<span class="sourceLineNo">323</span><a id="line.323">     */</a>
<span class="sourceLineNo">324</span><a id="line.324">    private synchronized ResourceBundle cacheBundle(</a>
<span class="sourceLineNo">325</span><a id="line.325">        String bundleName,</a>
<span class="sourceLineNo">326</span><a id="line.326">        Locale locale)</a>
<span class="sourceLineNo">327</span><a id="line.327">        throws MissingResourceException</a>
<span class="sourceLineNo">328</span><a id="line.328">    {</a>
<span class="sourceLineNo">329</span><a id="line.329">        HashMap&lt;Locale, ResourceBundle&gt; bundlesByLocale = (HashMap&lt;Locale, ResourceBundle&gt;) bundles.get(bundleName);</a>
<span class="sourceLineNo">330</span><a id="line.330">        ResourceBundle rb =</a>
<span class="sourceLineNo">331</span><a id="line.331">            (bundlesByLocale == null</a>
<span class="sourceLineNo">332</span><a id="line.332">                ? null</a>
<span class="sourceLineNo">333</span><a id="line.333">                : (ResourceBundle) bundlesByLocale.get(locale));</a>
<span class="sourceLineNo">334</span><a id="line.334">        if (rb == null)</a>
<span class="sourceLineNo">335</span><a id="line.335">        {</a>
<span class="sourceLineNo">336</span><a id="line.336">            bundlesByLocale =</a>
<span class="sourceLineNo">337</span><a id="line.337">                (bundlesByLocale == null</a>
<span class="sourceLineNo">338</span><a id="line.338">                    ? new HashMap&lt;Locale, ResourceBundle&gt;(3)</a>
<span class="sourceLineNo">339</span><a id="line.339">                    : new HashMap&lt;Locale, ResourceBundle&gt;(bundlesByLocale));</a>
<span class="sourceLineNo">340</span><a id="line.340">            try</a>
<span class="sourceLineNo">341</span><a id="line.341">            {</a>
<span class="sourceLineNo">342</span><a id="line.342">                rb = ResourceBundle.getBundle(bundleName, locale);</a>
<span class="sourceLineNo">343</span><a id="line.343">            }</a>
<span class="sourceLineNo">344</span><a id="line.344">            catch (MissingResourceException e)</a>
<span class="sourceLineNo">345</span><a id="line.345">            {</a>
<span class="sourceLineNo">346</span><a id="line.346">                rb = findBundleByLocale(bundleName, locale, bundlesByLocale);</a>
<span class="sourceLineNo">347</span><a id="line.347">                if (rb == null)</a>
<span class="sourceLineNo">348</span><a id="line.348">                {</a>
<span class="sourceLineNo">349</span><a id="line.349">                    throw (MissingResourceException) e.fillInStackTrace();</a>
<span class="sourceLineNo">350</span><a id="line.350">                }</a>
<span class="sourceLineNo">351</span><a id="line.351">            }</a>
<span class="sourceLineNo">352</span><a id="line.352">            if (rb != null)</a>
<span class="sourceLineNo">353</span><a id="line.353">            {</a>
<span class="sourceLineNo">354</span><a id="line.354">                // Cache bundle.</a>
<span class="sourceLineNo">355</span><a id="line.355">                bundlesByLocale.put(rb.getLocale(), rb);</a>
<span class="sourceLineNo">356</span><a id="line.356">                HashMap&lt;String, HashMap&lt;Locale, ResourceBundle&gt;&gt; bundlesByName </a>
<span class="sourceLineNo">357</span><a id="line.357">                        = new HashMap&lt;String, HashMap&lt;Locale, ResourceBundle&gt;&gt;(bundles);</a>
<span class="sourceLineNo">358</span><a id="line.358">                bundlesByName.put(bundleName, bundlesByLocale);</a>
<span class="sourceLineNo">359</span><a id="line.359">                this.bundles = bundlesByName;</a>
<span class="sourceLineNo">360</span><a id="line.360">            }</a>
<span class="sourceLineNo">361</span><a id="line.361">        }</a>
<span class="sourceLineNo">362</span><a id="line.362">        return rb;</a>
<span class="sourceLineNo">363</span><a id="line.363">    }</a>
<span class="sourceLineNo">364</span><a id="line.364">    </a>
<span class="sourceLineNo">365</span><a id="line.365">    /**</a>
<span class="sourceLineNo">366</span><a id="line.366">     * &lt;p&gt;Retrieves the bundle most closely matching first against the</a>
<span class="sourceLineNo">367</span><a id="line.367">     * supplied inputs, then against the defaults.&lt;/p&gt;</a>
<span class="sourceLineNo">368</span><a id="line.368">     *</a>
<span class="sourceLineNo">369</span><a id="line.369">     * &lt;p&gt;Use case: some clients send a HTTP Accept-Language header</a>
<span class="sourceLineNo">370</span><a id="line.370">     * with a value of only the language to use</a>
<span class="sourceLineNo">371</span><a id="line.371">     * (i.e. "Accept-Language: en"), and neglect to include a country.</a>
<span class="sourceLineNo">372</span><a id="line.372">     * When there is no bundle for the requested language, this method</a>
<span class="sourceLineNo">373</span><a id="line.373">     * can be called to try the default country (checking internally</a>
<span class="sourceLineNo">374</span><a id="line.374">     * to assure the requested criteria matches the default to avoid</a>
<span class="sourceLineNo">375</span><a id="line.375">     * disconnects between language and country).&lt;/p&gt;</a>
<span class="sourceLineNo">376</span><a id="line.376">     *</a>
<span class="sourceLineNo">377</span><a id="line.377">     * &lt;p&gt;Since we're really just guessing at possible bundles to use,</a>
<span class="sourceLineNo">378</span><a id="line.378">     * we don't ever throw &lt;code&gt;MissingResourceException&lt;/code&gt;.&lt;/p&gt;</a>
<span class="sourceLineNo">379</span><a id="line.379">     * </a>
<span class="sourceLineNo">380</span><a id="line.380">     * @param bundleName Name of bundle (or &lt;code&gt;null&lt;/code&gt; for the</a>
<span class="sourceLineNo">381</span><a id="line.381">     * default bundle).</a>
<span class="sourceLineNo">382</span><a id="line.382">     * @param locale The locale (or &lt;code&gt;null&lt;/code&gt; for the locale</a>
<span class="sourceLineNo">383</span><a id="line.383">     * indicated by the default language and country).</a>
<span class="sourceLineNo">384</span><a id="line.384">     * @param bundleByLocale map of locales and resource bundles</a>
<span class="sourceLineNo">385</span><a id="line.385">     * @return a localized resource bundle</a>
<span class="sourceLineNo">386</span><a id="line.386">     * </a>
<span class="sourceLineNo">387</span><a id="line.387">     */</a>
<span class="sourceLineNo">388</span><a id="line.388">    private ResourceBundle findBundleByLocale(</a>
<span class="sourceLineNo">389</span><a id="line.389">        String bundleName,</a>
<span class="sourceLineNo">390</span><a id="line.390">        Locale locale,</a>
<span class="sourceLineNo">391</span><a id="line.391">        Map&lt;Locale, ResourceBundle&gt; bundlesByLocale)</a>
<span class="sourceLineNo">392</span><a id="line.392">    {</a>
<span class="sourceLineNo">393</span><a id="line.393">        ResourceBundle rb = null;</a>
<span class="sourceLineNo">394</span><a id="line.394">        if (StringUtils.isEmpty(locale.getCountry())</a>
<span class="sourceLineNo">395</span><a id="line.395">            &amp;&amp; defaultLanguage.equals(locale.getLanguage()))</a>
<span class="sourceLineNo">396</span><a id="line.396">        {</a>
<span class="sourceLineNo">397</span><a id="line.397">            /*</a>
<span class="sourceLineNo">398</span><a id="line.398">             *            category.debug("Requested language '" + locale.getLanguage() +</a>
<span class="sourceLineNo">399</span><a id="line.399">             *                           "' matches default: Attempting to guess bundle " +</a>
<span class="sourceLineNo">400</span><a id="line.400">             *                           "using default country '" + defaultCountry + '\'');</a>
<span class="sourceLineNo">401</span><a id="line.401">             */</a>
<span class="sourceLineNo">402</span><a id="line.402">            Locale withDefaultCountry =</a>
<span class="sourceLineNo">403</span><a id="line.403">                new Locale(locale.getLanguage(), defaultCountry);</a>
<span class="sourceLineNo">404</span><a id="line.404">            rb = (ResourceBundle) bundlesByLocale.get(withDefaultCountry);</a>
<span class="sourceLineNo">405</span><a id="line.405">            if (rb == null)</a>
<span class="sourceLineNo">406</span><a id="line.406">            {</a>
<span class="sourceLineNo">407</span><a id="line.407">                rb = getBundleIgnoreException(bundleName, withDefaultCountry);</a>
<span class="sourceLineNo">408</span><a id="line.408">            }</a>
<span class="sourceLineNo">409</span><a id="line.409">        }</a>
<span class="sourceLineNo">410</span><a id="line.410">        else if (</a>
<span class="sourceLineNo">411</span><a id="line.411">            StringUtils.isEmpty(locale.getLanguage())</a>
<span class="sourceLineNo">412</span><a id="line.412">                &amp;&amp; defaultCountry.equals(locale.getCountry()))</a>
<span class="sourceLineNo">413</span><a id="line.413">        {</a>
<span class="sourceLineNo">414</span><a id="line.414">            Locale withDefaultLanguage =</a>
<span class="sourceLineNo">415</span><a id="line.415">                new Locale(defaultLanguage, locale.getCountry());</a>
<span class="sourceLineNo">416</span><a id="line.416">            rb = (ResourceBundle) bundlesByLocale.get(withDefaultLanguage);</a>
<span class="sourceLineNo">417</span><a id="line.417">            if (rb == null)</a>
<span class="sourceLineNo">418</span><a id="line.418">            {</a>
<span class="sourceLineNo">419</span><a id="line.419">                rb = getBundleIgnoreException(bundleName, withDefaultLanguage);</a>
<span class="sourceLineNo">420</span><a id="line.420">            }</a>
<span class="sourceLineNo">421</span><a id="line.421">        }</a>
<span class="sourceLineNo">422</span><a id="line.422">        </a>
<span class="sourceLineNo">423</span><a id="line.423">        if (rb == null &amp;&amp; !defaultLocale.equals(locale))</a>
<span class="sourceLineNo">424</span><a id="line.424">        {</a>
<span class="sourceLineNo">425</span><a id="line.425">            rb = getBundleIgnoreException(bundleName, defaultLocale);</a>
<span class="sourceLineNo">426</span><a id="line.426">        }</a>
<span class="sourceLineNo">427</span><a id="line.427">        return rb;</a>
<span class="sourceLineNo">428</span><a id="line.428">    }</a>
<span class="sourceLineNo">429</span><a id="line.429">    </a>
<span class="sourceLineNo">430</span><a id="line.430">    /**</a>
<span class="sourceLineNo">431</span><a id="line.431">     * Retrieves the bundle using the</a>
<span class="sourceLineNo">432</span><a id="line.432">     * &lt;code&gt;ResourceBundle.getBundle(String, Locale)&lt;/code&gt; method,</a>
<span class="sourceLineNo">433</span><a id="line.433">     * returning &lt;code&gt;null&lt;/code&gt; instead of throwing</a>
<span class="sourceLineNo">434</span><a id="line.434">     * &lt;code&gt;MissingResourceException&lt;/code&gt;.</a>
<span class="sourceLineNo">435</span><a id="line.435">     * </a>
<span class="sourceLineNo">436</span><a id="line.436">     * @param bundleName Name of bundle (or &lt;code&gt;null&lt;/code&gt; for the</a>
<span class="sourceLineNo">437</span><a id="line.437">     * default bundle).</a>
<span class="sourceLineNo">438</span><a id="line.438">     * @param locale The locale (or &lt;code&gt;null&lt;/code&gt; for the locale</a>
<span class="sourceLineNo">439</span><a id="line.439">     * indicated by the default language and country).</a>
<span class="sourceLineNo">440</span><a id="line.440">     */</a>
<span class="sourceLineNo">441</span><a id="line.441">    private final ResourceBundle getBundleIgnoreException(</a>
<span class="sourceLineNo">442</span><a id="line.442">        String bundleName,</a>
<span class="sourceLineNo">443</span><a id="line.443">        Locale locale)</a>
<span class="sourceLineNo">444</span><a id="line.444">    {</a>
<span class="sourceLineNo">445</span><a id="line.445">        try</a>
<span class="sourceLineNo">446</span><a id="line.446">        {</a>
<span class="sourceLineNo">447</span><a id="line.447">            return ResourceBundle.getBundle(bundleName, locale);</a>
<span class="sourceLineNo">448</span><a id="line.448">        }</a>
<span class="sourceLineNo">449</span><a id="line.449">        catch (MissingResourceException ignored)</a>
<span class="sourceLineNo">450</span><a id="line.450">        {</a>
<span class="sourceLineNo">451</span><a id="line.451">            return null;</a>
<span class="sourceLineNo">452</span><a id="line.452">        }</a>
<span class="sourceLineNo">453</span><a id="line.453">    }</a>
<span class="sourceLineNo">454</span><a id="line.454">    </a>
<span class="sourceLineNo">455</span><a id="line.455">    /**</a>
<span class="sourceLineNo">456</span><a id="line.456">     * This method sets the name of the first bundle in the search</a>
<span class="sourceLineNo">457</span><a id="line.457">     * list (the "default" bundle).</a>
<span class="sourceLineNo">458</span><a id="line.458">     *</a>
<span class="sourceLineNo">459</span><a id="line.459">     * @param defaultBundle Name of default bundle.</a>
<span class="sourceLineNo">460</span><a id="line.460">     */</a>
<span class="sourceLineNo">461</span><a id="line.461">    @Override</a>
<span class="sourceLineNo">462</span><a id="line.462">        public void setBundle(String defaultBundle)</a>
<span class="sourceLineNo">463</span><a id="line.463">    {</a>
<span class="sourceLineNo">464</span><a id="line.464">        if (bundleNames.length &gt; 0)</a>
<span class="sourceLineNo">465</span><a id="line.465">        {</a>
<span class="sourceLineNo">466</span><a id="line.466">            bundleNames[0] = defaultBundle;</a>
<span class="sourceLineNo">467</span><a id="line.467">        }</a>
<span class="sourceLineNo">468</span><a id="line.468">        else</a>
<span class="sourceLineNo">469</span><a id="line.469">        {</a>
<span class="sourceLineNo">470</span><a id="line.470">            synchronized (this)</a>
<span class="sourceLineNo">471</span><a id="line.471">            {</a>
<span class="sourceLineNo">472</span><a id="line.472">                if (bundleNames.length &lt;= 0)</a>
<span class="sourceLineNo">473</span><a id="line.473">                {</a>
<span class="sourceLineNo">474</span><a id="line.474">                    bundleNames = new String[] { defaultBundle };</a>
<span class="sourceLineNo">475</span><a id="line.475">                }</a>
<span class="sourceLineNo">476</span><a id="line.476">            }</a>
<span class="sourceLineNo">477</span><a id="line.477">        }</a>
<span class="sourceLineNo">478</span><a id="line.478">    }</a>
<span class="sourceLineNo">479</span><a id="line.479">    </a>
<span class="sourceLineNo">480</span><a id="line.480">    /**</a>
<span class="sourceLineNo">481</span><a id="line.481">     * </a>
<span class="sourceLineNo">482</span><a id="line.482">     * {@link org.apache.fulcrum.localization.SimpleLocalizationService#getString(String, Locale, String)}</a>
<span class="sourceLineNo">483</span><a id="line.483">     * @throws MissingResourceException Specified key cannot be matched.</a>
<span class="sourceLineNo">484</span><a id="line.484">     */</a>
<span class="sourceLineNo">485</span><a id="line.485">    @Override</a>
<span class="sourceLineNo">486</span><a id="line.486">        public String getString(String bundleName, Locale locale, String key)</a>
<span class="sourceLineNo">487</span><a id="line.487">      throws MissingResourceException</a>
<span class="sourceLineNo">488</span><a id="line.488">    {</a>
<span class="sourceLineNo">489</span><a id="line.489">        String value = null;</a>
<span class="sourceLineNo">490</span><a id="line.490">        if (locale == null)</a>
<span class="sourceLineNo">491</span><a id="line.491">        {</a>
<span class="sourceLineNo">492</span><a id="line.492">            locale = getDefaultLocale();</a>
<span class="sourceLineNo">493</span><a id="line.493">        }</a>
<span class="sourceLineNo">494</span><a id="line.494">        // Look for text in requested bundle.</a>
<span class="sourceLineNo">495</span><a id="line.495">        ResourceBundle rb = getBundle(bundleName, locale);</a>
<span class="sourceLineNo">496</span><a id="line.496">        value = getStringOrNull(rb, key);</a>
<span class="sourceLineNo">497</span><a id="line.497">        // Look for text in list of default bundles.</a>
<span class="sourceLineNo">498</span><a id="line.498">        if (value == null &amp;&amp; bundleNames.length &gt; 0)</a>
<span class="sourceLineNo">499</span><a id="line.499">        {</a>
<span class="sourceLineNo">500</span><a id="line.500">            String name;</a>
<span class="sourceLineNo">501</span><a id="line.501">            for (int i = 0; i &lt; bundleNames.length; i++)</a>
<span class="sourceLineNo">502</span><a id="line.502">            {</a>
<span class="sourceLineNo">503</span><a id="line.503">                name = bundleNames[i];</a>
<span class="sourceLineNo">504</span><a id="line.504">                //System.out.println("getString(): name=" + name +</a>
<span class="sourceLineNo">505</span><a id="line.505">                //                   ", locale=" + locale + ", i=" + i);</a>
<span class="sourceLineNo">506</span><a id="line.506">                if (!name.equals(bundleName))</a>
<span class="sourceLineNo">507</span><a id="line.507">                {</a>
<span class="sourceLineNo">508</span><a id="line.508">                    rb = getBundle(name, locale);</a>
<span class="sourceLineNo">509</span><a id="line.509">                    value = getStringOrNull(rb, key);</a>
<span class="sourceLineNo">510</span><a id="line.510">                    if (value != null)</a>
<span class="sourceLineNo">511</span><a id="line.511">                    {</a>
<span class="sourceLineNo">512</span><a id="line.512">                        locale = rb.getLocale();</a>
<span class="sourceLineNo">513</span><a id="line.513">                        break;</a>
<span class="sourceLineNo">514</span><a id="line.514">                    }</a>
<span class="sourceLineNo">515</span><a id="line.515">                }</a>
<span class="sourceLineNo">516</span><a id="line.516">            }</a>
<span class="sourceLineNo">517</span><a id="line.517">        }</a>
<span class="sourceLineNo">518</span><a id="line.518">        if (value == null)</a>
<span class="sourceLineNo">519</span><a id="line.519">        {</a>
<span class="sourceLineNo">520</span><a id="line.520">            String loc = locale.toString();</a>
<span class="sourceLineNo">521</span><a id="line.521">            String mesg =</a>
<span class="sourceLineNo">522</span><a id="line.522">                LocalizationService.SERVICE_NAME</a>
<span class="sourceLineNo">523</span><a id="line.523">                    + " noticed missing resource: "</a>
<span class="sourceLineNo">524</span><a id="line.524">                    + "bundleName="</a>
<span class="sourceLineNo">525</span><a id="line.525">                    + bundleName</a>
<span class="sourceLineNo">526</span><a id="line.526">                    + ", locale="</a>
<span class="sourceLineNo">527</span><a id="line.527">                    + loc</a>
<span class="sourceLineNo">528</span><a id="line.528">                    + ", key="</a>
<span class="sourceLineNo">529</span><a id="line.529">                    + key;</a>
<span class="sourceLineNo">530</span><a id="line.530">            getLogger().debug(mesg);</a>
<span class="sourceLineNo">531</span><a id="line.531">            // Text not found in requested or default bundles.</a>
<span class="sourceLineNo">532</span><a id="line.532">            throw new MissingResourceException(mesg, bundleName, key);</a>
<span class="sourceLineNo">533</span><a id="line.533">        }</a>
<span class="sourceLineNo">534</span><a id="line.534">        return value;</a>
<span class="sourceLineNo">535</span><a id="line.535">    }</a>
<span class="sourceLineNo">536</span><a id="line.536">    </a>
<span class="sourceLineNo">537</span><a id="line.537">    /**</a>
<span class="sourceLineNo">538</span><a id="line.538">     * Returns the value for the key in the default bundle and the default locale.</a>
<span class="sourceLineNo">539</span><a id="line.539">     * </a>
<span class="sourceLineNo">540</span><a id="line.540">     * @param key The key to retrieve the value for.</a>
<span class="sourceLineNo">541</span><a id="line.541">     * @return The value mapped to the key.</a>
<span class="sourceLineNo">542</span><a id="line.542">     */</a>
<span class="sourceLineNo">543</span><a id="line.543">    @Override</a>
<span class="sourceLineNo">544</span><a id="line.544">        public String getString(String key)</a>
<span class="sourceLineNo">545</span><a id="line.545">    {</a>
<span class="sourceLineNo">546</span><a id="line.546">        return getString(getDefaultBundleName(), getDefaultLocale(), key);</a>
<span class="sourceLineNo">547</span><a id="line.547">    }</a>
<span class="sourceLineNo">548</span><a id="line.548">    </a>
<span class="sourceLineNo">549</span><a id="line.549">    </a>
<span class="sourceLineNo">550</span><a id="line.550">    /**</a>
<span class="sourceLineNo">551</span><a id="line.551">     * Gets localized text from a bundle if it's there.  Otherwise,</a>
<span class="sourceLineNo">552</span><a id="line.552">     * returns &lt;code&gt;null&lt;/code&gt; (ignoring a possible</a>
<span class="sourceLineNo">553</span><a id="line.553">     * &lt;code&gt;MissingResourceException&lt;/code&gt;).</a>
<span class="sourceLineNo">554</span><a id="line.554">     * </a>
<span class="sourceLineNo">555</span><a id="line.555">     * @param rb resource bundle </a>
<span class="sourceLineNo">556</span><a id="line.556">     * @param key The key to retrieve the value for.</a>
<span class="sourceLineNo">557</span><a id="line.557">     * @return name of resource</a>
<span class="sourceLineNo">558</span><a id="line.558">     */</a>
<span class="sourceLineNo">559</span><a id="line.559">    protected final String getStringOrNull(ResourceBundle rb, String key)</a>
<span class="sourceLineNo">560</span><a id="line.560">    {</a>
<span class="sourceLineNo">561</span><a id="line.561">        if (rb != null)</a>
<span class="sourceLineNo">562</span><a id="line.562">        {</a>
<span class="sourceLineNo">563</span><a id="line.563">            try</a>
<span class="sourceLineNo">564</span><a id="line.564">            {</a>
<span class="sourceLineNo">565</span><a id="line.565">                return rb.getString(key);</a>
<span class="sourceLineNo">566</span><a id="line.566">            }</a>
<span class="sourceLineNo">567</span><a id="line.567">            catch (MissingResourceException ignored)</a>
<span class="sourceLineNo">568</span><a id="line.568">            {</a>
<span class="sourceLineNo">569</span><a id="line.569">                // ignore</a>
<span class="sourceLineNo">570</span><a id="line.570">            }</a>
<span class="sourceLineNo">571</span><a id="line.571">        }</a>
<span class="sourceLineNo">572</span><a id="line.572">        return null;</a>
<span class="sourceLineNo">573</span><a id="line.573">    }</a>
<span class="sourceLineNo">574</span><a id="line.574">    </a>
<span class="sourceLineNo">575</span><a id="line.575">    /**</a>
<span class="sourceLineNo">576</span><a id="line.576">     * {@link org.apache.fulcrum.localization.SimpleLocalizationService#format(String, Locale, String, Object)}</a>
<span class="sourceLineNo">577</span><a id="line.577">     * @param bundleName the bundle name</a>
<span class="sourceLineNo">578</span><a id="line.578">     * @param locale locale</a>
<span class="sourceLineNo">579</span><a id="line.579">     * @param key key to lookup</a>
<span class="sourceLineNo">580</span><a id="line.580">     * @param arg1 bundle arguments</a>
<span class="sourceLineNo">581</span><a id="line.581">     */</a>
<span class="sourceLineNo">582</span><a id="line.582">    @Override</a>
<span class="sourceLineNo">583</span><a id="line.583">        public String format(</a>
<span class="sourceLineNo">584</span><a id="line.584">        String bundleName,</a>
<span class="sourceLineNo">585</span><a id="line.585">        Locale locale,</a>
<span class="sourceLineNo">586</span><a id="line.586">        String key,</a>
<span class="sourceLineNo">587</span><a id="line.587">        Object arg1)</a>
<span class="sourceLineNo">588</span><a id="line.588">    {</a>
<span class="sourceLineNo">589</span><a id="line.589">        return format(bundleName, locale, key, new Object[] { arg1 });</a>
<span class="sourceLineNo">590</span><a id="line.590">    }</a>
<span class="sourceLineNo">591</span><a id="line.591">    </a>
<span class="sourceLineNo">592</span><a id="line.592">    /* (non-Javadoc)</a>
<span class="sourceLineNo">593</span><a id="line.593">     * @see org.apache.fulcrum.localization.SimpleLocalizationService#format(java.lang.String, java.util.Locale, java.lang.String, java.lang.Object, java.lang.Object)</a>
<span class="sourceLineNo">594</span><a id="line.594">     */</a>
<span class="sourceLineNo">595</span><a id="line.595">    @Override</a>
<span class="sourceLineNo">596</span><a id="line.596">        public String format(</a>
<span class="sourceLineNo">597</span><a id="line.597">        String bundleName,</a>
<span class="sourceLineNo">598</span><a id="line.598">        Locale locale,</a>
<span class="sourceLineNo">599</span><a id="line.599">        String key,</a>
<span class="sourceLineNo">600</span><a id="line.600">        Object arg1,</a>
<span class="sourceLineNo">601</span><a id="line.601">        Object arg2)</a>
<span class="sourceLineNo">602</span><a id="line.602">    {</a>
<span class="sourceLineNo">603</span><a id="line.603">        return format(bundleName, locale, key, new Object[] { arg1, arg2 });</a>
<span class="sourceLineNo">604</span><a id="line.604">    }</a>
<span class="sourceLineNo">605</span><a id="line.605">    </a>
<span class="sourceLineNo">606</span><a id="line.606">    /**</a>
<span class="sourceLineNo">607</span><a id="line.607">     * Looks up the value for &lt;code&gt;key&lt;/code&gt; in the</a>
<span class="sourceLineNo">608</span><a id="line.608">     * &lt;code&gt;ResourceBundle&lt;/code&gt; referenced by</a>
<span class="sourceLineNo">609</span><a id="line.609">     * &lt;code&gt;bundleName&lt;/code&gt;, then formats that value for the</a>
<span class="sourceLineNo">610</span><a id="line.610">     * specified &lt;code&gt;Locale&lt;/code&gt; using &lt;code&gt;args&lt;/code&gt;.</a>
<span class="sourceLineNo">611</span><a id="line.611">     * </a>
<span class="sourceLineNo">612</span><a id="line.612">     * If &lt;code&gt;locale&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;, {@link #getDefaultLocale()} will be checked.</a>
<span class="sourceLineNo">613</span><a id="line.613">     * If &lt;code&gt;bundleName&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;, {@link #getDefaultBundleName()} will be checked (cft. {@link #getBundle(String, Locale)}.</a>
<span class="sourceLineNo">614</span><a id="line.614">     *</a>
<span class="sourceLineNo">615</span><a id="line.615">     * @return Localized, formatted text identified by</a>
<span class="sourceLineNo">616</span><a id="line.616">     * &lt;code&gt;key&lt;/code&gt;.</a>
<span class="sourceLineNo">617</span><a id="line.617">     */</a>
<span class="sourceLineNo">618</span><a id="line.618">    @Override</a>
<span class="sourceLineNo">619</span><a id="line.619">        public String format(</a>
<span class="sourceLineNo">620</span><a id="line.620">        String bundleName,</a>
<span class="sourceLineNo">621</span><a id="line.621">        Locale locale,</a>
<span class="sourceLineNo">622</span><a id="line.622">        String key,</a>
<span class="sourceLineNo">623</span><a id="line.623">        Object[] args)</a>
<span class="sourceLineNo">624</span><a id="line.624">    {</a>
<span class="sourceLineNo">625</span><a id="line.625">        // When formatting Date objects and such, MessageFormat</a>
<span class="sourceLineNo">626</span><a id="line.626">        // cannot have a null Locale.</a>
<span class="sourceLineNo">627</span><a id="line.627">        Locale formatLocale = (locale == null) ? getDefaultLocale() : locale; </a>
<span class="sourceLineNo">628</span><a id="line.628">        String value = getString(bundleName, locale, key);</a>
<span class="sourceLineNo">629</span><a id="line.629">        </a>
<span class="sourceLineNo">630</span><a id="line.630">        Object[] formatArgs = (args == null) ? NO_ARGS : args;</a>
<span class="sourceLineNo">631</span><a id="line.631">        </a>
<span class="sourceLineNo">632</span><a id="line.632">        MessageFormat messageFormat = new MessageFormat(value, formatLocale);</a>
<span class="sourceLineNo">633</span><a id="line.633">        return messageFormat.format(formatArgs);</a>
<span class="sourceLineNo">634</span><a id="line.634">    }</a>
<span class="sourceLineNo">635</span><a id="line.635">}</a>




























































</pre>
</div>
</main>
</body>
</html>
