/* -*- 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 * . Portions created by Giao Nguyen are Copyright * (C) 1999 Giao Nguyen. All Rights Reserved. * * Contributors: Morgan Schweers */ 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; } }