sascha@5: package de.intevation.artifactdatabase; sascha@5: sascha@5: import java.io.File; sascha@5: import java.io.IOException; sascha@5: sascha@5: import org.w3c.dom.Document; sascha@5: import org.w3c.dom.NodeList; sascha@5: sascha@5: import org.xml.sax.SAXException; sascha@5: sascha@5: import javax.xml.parsers.DocumentBuilderFactory; sascha@5: sascha@5: import javax.xml.parsers.ParserConfigurationException; sascha@5: sascha@5: import javax.xml.namespace.QName; sascha@5: sascha@5: import javax.xml.xpath.XPathFactory; sascha@5: import javax.xml.xpath.XPath; sascha@5: import javax.xml.xpath.XPathExpressionException; sascha@5: import javax.xml.xpath.XPathConstants; sascha@5: sascha@5: public final class Config sascha@5: { sascha@5: public static final String CONFIG_PROPERTY = "artifact.database.config"; sascha@5: sascha@5: public static final String CONFIG_DEFAULT = "artifactdb-conf.xml"; sascha@5: sascha@5: private static Document config; sascha@5: sascha@5: private Config() { sascha@5: } sascha@5: sascha@5: public static synchronized final Document getConfig() { sascha@5: if (config == null) { sascha@5: config = loadConfig(); sascha@5: } sascha@5: return config; sascha@5: } sascha@5: sascha@5: private static Document loadConfig() { sascha@5: File file = new File( sascha@5: System.getProperty(CONFIG_PROPERTY, CONFIG_DEFAULT)); sascha@5: sascha@5: if (!file.canRead() && !file.isFile()) { sascha@5: System.err.println("ERROR: cannot read config file '" sascha@5: + file + "'."); sascha@5: return null; sascha@5: } sascha@5: sascha@5: try { sascha@5: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); sascha@5: factory.setValidating(false); // XXX: This may change in future. sascha@5: return factory.newDocumentBuilder().parse(file); sascha@5: } sascha@5: catch (SAXException se) { sascha@5: System.err.println("ERROR: while processing XML file '" sascha@5: + file + "'"); sascha@5: se.printStackTrace(System.err); sascha@5: } sascha@5: catch (ParserConfigurationException pce) { sascha@5: System.err.println("ERROR: with XML configuration"); sascha@5: pce.printStackTrace(System.err); sascha@5: } sascha@5: catch (IOException ioe) { sascha@5: System.err.println("ERROR: I/O while processing file '" sascha@5: + file + "'"); sascha@5: ioe.printStackTrace(System.err); sascha@5: } sascha@5: sascha@5: return null; sascha@5: } sascha@5: sascha@5: public static final String getStringXPath(String xpath) { sascha@5: return getStringXPath(xpath, null); sascha@5: } sascha@5: sascha@5: public static final String getStringXPath(String query, String def) { sascha@5: String s = (String)getXPath(query, XPathConstants.STRING); sascha@5: return s == null || s.length() == 0 sascha@5: ? def sascha@5: : s; sascha@5: } sascha@5: sascha@5: public static final Object getXPath(String query, QName returnType) { sascha@5: Document document = getConfig(); sascha@5: if (document == null) { sascha@5: return null; sascha@5: } sascha@5: sascha@5: XPathFactory factory = XPathFactory.newInstance(); sascha@5: XPath xpath = factory.newXPath(); sascha@5: sascha@5: try { sascha@5: return xpath.evaluate(query, document, returnType); sascha@5: } sascha@5: catch (XPathExpressionException xpee) { sascha@5: xpee.printStackTrace(System.err); sascha@5: } sascha@5: sascha@5: return null; sascha@5: } sascha@5: sascha@5: public static final NodeList getNodeSetXPath(String query) { sascha@5: return (NodeList)getXPath(query, XPathConstants.NODESET); sascha@5: } sascha@5: } sascha@5: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: sascha@5: