001: /*
002: * regain - A file search engine providing plenty of formats
003: * Copyright (C) 2004 Til Schneider
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: *
019: * Contact: Til Schneider, info@murfman.de
020: *
021: * CVS information:
022: * $RCSfile$
023: * $Source$
024: * $Date: 2005-08-10 08:26:23 +0200 (Mi, 10 Aug 2005) $
025: * $Author: til132 $
026: * $Revision: 154 $
027: */
028: package net.sf.regain.util.io;
029:
030: import java.net.URL;
031: import java.util.HashMap;
032: import java.util.Locale;
033:
034: /**
035: * Holds localizers for multiple locales.
036: *
037: * @author Til Schneider, www.murfman.de
038: */
039: public class MultiLocalizer {
040:
041: /** The factory to use for creating a localizer for a specific locale. */
042: private LocalizerFactory mFactory;
043:
044: /** Holds for a locale (Locale) a localizer (Localizer) */
045: private HashMap mLocalizerHash;
046:
047: /**
048: * Creates a new instance of MultiLocalizer.
049: *
050: * @param clazz The class to create the MultiLocalizer for.
051: */
052: public MultiLocalizer(Class clazz) {
053: mFactory = new ClassLocalizerFactory(clazz);
054: mLocalizerHash = new HashMap();
055: }
056:
057: /**
058: * Creates a new instance of MultiLocalizer.
059: *
060: * @param baseurl The URL to load the resource bundle from.
061: * @param basename The basename of the resource bundle to load.
062: */
063: public MultiLocalizer(URL baseurl, String basename) {
064: mFactory = new BaseLocalizerFactory(baseurl, basename);
065: mLocalizerHash = new HashMap();
066: }
067:
068: /**
069: * Gets the localizer for a specific locale.
070: *
071: * @param locale The locale to get the localizer for.
072: * @return The localizer.
073: */
074: public Localizer getLocalizer(Locale locale) {
075: Localizer localizer = (Localizer) mLocalizerHash.get(locale);
076: if (localizer == null) {
077: localizer = mFactory.createLocalizer(locale);
078: mLocalizerHash.put(locale, localizer);
079: }
080: return localizer;
081: }
082:
083: /**
084: * A factory to use for creating a localizer for a specific locale.
085: */
086: private interface LocalizerFactory {
087: /**
088: * Creates a localizer for a specific locale.
089: *
090: * @param locale The locale to create the localizer for.
091: * @return The created localizer.
092: */
093: public Localizer createLocalizer(Locale locale);
094: } // inner interface LocalizerFactory
095:
096: /**
097: * A factory that creates localizers for a specific class.
098: */
099: private class ClassLocalizerFactory implements LocalizerFactory {
100:
101: /** The class to create localizers for. */
102: private Class mClazz;
103:
104: /**
105: * Creates a new instance of ClassLocalizerFactory.
106: *
107: * @param clazz The class to create localizers for.
108: */
109: public ClassLocalizerFactory(Class clazz) {
110: mClazz = clazz;
111: }
112:
113: /**
114: * Creates a localizer for a specific locale.
115: *
116: * @param locale The locale to create the localizer for.
117: * @return The created localizer.
118: */
119: public Localizer createLocalizer(Locale locale) {
120: return new Localizer(mClazz, locale);
121: }
122:
123: } // inner class ClassLocalizerFactory
124:
125: /**
126: * A factory that creates localizers for a specific base.
127: */
128: private class BaseLocalizerFactory implements LocalizerFactory {
129:
130: /** The base URL where the properties files are located. */
131: private URL mBaseUrl;
132: /** The base name of the properties files. */
133: private String mBaseName;
134:
135: /**
136: * Creates a new instance of BaseLocalizerFactory.
137: *
138: * @param baseurl The base URL where the properties files are located.
139: * @param basename The base name of the properties files.
140: */
141: public BaseLocalizerFactory(URL baseurl, String basename) {
142: mBaseUrl = baseurl;
143: mBaseName = basename;
144: }
145:
146: /**
147: * Creates a localizer for a specific locale.
148: *
149: * @param locale The locale to create the localizer for.
150: * @return The created localizer.
151: */
152: public Localizer createLocalizer(Locale locale) {
153: return new Localizer(mBaseUrl, mBaseName, locale);
154: }
155:
156: } // inner class BaseLocalizerFactory
157:
158: }
|