1 12 package com.tonbeller.wcf.format; 13 14 import java.io.IOException ; 15 import java.net.URL ; 16 import java.util.Locale ; 17 18 import org.apache.commons.digester.Digester; 19 import org.apache.commons.digester.xmlrules.DigesterLoader; 20 import org.apache.log4j.Logger; 21 import org.xml.sax.InputSource ; 22 import org.xml.sax.SAXException ; 23 24 import com.tonbeller.tbutils.res.Resources; 25 import com.tonbeller.wcf.utils.SoftException; 26 27 32 public class FormatterFactory { 33 private static Logger logger = Logger.getLogger(FormatterFactory.class); 34 35 private FormatterFactory() {} 36 37 40 public static Formatter instance(Locale locale) { 41 URL defaultXml = Formatter.class.getResource("config.xml"); 42 Formatter formatter = new Formatter(); 43 fillFormatter(formatter, locale, defaultXml); 44 String s = Resources.instance().getOptionalString("wcf.formatter.config.xml", null); 45 if (s != null) { 46 URL analyseXml = Formatter.class.getResource(s); 47 fillFormatter(formatter, locale, analyseXml); 48 } 49 50 return formatter; 51 } 52 53 private static void fillFormatter(Formatter formatter, Locale locale, URL configXml) { 54 55 if (locale == null) 56 locale = Locale.getDefault(); 57 58 URL rulesXml = Formatter.class.getResource("rules.xml"); 59 Digester digester = DigesterLoader.createDigester(rulesXml); 60 digester.setValidating(false); 61 digester.push(formatter); 62 try { 63 digester.parse(new InputSource (configXml.toExternalForm())); 64 } catch (IOException e) { 65 logger.error("exception caught", e); 66 throw new SoftException(e); 67 } catch (SAXException e) { 68 logger.error("exception caught", e); 69 throw new SoftException(e); 70 } 71 formatter.setLocale(locale); 72 } 73 74 75 } 76 | Popular Tags |