|
What this is
Other links
The source code
/* CVS ID: $Id: XMLResourceBundle.java,v 1.1.1.1 2002/10/02 18:42:54 wastl Exp $ */
package net.wastl.webmail.xml;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import net.wastl.webmail.server.WebMailServer;
/*
* XMLResourceBundle.java
*
* Created: Sun Mar 5 17:59:33 2000
*
* Copyright (C) 2000 Sebastian Schaffert
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/**
* A ResourceBundle implementation that uses a XML file to store the resources.
*
* @author Sebastian Schaffert
* @version
*/
public class XMLResourceBundle extends ResourceBundle {
protected boolean debug=false;
protected Document root;
protected String language;
protected Element elem_locale;
protected Element elem_common;
protected Element elem_default;
public XMLResourceBundle(String resourcefile, String lang) throws Exception {
DocumentBuilder parser=DocumentBuilderFactory.newInstance().newDocumentBuilder();
root = parser.parse("file://"+resourcefile);
language=lang;
NodeList nl=root.getElementsByTagName("COMMON");
if(nl.getLength()>0) {
elem_common=(Element)nl.item(0);
} else {
elem_common=null;
}
elem_locale=null;
elem_default=null;
/* Now the locale specific stuff; fallback to default if not possbile */
String default_lang=root.getDocumentElement().getAttribute("default");
if(debug) System.err.println("XMLResourceBundle ("+resourcefile+"): Default language '"+default_lang+"'.");
nl=root.getElementsByTagName("LOCALE");
for(int i=0;i<nl.getLength();i++) {
Element e=(Element)nl.item(i);
if(e.getAttribute("lang").equals(lang)) {
elem_locale=e;
}
if(e.getAttribute("lang").equals(default_lang)) {
elem_default=e;
}
}
}
protected String getResult(Element element, String key) {
NodeList nl=element.getElementsByTagName("RESOURCE");
for(int i=0;i<nl.getLength();i++) {
Element e=(Element)nl.item(i);
if(e.getAttribute("name").equals(key)) {
String s="";
NodeList textl=e.getChildNodes();
for(int j=0;j<textl.getLength();j++) {
if(debug) System.err.println("XMLResourceBundle ("+key+"): Type "+textl.item(j).getNodeName());
if(textl.item(j).getNodeName().equals("#text") ||
textl.item(j).getNodeName().equals("#cdata-section")) {
s+=textl.item(j).getNodeValue();
}
}
return s;
}
}
return null;
}
public Object handleGetObject(String key) {
String retval=null;
if(elem_locale != null) {
retval=getResult(elem_locale,key);
}
if(retval == null && elem_default != null) {
retval=getResult(elem_default,key);
}
if(retval == null && elem_common != null) {
retval=getResult(elem_common,key);
}
if(debug) System.err.println("XMLResourceBundle: "+key+" = "+retval);
return retval;
}
protected void getKeys(Element element, Hashtable hash) {
NodeList nl=element.getElementsByTagName("RESOURCE");
for(int i=0;i<nl.getLength();i++) {
hash.put(((Element)nl.item(i)).getAttribute("name"),"");
}
}
public Enumeration getKeys() {
Hashtable prop=new Hashtable();
if(elem_common != null) {
getKeys(elem_common,prop);
}
if(elem_default != null) {
getKeys(elem_default,prop);
}
if(elem_locale != null) {
getKeys(elem_locale,prop);
}
return prop.keys();
}
public static synchronized ResourceBundle getBundle(String name, Locale locale, ClassLoader cl) throws MissingResourceException {
String lang=locale.getLanguage();
ResourceBundle ret=null;
try {
ret=new XMLResourceBundle(WebMailServer.getServer().getProperty("webmail.template.path")+
System.getProperty("file.separator")+name+".xml",lang);
} catch(Exception ex) {
ex.printStackTrace();
throw new MissingResourceException("Resource not found",name,"");
}
return ret;
}
} // XMLResourceBundle
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.