XMLResourceBundle.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:4k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: XMLResourceBundle.java,v 1.2 2000/04/06 08:02:02 wastl Exp $ */
  2. package net.wastl.webmail.xml;
  3. import java.util.*;
  4. import org.apache.xerces.framework.*;
  5. import org.apache.xerces.parsers.*;
  6. import org.w3c.dom.*;
  7. import net.wastl.webmail.server.WebMailServer;
  8. /*
  9.  * XMLResourceBundle.java
  10.  *
  11.  * Created: Sun Mar  5 17:59:33 2000
  12.  *
  13.  * Copyright (C) 2000 Sebastian Schaffert
  14.  * 
  15.  * This program is free software; you can redistribute it and/or
  16.  * modify it under the terms of the GNU General Public License
  17.  * as published by the Free Software Foundation; either version 2
  18.  * of the License, or (at your option) any later version.
  19.  * 
  20.  * This program is distributed in the hope that it will be useful,
  21.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  * GNU General Public License for more details.
  24.  * 
  25.  * You should have received a copy of the GNU General Public License
  26.  * along with this program; if not, write to the Free Software
  27.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  28.  */
  29. /**
  30.  * A ResourceBundle implementation that uses a XML file to store the resources.
  31.  *
  32.  * @author Sebastian Schaffert
  33.  * @version
  34.  */
  35. public class XMLResourceBundle extends ResourceBundle {
  36.     protected boolean debug=false;
  37.     protected Document root;
  38.     protected String language;
  39.     protected Element elem_locale;
  40.     protected Element elem_common;
  41.     protected Element elem_default;
  42.     public XMLResourceBundle(String resourcefile, String lang) throws Exception {
  43. DOMParser parser=new DOMParser();
  44. parser.parse(resourcefile);
  45. root = parser.getDocument(); 
  46. language=lang;
  47. NodeList nl=root.getElementsByTagName("COMMON");
  48. if(nl.getLength()>0) {
  49.     elem_common=(Element)nl.item(0);
  50. } else {
  51.     elem_common=null;
  52. }
  53. elem_locale=null;
  54. elem_default=null;
  55. /* Now the locale specific stuff; fallback to default if not possbile */
  56. String default_lang=root.getDocumentElement().getAttribute("default");
  57. if(debug) System.err.println("XMLResourceBundle ("+resourcefile+"): Default language '"+default_lang+"'.");
  58. nl=root.getElementsByTagName("LOCALE");
  59. for(int i=0;i<nl.getLength();i++) {
  60.     Element e=(Element)nl.item(i);
  61.     if(e.getAttribute("lang").equals(lang)) {
  62. elem_locale=e;
  63.     }
  64.     if(e.getAttribute("lang").equals(default_lang)) {
  65. elem_default=e;
  66.     }
  67. }
  68.     }
  69.     protected String getResult(Element element, String key) {
  70. NodeList nl=element.getElementsByTagName("RESOURCE");
  71. for(int i=0;i<nl.getLength();i++) {
  72.     Element e=(Element)nl.item(i);
  73.     if(e.getAttribute("name").equals(key)) {
  74. String s="";
  75. NodeList textl=e.getChildNodes();
  76. for(int j=0;j<textl.getLength();j++) {
  77.     if(debug) System.err.println("XMLResourceBundle ("+key+"): Type "+textl.item(j).getNodeName());
  78.     if(textl.item(j).getNodeName().equals("#text") ||
  79.        textl.item(j).getNodeName().equals("#cdata-section")) {
  80. s+=textl.item(j).getNodeValue();
  81.     }
  82. }
  83. return s;
  84.     }
  85. }
  86. return null;
  87.     }
  88.     
  89.     public Object handleGetObject(String key) {
  90. String retval=null;
  91. if(elem_locale != null) {
  92.     retval=getResult(elem_locale,key);
  93. }
  94. if(retval == null && elem_default != null) {
  95.     retval=getResult(elem_default,key);
  96. }
  97. if(retval == null && elem_common != null) {
  98.     retval=getResult(elem_common,key);
  99. }
  100. if(debug) System.err.println("XMLResourceBundle: "+key+" = "+retval);
  101. return retval;
  102.     }
  103.     protected void getKeys(Element element, Hashtable hash) {
  104. NodeList nl=element.getElementsByTagName("RESOURCE");
  105. for(int i=0;i<nl.getLength();i++) {
  106.     hash.put(((Element)nl.item(i)).getAttribute("name"),"");
  107. }
  108.     }
  109.     
  110.     public Enumeration getKeys() {
  111. Hashtable prop=new Hashtable();
  112. if(elem_common != null) {
  113.     getKeys(elem_common,prop);
  114. }
  115. if(elem_default != null) {
  116.     getKeys(elem_default,prop);
  117. }
  118. if(elem_locale != null) {
  119.     getKeys(elem_locale,prop);
  120. }
  121. return prop.keys();
  122.     }
  123.     public static synchronized ResourceBundle getBundle(String name, Locale locale, ClassLoader cl) throws MissingResourceException {
  124. String lang=locale.getLanguage();
  125. ResourceBundle ret=null;
  126. try {
  127.     ret=new XMLResourceBundle(WebMailServer.getServer().getProperty("webmail.template.path")+
  128.       System.getProperty("file.separator")+name+".xml",lang);
  129. } catch(Exception ex) {
  130.     ex.printStackTrace();
  131.     throw new MissingResourceException("Resource not found",name,"");
  132. }
  133. return ret;
  134.     }
  135. } // XMLResourceBundle