import java.util.ResourceBundle; import java.util.Locale; import java.util.HashMap; import java.net.URL; import java.io.File; import java.io.InputStream; import java.io.FileInputStream; import java.io.Reader; import java.io.FileReader; import java.io.InputStreamReader; import java.io.BufferedReader; //import org.apache.xerces.parsers.DOMParser; import org.xml.sax.InputSource; //import org.xml.sax.XMLReader; //import org.xml.sax.XMLReaderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Dictionary { private ResourceBundle glidict = null; private ResourceBundle perldict = null; private MacroFile core_macros = null; private MacroFile aux_macros = null; private HashMap metadata = null; private Locale locale = null; private String lang = null; static final private int GLIDICT = 0; static final private int GLIHELP = 1; static final private int COREDM = 2; static final private int AUXDM = 3; static final private int TUTORIALS = 4; static final private int PERLMODULES = 5; static final private int METADATA = 6; protected String gsdl_home = null; private ClassLoader classloader = null; public Dictionary(String lang) { this.lang = lang; this.locale = new Locale(lang); if (this.locale==null) { this.locale = Locale.getDefault(); } gsdl_home = System.getProperty("GSDLHOME"); if (gsdl_home == null) { System.err.println("Error: GSDLHOME is null!!"); System.exit(1); } this.classloader = new MyClassLoader(this.getClass().getClassLoader()); } public String get(String key) { return get(key, null); } public String get(String key, String args) { int pos = key.indexOf("::"); if (pos==-1) { System.err.println("invalid key: "+key); return ""; } String package_name = key.substring(0, pos); String key_name = key.substring(pos+2); //System.err.println("pack = "+package_name+", key="+key_name); if (package_name.equals("glidict")) { loadDictionary(GLIDICT); return getDictionaryText(glidict, key_name, args); } if (package_name.equals("coredm")) { loadDictionary(COREDM); return getMacroText(core_macros, key_name); } if (package_name.equals("perlmodules")) { loadDictionary(PERLMODULES); return getDictionaryText(perldict, key_name, args); } if (package_name.equals("auxdm")) { loadDictionary(AUXDM); return getMacroText(aux_macros, key_name); } if (package_name.equals("glihelp")) { return ""; } if (package_name.equals("tutorials")) { return ""; } if (package_name.equals("metadata")) { pos = key_name.indexOf("."); String namespace = key_name.substring(0,pos); String element = key_name.substring(pos+1); if (loadMetadata(namespace)) { return getMetadataName(namespace, element); } return key_name; } System.err.println("invalid package name "+package_name); return ""; } public String getDictionaryText(ResourceBundle dictionary, String key, String args) { try { String initial_raw = dictionary.getString(key); // convert to unicode, copied from gatherer dictionary String initial = new String(initial_raw.getBytes("ISO-8859-1"), "UTF-8"); if (args == null || args.equals("")) { return initial; } String [] args_array = args.split(";"); // If the string contains arguments we have to insert them. String complete = ""; // While we still have initial string left. while(initial.length() > 0 && initial.indexOf('{') != -1 && initial.indexOf('}') != -1) { // Remove preamble int opening = initial.indexOf('{'); int closing = initial.indexOf('}'); complete = complete + initial.substring(0, opening); // Parse arg_num String arg_str = initial.substring(opening + 1, closing); int arg_num = Integer.parseInt(arg_str); if(closing + 1 < initial.length()) { initial = initial.substring(closing + 1); } else { initial = ""; } // Insert argument if(0 <= arg_num && arg_num < args_array.length) { complete = complete + args_array[arg_num]; } } return complete + initial; //this.raw = ResourceBundle.getBundle(this.resource, this.locale); } catch (Exception e) { //System.err.println("Dictionary: couldn't locate a resource bundle for "+resource); } System.err.println("no value found for key "+key+" in dictionary "+dictionary.toString()); return ""; } private String getMacroText(MacroFile macros, String key) { return macros.get(key); } private String getMetadataName(String namespace, String element_name) { Element meta_set = (Element)metadata.get(namespace); String default_value = namespace+"."+element_name; if (meta_set == null) { return default_value; } Element this_elem = getNamedChild(meta_set, "Element", "name", element_name); if (this_elem == null) { return default_value; } Element this_lang = getNamedChild(this_elem, "Language", "code", this.lang); if (this_lang == null) { this_lang = this_elem; // sometimes have attributes as children of element } // need to modify this if we get multiple languages at the same level Element label_att = getNamedChild(this_lang, "Attribute", "name", "label"); if (label_att == null) { return default_value; } return namespace+"."+getTextValue(label_att); } private Element getNamedChild(Element parent, String child_element, String att_name, String att_value) { NodeList elements = parent.getElementsByTagName(child_element); for (int i=0; i"); return; } Dictionary dict = new Dictionary(args[0]); System.err.println("glidict::General.OK " +dict.get("glidict::General.OK")); System.err.println("glidict::Autofilter.Order_Tooltip "+ dict.get("glidict::Autofilter.Order_Tooltip")); System.err.println("macros _Global:textdefaulttitle_ "+dict.get("coredm::_Global:textdefaulttitle_")); System.err.println("macros _about:textsubcols2_ "+dict.get("coredm::_about:textsubcols2_")); System.err.println("macros _home:textdescrcollector_ "+dict.get("auxdm::_home:textdescrcollector_")); //System.err.println("", dict.get("")); //System.err.println("", dict.get("")); } }