зеркало из https://github.com/mozilla/gecko-dev.git
114 строки
3.2 KiB
Java
114 строки
3.2 KiB
Java
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
* the License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* The Original Code is the Grendel mail/news client.
|
|
*
|
|
* The Initial Developer of the Original Code is Giao Nguyen
|
|
* <grail@cafebabe.org>. Portions created by Giao Nguyen are Copyright
|
|
* (C) 1999 Giao Nguyen. All Rights Reserved.
|
|
*
|
|
* Contributors: Morgan Schweers <morgan@vixen.com>
|
|
*/
|
|
|
|
package grendel.ui;
|
|
|
|
|
|
import java.util.Properties;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.awt.Container;
|
|
|
|
import javax.swing.JComponent;
|
|
|
|
import org.w3c.dom.Node;
|
|
import org.w3c.dom.Element;
|
|
|
|
public abstract class XMLWidgetBuilder {
|
|
/**
|
|
* The properties bundle that the builder will reference to for
|
|
* things like getReferencedLabel.
|
|
*/
|
|
protected Properties properties;
|
|
|
|
/**
|
|
* Reference point into the CLASSPATH for locating the XML file.
|
|
*/
|
|
protected Class ref;
|
|
|
|
/**
|
|
* Process the node.
|
|
*
|
|
* @param node the node tho be processed
|
|
* @param component the parent component that the node will be added to
|
|
* (if applicable)
|
|
*/
|
|
protected abstract void processNode(Node node, JComponent component);
|
|
|
|
/**
|
|
* Set the reference point for URL location.
|
|
*
|
|
* @param ref the reference point for local urls to be loaded from.
|
|
*/
|
|
public void setReference(Class ref) {
|
|
this.ref = ref;
|
|
}
|
|
|
|
/**
|
|
* Set the element as the item containing configuration for the
|
|
* builder. This would usually be the link tag in the head.
|
|
*
|
|
* @param config the element containing configuration data
|
|
*/
|
|
public void setConfiguration(Element config) {
|
|
try {
|
|
URL linkURL;
|
|
Class local = ((ref == null) ? getClass() : ref);;
|
|
// get the string properties
|
|
if (config.getAttribute("href") != null
|
|
&& config.getAttribute("role").equals("stringprops")
|
|
&& config.getTagName().equals("link")) {
|
|
|
|
linkURL = local.getResource(config.getAttribute("href"));
|
|
properties = new Properties();
|
|
if (linkURL != null) properties.load(linkURL.openStream());
|
|
}
|
|
} catch (IOException io) {
|
|
io.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get a label referenced by the string properties file.
|
|
* @param current the element to process
|
|
* @param attr the attribute to look up
|
|
* @return the string as post lookup, or the string pre lookup if
|
|
* the lookup failed
|
|
*/
|
|
public String getReferencedLabel(Element current, String attr) {
|
|
String label = current.getAttribute(attr);
|
|
|
|
if (properties == null) return label;
|
|
|
|
// if it starts with a '$' we crossreference to properties
|
|
if (label != null && label.length() > 0
|
|
&& label.charAt(0) == '$') {
|
|
String key = label.substring(1);
|
|
label = properties.getProperty(key, label);
|
|
}
|
|
|
|
return label;
|
|
}
|
|
}
|