KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > transformers > ResourceBundleReplacerFactory


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.transformers;
11
12 import java.util.*;
13 import java.io.*;
14
15 import org.mmbase.util.logging.*;
16 import org.mmbase.util.functions.*;
17
18
19 /**
20  * Factories new chartransformer based on {@link java.util.ResourceBundle}. The result transformers
21  * are based on {@link ChunkedTransformer}, so using the 'mode' argument it can be controlled what
22  * excactly must correspond to the resource bundle keys (e.g. words, lines, or the entire
23  * string). Defaults to words.
24  *
25  * @author Michiel Meeuwissen
26  * @since MMBase-1.8
27  * @version $Id: ResourceBundleReplacerFactory.java,v 1.4 2006/01/25 18:03:47 michiel Exp $
28  */

29
30 public class ResourceBundleReplacerFactory implements ParameterizedTransformerFactory {
31     private static final Logger log = Logging.getLoggerInstance(ResourceBundleReplacerFactory.class);
32
33
34     protected static final Parameter[] PARAMS = new Parameter[] {
35         new Parameter("basename", String JavaDoc.class, true),
36         new Parameter("mode", String JavaDoc.class),
37         Parameter.LOCALE
38     };
39
40     public Parameters createParameters() {
41         return new Parameters(PARAMS);
42     }
43
44     /**
45      * Creates a parameterized transformer.
46      */

47     public Transformer createTransformer(final Parameters parameters) {
48         parameters.checkRequiredParameters();
49         if (log.isDebugEnabled()) {
50             log.debug("Creating transformer, with " + parameters);
51         }
52         String JavaDoc baseName = (String JavaDoc) parameters.get("basename");
53         final ResourceBundle bundle = ResourceBundle.getBundle(baseName, (Locale) parameters.get(Parameter.LOCALE));
54         return new ResourceBundleReplacer(1, bundle, baseName);
55     }
56
57 }
58
59 class ResourceBundleReplacer extends ChunkedTransformer {
60     private final ResourceBundle bundle;
61     private final String JavaDoc name;
62     ResourceBundleReplacer(int mode, ResourceBundle bundle, String JavaDoc name) {
63         super(mode);
64         this.bundle = bundle;
65         this.name = name;
66     }
67     protected boolean replace(final String JavaDoc word, final Writer w, final Status status) throws IOException {
68          if (replaceFirstAll && status.used.contains(word)) {
69             w.write(word);
70             return false;
71         }
72         try {
73             w.write("" + bundle.getObject(word));
74             status.replaced++;
75             if (replaceFirstAll) status.used.add(word);
76             return true;
77         } catch (MissingResourceException mre) {
78             w.write(word);
79             return false;
80         }
81     }
82     protected String JavaDoc base() {
83         return name;
84     }
85 };
86
Popular Tags