1 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 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 .class, true), 36 new Parameter("mode", String .class), 37 Parameter.LOCALE 38 }; 39 40 public Parameters createParameters() { 41 return new Parameters(PARAMS); 42 } 43 44 47 public Transformer createTransformer(final Parameters parameters) { 48 parameters.checkRequiredParameters(); 49 if (log.isDebugEnabled()) { 50 log.debug("Creating transformer, with " + parameters); 51 } 52 String baseName = (String ) 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 name; 62 ResourceBundleReplacer(int mode, ResourceBundle bundle, String name) { 63 super(mode); 64 this.bundle = bundle; 65 this.name = name; 66 } 67 protected boolean replace(final String 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 base() { 83 return name; 84 } 85 }; 86 | Popular Tags |