<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<FONT color="green">003</FONT>     * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<FONT color="green">004</FONT>     * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<FONT color="green">005</FONT>     * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<FONT color="green">006</FONT>     * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<FONT color="green">007</FONT>     * the License. You may obtain a copy of the License at<a name="line.7"></a>
<FONT color="green">008</FONT>     *<a name="line.8"></a>
<FONT color="green">009</FONT>     *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<FONT color="green">012</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<FONT color="green">013</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<FONT color="green">014</FONT>     * See the license for the specific language governing permissions and<a name="line.14"></a>
<FONT color="green">015</FONT>     * limitations under the license.<a name="line.15"></a>
<FONT color="green">016</FONT>     */<a name="line.16"></a>
<FONT color="green">017</FONT>    package org.apache.logging.log4j.message;<a name="line.17"></a>
<FONT color="green">018</FONT>    <a name="line.18"></a>
<FONT color="green">019</FONT>    import org.apache.logging.log4j.status.StatusLogger;<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import java.io.IOException;<a name="line.21"></a>
<FONT color="green">022</FONT>    import java.io.ObjectInputStream;<a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Locale;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.MissingResourceException;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.ResourceBundle;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    /**<a name="line.27"></a>
<FONT color="green">028</FONT>     * This class is not the recommended way to Localize messages. It is provided to provide some level<a name="line.28"></a>
<FONT color="green">029</FONT>     * of compatibility with Log4j 1.x.<a name="line.29"></a>
<FONT color="green">030</FONT>     *<a name="line.30"></a>
<FONT color="green">031</FONT>     * The recommended way to localize messages is to simply log a message id. Log events should<a name="line.31"></a>
<FONT color="green">032</FONT>     * then be recorded without formatting into some kind of data store. The application that is<a name="line.32"></a>
<FONT color="green">033</FONT>     * used to read the events and display them to the user should also localize and format the<a name="line.33"></a>
<FONT color="green">034</FONT>     * messages for the end user.<a name="line.34"></a>
<FONT color="green">035</FONT>     */<a name="line.35"></a>
<FONT color="green">036</FONT>    public class LocalizedMessage extends ParameterizedMessage implements LoggerNameAwareMessage<a name="line.36"></a>
<FONT color="green">037</FONT>    {<a name="line.37"></a>
<FONT color="green">038</FONT>        private static final long serialVersionUID = 3893703791567290742L;<a name="line.38"></a>
<FONT color="green">039</FONT>    <a name="line.39"></a>
<FONT color="green">040</FONT>        private String bundleId;<a name="line.40"></a>
<FONT color="green">041</FONT>    <a name="line.41"></a>
<FONT color="green">042</FONT>        private transient ResourceBundle bundle;<a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>        private Locale locale;<a name="line.44"></a>
<FONT color="green">045</FONT>    <a name="line.45"></a>
<FONT color="green">046</FONT>        private transient StatusLogger logger = StatusLogger.getLogger();<a name="line.46"></a>
<FONT color="green">047</FONT>    <a name="line.47"></a>
<FONT color="green">048</FONT>        private String loggerName = null;<a name="line.48"></a>
<FONT color="green">049</FONT>    <a name="line.49"></a>
<FONT color="green">050</FONT>        /**<a name="line.50"></a>
<FONT color="green">051</FONT>         * The basic constructor.<a name="line.51"></a>
<FONT color="green">052</FONT>         */<a name="line.52"></a>
<FONT color="green">053</FONT>        public LocalizedMessage() {<a name="line.53"></a>
<FONT color="green">054</FONT>            super();<a name="line.54"></a>
<FONT color="green">055</FONT>            setup(null, null, null);<a name="line.55"></a>
<FONT color="green">056</FONT>        }<a name="line.56"></a>
<FONT color="green">057</FONT>    <a name="line.57"></a>
<FONT color="green">058</FONT>        public LocalizedMessage(String messagePattern, String[] stringArgs, Throwable throwable) {<a name="line.58"></a>
<FONT color="green">059</FONT>            super(messagePattern, stringArgs, throwable);<a name="line.59"></a>
<FONT color="green">060</FONT>            setup(null, null, null);<a name="line.60"></a>
<FONT color="green">061</FONT>        }<a name="line.61"></a>
<FONT color="green">062</FONT>    <a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>        public LocalizedMessage(String bundleId, String key, String[] stringArgs,<a name="line.64"></a>
<FONT color="green">065</FONT>                                Throwable throwable) {<a name="line.65"></a>
<FONT color="green">066</FONT>            super(key, stringArgs, throwable);<a name="line.66"></a>
<FONT color="green">067</FONT>            setup(bundleId, null, null);<a name="line.67"></a>
<FONT color="green">068</FONT>        }<a name="line.68"></a>
<FONT color="green">069</FONT>    <a name="line.69"></a>
<FONT color="green">070</FONT>        public LocalizedMessage(ResourceBundle bundle, String key, String[] stringArgs,<a name="line.70"></a>
<FONT color="green">071</FONT>                                Throwable throwable) {<a name="line.71"></a>
<FONT color="green">072</FONT>            super(key, stringArgs, throwable);<a name="line.72"></a>
<FONT color="green">073</FONT>            setup(null, bundle, null);<a name="line.73"></a>
<FONT color="green">074</FONT>        }<a name="line.74"></a>
<FONT color="green">075</FONT>    <a name="line.75"></a>
<FONT color="green">076</FONT>        public LocalizedMessage(String bundleId, Locale locale, String key, String[] stringArgs,<a name="line.76"></a>
<FONT color="green">077</FONT>                                Throwable throwable) {<a name="line.77"></a>
<FONT color="green">078</FONT>            super(key, stringArgs, throwable);<a name="line.78"></a>
<FONT color="green">079</FONT>            setup(bundleId, null, locale);<a name="line.79"></a>
<FONT color="green">080</FONT>        }<a name="line.80"></a>
<FONT color="green">081</FONT>    <a name="line.81"></a>
<FONT color="green">082</FONT>        public LocalizedMessage(ResourceBundle bundle, Locale locale, String key, String[] stringArgs,<a name="line.82"></a>
<FONT color="green">083</FONT>                                Throwable throwable) {<a name="line.83"></a>
<FONT color="green">084</FONT>            super(key, stringArgs, throwable);<a name="line.84"></a>
<FONT color="green">085</FONT>            setup(null, bundle, locale);<a name="line.85"></a>
<FONT color="green">086</FONT>        }<a name="line.86"></a>
<FONT color="green">087</FONT>    <a name="line.87"></a>
<FONT color="green">088</FONT>        public LocalizedMessage(Locale locale, String key, String[] stringArgs, Throwable throwable) {<a name="line.88"></a>
<FONT color="green">089</FONT>            super(key, stringArgs, throwable);<a name="line.89"></a>
<FONT color="green">090</FONT>            setup(null, null, locale);<a name="line.90"></a>
<FONT color="green">091</FONT>        }<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>    <a name="line.93"></a>
<FONT color="green">094</FONT>        /**<a name="line.94"></a>
<FONT color="green">095</FONT>         * &lt;p&gt;This method returns a LocalizedMessage which contains the arguments converted to String<a name="line.95"></a>
<FONT color="green">096</FONT>         * as well as an optional Throwable.&lt;/p&gt;<a name="line.96"></a>
<FONT color="green">097</FONT>         * &lt;p/&gt;<a name="line.97"></a>
<FONT color="green">098</FONT>         * &lt;p&gt;If the last argument is a Throwable and is NOT used up by a placeholder in the message<a name="line.98"></a>
<FONT color="green">099</FONT>         * pattern it is returned in LocalizedMessage.getThrowable() and won't be contained in the<a name="line.99"></a>
<FONT color="green">100</FONT>         * created String[].&lt;br/&gt;<a name="line.100"></a>
<FONT color="green">101</FONT>         * If it is used up ParameterizedMessage.getThrowable() will return null even if the last<a name="line.101"></a>
<FONT color="green">102</FONT>         * argument was a Throwable!&lt;/p&gt;<a name="line.102"></a>
<FONT color="green">103</FONT>         *<a name="line.103"></a>
<FONT color="green">104</FONT>         * @param messagePattern the message pattern that to be checked for placeholders.<a name="line.104"></a>
<FONT color="green">105</FONT>         * @param arguments      the argument array to be converted.<a name="line.105"></a>
<FONT color="green">106</FONT>         */<a name="line.106"></a>
<FONT color="green">107</FONT>        public LocalizedMessage(String messagePattern, Object[] arguments) {<a name="line.107"></a>
<FONT color="green">108</FONT>            super(messagePattern, arguments);<a name="line.108"></a>
<FONT color="green">109</FONT>            setup(null, null, null);<a name="line.109"></a>
<FONT color="green">110</FONT>        }<a name="line.110"></a>
<FONT color="green">111</FONT>    <a name="line.111"></a>
<FONT color="green">112</FONT>        public LocalizedMessage(String bundleId, String key, Object[] arguments) {<a name="line.112"></a>
<FONT color="green">113</FONT>            super(key, arguments);<a name="line.113"></a>
<FONT color="green">114</FONT>            setup(bundleId, null, null);<a name="line.114"></a>
<FONT color="green">115</FONT>        }<a name="line.115"></a>
<FONT color="green">116</FONT>    <a name="line.116"></a>
<FONT color="green">117</FONT>        public LocalizedMessage(ResourceBundle bundle, String key, Object[] arguments) {<a name="line.117"></a>
<FONT color="green">118</FONT>            super(key, arguments);<a name="line.118"></a>
<FONT color="green">119</FONT>            setup(null, bundle, null);<a name="line.119"></a>
<FONT color="green">120</FONT>        }<a name="line.120"></a>
<FONT color="green">121</FONT>    <a name="line.121"></a>
<FONT color="green">122</FONT>        public LocalizedMessage(String bundleId, Locale locale, String key, Object[] arguments) {<a name="line.122"></a>
<FONT color="green">123</FONT>            super(key, arguments);<a name="line.123"></a>
<FONT color="green">124</FONT>            setup(bundleId, null, locale);<a name="line.124"></a>
<FONT color="green">125</FONT>        }<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>        public LocalizedMessage(ResourceBundle bundle, Locale locale, String key, Object[] arguments) {<a name="line.127"></a>
<FONT color="green">128</FONT>            super(key, arguments);<a name="line.128"></a>
<FONT color="green">129</FONT>            setup(null, bundle, locale);<a name="line.129"></a>
<FONT color="green">130</FONT>        }<a name="line.130"></a>
<FONT color="green">131</FONT>    <a name="line.131"></a>
<FONT color="green">132</FONT>        public LocalizedMessage(Locale locale, String key, Object[] arguments) {<a name="line.132"></a>
<FONT color="green">133</FONT>            super(key, arguments);<a name="line.133"></a>
<FONT color="green">134</FONT>            setup(null, null, locale);<a name="line.134"></a>
<FONT color="green">135</FONT>        }<a name="line.135"></a>
<FONT color="green">136</FONT>    <a name="line.136"></a>
<FONT color="green">137</FONT>        public LocalizedMessage(String messagePattern, Object arg) {<a name="line.137"></a>
<FONT color="green">138</FONT>            super(messagePattern, arg);<a name="line.138"></a>
<FONT color="green">139</FONT>            setup(null, null, null);<a name="line.139"></a>
<FONT color="green">140</FONT>        }<a name="line.140"></a>
<FONT color="green">141</FONT>    <a name="line.141"></a>
<FONT color="green">142</FONT>        public LocalizedMessage(String bundleId, String key, Object arg) {<a name="line.142"></a>
<FONT color="green">143</FONT>            super(key, arg);<a name="line.143"></a>
<FONT color="green">144</FONT>            setup(bundleId, null, null);<a name="line.144"></a>
<FONT color="green">145</FONT>        }<a name="line.145"></a>
<FONT color="green">146</FONT>    <a name="line.146"></a>
<FONT color="green">147</FONT>        public LocalizedMessage(ResourceBundle bundle, String key, Object arg) {<a name="line.147"></a>
<FONT color="green">148</FONT>            super(key, arg);<a name="line.148"></a>
<FONT color="green">149</FONT>            setup(null, bundle, null);<a name="line.149"></a>
<FONT color="green">150</FONT>        }<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>        public LocalizedMessage(String bundleId, Locale locale, String key, Object arg) {<a name="line.152"></a>
<FONT color="green">153</FONT>            super(key, arg);<a name="line.153"></a>
<FONT color="green">154</FONT>            setup(bundleId, null, locale);<a name="line.154"></a>
<FONT color="green">155</FONT>        }<a name="line.155"></a>
<FONT color="green">156</FONT>    <a name="line.156"></a>
<FONT color="green">157</FONT>        public LocalizedMessage(ResourceBundle bundle, Locale locale, String key, Object arg) {<a name="line.157"></a>
<FONT color="green">158</FONT>            super(key, arg);<a name="line.158"></a>
<FONT color="green">159</FONT>            setup(null, bundle, locale);<a name="line.159"></a>
<FONT color="green">160</FONT>        }<a name="line.160"></a>
<FONT color="green">161</FONT>    <a name="line.161"></a>
<FONT color="green">162</FONT>        public LocalizedMessage(Locale locale, String key, Object arg) {<a name="line.162"></a>
<FONT color="green">163</FONT>            super(key, arg);<a name="line.163"></a>
<FONT color="green">164</FONT>            setup(null, null, locale);<a name="line.164"></a>
<FONT color="green">165</FONT>        }<a name="line.165"></a>
<FONT color="green">166</FONT>    <a name="line.166"></a>
<FONT color="green">167</FONT>        public LocalizedMessage(String messagePattern, Object arg1, Object arg2) {<a name="line.167"></a>
<FONT color="green">168</FONT>            super(messagePattern, arg1, arg2);<a name="line.168"></a>
<FONT color="green">169</FONT>            setup(null, null, null);<a name="line.169"></a>
<FONT color="green">170</FONT>        }<a name="line.170"></a>
<FONT color="green">171</FONT>    <a name="line.171"></a>
<FONT color="green">172</FONT>        public LocalizedMessage(String bundleId, String key, Object arg1, Object arg2) {<a name="line.172"></a>
<FONT color="green">173</FONT>            super(key, arg1, arg2);<a name="line.173"></a>
<FONT color="green">174</FONT>            setup(bundleId, null, null);<a name="line.174"></a>
<FONT color="green">175</FONT>        }<a name="line.175"></a>
<FONT color="green">176</FONT>    <a name="line.176"></a>
<FONT color="green">177</FONT>        public LocalizedMessage(ResourceBundle bundle, String key, Object arg1, Object arg2) {<a name="line.177"></a>
<FONT color="green">178</FONT>            super(key, arg1, arg2);<a name="line.178"></a>
<FONT color="green">179</FONT>            setup(null, bundle, null);<a name="line.179"></a>
<FONT color="green">180</FONT>        }<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>        public LocalizedMessage(String bundleId, Locale locale, String key, Object arg1, Object arg2) {<a name="line.182"></a>
<FONT color="green">183</FONT>            super(key, arg1, arg2);<a name="line.183"></a>
<FONT color="green">184</FONT>            setup(bundleId, null, locale);<a name="line.184"></a>
<FONT color="green">185</FONT>        }<a name="line.185"></a>
<FONT color="green">186</FONT>    <a name="line.186"></a>
<FONT color="green">187</FONT>        public LocalizedMessage(ResourceBundle bundle, Locale locale, String key, Object arg1,<a name="line.187"></a>
<FONT color="green">188</FONT>                                Object arg2) {<a name="line.188"></a>
<FONT color="green">189</FONT>            super(key, arg1, arg2);<a name="line.189"></a>
<FONT color="green">190</FONT>            setup(null, bundle, locale);<a name="line.190"></a>
<FONT color="green">191</FONT>        }<a name="line.191"></a>
<FONT color="green">192</FONT>    <a name="line.192"></a>
<FONT color="green">193</FONT>        public LocalizedMessage(Locale locale, String key, Object arg1, Object arg2) {<a name="line.193"></a>
<FONT color="green">194</FONT>            super(key, arg1, arg2);<a name="line.194"></a>
<FONT color="green">195</FONT>            setup(null, null, locale);<a name="line.195"></a>
<FONT color="green">196</FONT>        }<a name="line.196"></a>
<FONT color="green">197</FONT>    <a name="line.197"></a>
<FONT color="green">198</FONT>        /**<a name="line.198"></a>
<FONT color="green">199</FONT>         * Set the name of the Logger.<a name="line.199"></a>
<FONT color="green">200</FONT>         * @param name The name of the Logger.<a name="line.200"></a>
<FONT color="green">201</FONT>         */<a name="line.201"></a>
<FONT color="green">202</FONT>        public void setLoggerName(String name) {<a name="line.202"></a>
<FONT color="green">203</FONT>            this.loggerName = name;<a name="line.203"></a>
<FONT color="green">204</FONT>        }<a name="line.204"></a>
<FONT color="green">205</FONT>    <a name="line.205"></a>
<FONT color="green">206</FONT>        /**<a name="line.206"></a>
<FONT color="green">207</FONT>         * Return the name of the Logger.<a name="line.207"></a>
<FONT color="green">208</FONT>         * @return the name of the Logger.<a name="line.208"></a>
<FONT color="green">209</FONT>         */<a name="line.209"></a>
<FONT color="green">210</FONT>        public String getLoggerName() {<a name="line.210"></a>
<FONT color="green">211</FONT>            return this.loggerName;<a name="line.211"></a>
<FONT color="green">212</FONT>        }<a name="line.212"></a>
<FONT color="green">213</FONT>    <a name="line.213"></a>
<FONT color="green">214</FONT>        private void setup(String bundleId, ResourceBundle bundle, Locale locale) {<a name="line.214"></a>
<FONT color="green">215</FONT>            this.bundleId = bundleId;<a name="line.215"></a>
<FONT color="green">216</FONT>            this.bundle = bundle;<a name="line.216"></a>
<FONT color="green">217</FONT>            this.locale = locale;<a name="line.217"></a>
<FONT color="green">218</FONT>        }<a name="line.218"></a>
<FONT color="green">219</FONT>    <a name="line.219"></a>
<FONT color="green">220</FONT>        /**<a name="line.220"></a>
<FONT color="green">221</FONT>         * Return the formatted message after looking up the format in the resource bundle.<a name="line.221"></a>
<FONT color="green">222</FONT>         * @param messagePattern The key for the resource bundle or the pattern if the bundle doesn't contain the key.<a name="line.222"></a>
<FONT color="green">223</FONT>         * @param args The parameters.<a name="line.223"></a>
<FONT color="green">224</FONT>         * @return The formatted message String.<a name="line.224"></a>
<FONT color="green">225</FONT>         */<a name="line.225"></a>
<FONT color="green">226</FONT>        @Override<a name="line.226"></a>
<FONT color="green">227</FONT>        public String formatMessage(String messagePattern, String[] args) {<a name="line.227"></a>
<FONT color="green">228</FONT>            ResourceBundle bundle = this.bundle;<a name="line.228"></a>
<FONT color="green">229</FONT>            if (bundle == null) {<a name="line.229"></a>
<FONT color="green">230</FONT>                if (bundleId != null) {<a name="line.230"></a>
<FONT color="green">231</FONT>                    bundle = getBundle(bundleId, locale, false);<a name="line.231"></a>
<FONT color="green">232</FONT>                } else {<a name="line.232"></a>
<FONT color="green">233</FONT>                    bundle = getBundle(loggerName, locale, true);<a name="line.233"></a>
<FONT color="green">234</FONT>                }<a name="line.234"></a>
<FONT color="green">235</FONT>            }<a name="line.235"></a>
<FONT color="green">236</FONT>            String msgPattern = (bundle == null || !bundle.containsKey(messagePattern)) ?<a name="line.236"></a>
<FONT color="green">237</FONT>                messagePattern : bundle.getString(messagePattern);<a name="line.237"></a>
<FONT color="green">238</FONT>            return format(msgPattern, args);<a name="line.238"></a>
<FONT color="green">239</FONT>        }<a name="line.239"></a>
<FONT color="green">240</FONT>    <a name="line.240"></a>
<FONT color="green">241</FONT>        /**<a name="line.241"></a>
<FONT color="green">242</FONT>         * Override this to use a ResourceBundle.Control in Java 6<a name="line.242"></a>
<FONT color="green">243</FONT>         * @param key The key to the bundle.<a name="line.243"></a>
<FONT color="green">244</FONT>         * @param locale The locale to use when formatting the message.<a name="line.244"></a>
<FONT color="green">245</FONT>         * @param loop If true the key will be treated as a package or class name and a resource bundle will<a name="line.245"></a>
<FONT color="green">246</FONT>         * be located based on all or part of the package name. If false the key is expected to be the exact bundle id.<a name="line.246"></a>
<FONT color="green">247</FONT>         * @return The ResourceBundle.<a name="line.247"></a>
<FONT color="green">248</FONT>         */<a name="line.248"></a>
<FONT color="green">249</FONT>        protected ResourceBundle getBundle(String key, Locale locale, boolean loop) {<a name="line.249"></a>
<FONT color="green">250</FONT>            ResourceBundle rb = null;<a name="line.250"></a>
<FONT color="green">251</FONT>    <a name="line.251"></a>
<FONT color="green">252</FONT>            if (key == null) {<a name="line.252"></a>
<FONT color="green">253</FONT>                return null;<a name="line.253"></a>
<FONT color="green">254</FONT>            }<a name="line.254"></a>
<FONT color="green">255</FONT>            try {<a name="line.255"></a>
<FONT color="green">256</FONT>                if (locale != null) {<a name="line.256"></a>
<FONT color="green">257</FONT>                    rb = ResourceBundle.getBundle(key, locale);<a name="line.257"></a>
<FONT color="green">258</FONT>                } else {<a name="line.258"></a>
<FONT color="green">259</FONT>                    rb = ResourceBundle.getBundle(key);<a name="line.259"></a>
<FONT color="green">260</FONT>                }<a name="line.260"></a>
<FONT color="green">261</FONT>            } catch (MissingResourceException ex) {<a name="line.261"></a>
<FONT color="green">262</FONT>                if (!loop) {<a name="line.262"></a>
<FONT color="green">263</FONT>                    logger.debug("Unable to locate ResourceBundle " + key);<a name="line.263"></a>
<FONT color="green">264</FONT>                    return null;<a name="line.264"></a>
<FONT color="green">265</FONT>                }<a name="line.265"></a>
<FONT color="green">266</FONT>            }<a name="line.266"></a>
<FONT color="green">267</FONT>    <a name="line.267"></a>
<FONT color="green">268</FONT>            String substr = key;<a name="line.268"></a>
<FONT color="green">269</FONT>            int i;<a name="line.269"></a>
<FONT color="green">270</FONT>            while (rb == null &amp;&amp; (i = substr.lastIndexOf(".")) &gt; 0) {<a name="line.270"></a>
<FONT color="green">271</FONT>                substr = substr.substring(0, i);<a name="line.271"></a>
<FONT color="green">272</FONT>                try {<a name="line.272"></a>
<FONT color="green">273</FONT>                    if (locale != null) {<a name="line.273"></a>
<FONT color="green">274</FONT>                        rb = ResourceBundle.getBundle(substr, locale);<a name="line.274"></a>
<FONT color="green">275</FONT>                    } else {<a name="line.275"></a>
<FONT color="green">276</FONT>                        rb = ResourceBundle.getBundle(substr);<a name="line.276"></a>
<FONT color="green">277</FONT>                    }<a name="line.277"></a>
<FONT color="green">278</FONT>                } catch (MissingResourceException ex) {<a name="line.278"></a>
<FONT color="green">279</FONT>                    logger.debug("Unable to locate ResourceBundle " + substr);<a name="line.279"></a>
<FONT color="green">280</FONT>                }<a name="line.280"></a>
<FONT color="green">281</FONT>            }<a name="line.281"></a>
<FONT color="green">282</FONT>            return rb;<a name="line.282"></a>
<FONT color="green">283</FONT>        }<a name="line.283"></a>
<FONT color="green">284</FONT>    <a name="line.284"></a>
<FONT color="green">285</FONT>        private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {<a name="line.285"></a>
<FONT color="green">286</FONT>            stream.defaultReadObject();<a name="line.286"></a>
<FONT color="green">287</FONT>            bundle = null;<a name="line.287"></a>
<FONT color="green">288</FONT>            logger = StatusLogger.getLogger();<a name="line.288"></a>
<FONT color="green">289</FONT>        }<a name="line.289"></a>
<FONT color="green">290</FONT>    }<a name="line.290"></a>




























































</PRE>
</BODY>
</HTML>
