![]() | Source code below from: Java Enterprise in a Nutshell (In a Nutshell) By Jim Farley, William Crawford, Prakash Malani, John Norman, and Justin Gehtland Published 22 November, 2005 Average rating
Powells
Alibris
|
package com.oreilly.jent.people.util; /** * In general, you may use the code in this book in your programs and * documentation. You do not need to contact us for permission unless * you're reproducing a significant portion of the code. For example, * writing a program that uses several chunks of code from this book does * not require permission. Selling or distributing a CD-ROM of examples * from O'Reilly books does require permission. Answering a question by * citing this book and quoting example code does not require permission. * Incorporating a significant amount of example code from this book into * your product's documentation does require permission. * * We appreciate, but do not require, attribution. An attribution usually * includes the title, author, publisher, and ISBN. For example: * * "Java Enterprise in a Nutshell, Third Edition, * by Jim Farley and William Crawford * with Prakash Malani, John G. Norman, and Justin Gehtland. * Copyright 2006 O'Reilly Media, Inc., 0-596-10142-2." * * If you feel your use of code examples falls outside fair use or the * permission given above, feel free to contact us at * permissions@oreilly.com. */ import java.io.IOException; import java.io.InputStream; import java.util.StringTokenizer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * A ConfigSet is used to read configuration information from an XML file * and provide an easy way for an application to query for specific elements * in the XML document that represent configuration information. * * @author Jim Farley * */ public class ConfigSet { private Document mXMLConfig = null; /** * Constructor for ConfigReader with a resource reference to the XML config * file. */ public ConfigSet(String fileSpec) throws IllegalArgumentException { InputStream xmlStr = getClass().getResourceAsStream(fileSpec); if (xmlStr != null) { try { DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); mXMLConfig = docBuilder.parse(xmlStr); } catch (ParserConfigurationException pce) { throw new IllegalArgumentException("Failed parsing XML config file: " + pce.getMessage()); } catch (SAXException se) { throw new IllegalArgumentException("Parsing error processing XML file: " + se.getMessage()); } catch (IOException ioe) { throw new IllegalArgumentException("Failed loading XML config file: " + ioe.getMessage()); } } } /** Constructor taking a pre-parsed Document as the source of the config * data. * @param paramSpec * @return String */ public ConfigSet(Document data) { mXMLConfig = data; } /** Find a named parameter in the loaded config file. The * <code>paramSpec</code> argument uses a dot-delimited format to indicate * the desired element from the XML config file. For example, if the config * file contains "<app-config><params><name>foobar</name></params>. . .", * then the application can request the "name" element like so: * <pre> * * ConfigReader config = new ConfigReader(...); * String name = config.getParameter("app-config.params.name"); * * </pre> * Note that this method is fairly limited in its capabilities. It does not * support multiple paths through the document that match the given element. * Instead, it simply returns the value of first matching element that it * finds in the document. It also only supports element values that can be * converted directly to String values. */ public String getParameter(String paramSpec) { String paramVal = null; Element currNode = mXMLConfig.getDocumentElement(); StringTokenizer tokenizer = new StringTokenizer(paramSpec, "."); boolean firstOne = true; while (tokenizer.hasMoreTokens()) { String elem = tokenizer.nextToken(); if (firstOne) { firstOne = false; if (currNode.getNodeName().equals(elem)) { continue; } else { break; } } NodeList nodes = currNode.getElementsByTagName(elem); currNode = (Element)nodes.item(0); } if (currNode != null) { paramVal = currNode.getChildNodes().item(0).getNodeValue(); } return paramVal; } }