// Path: src/main/java/xdb/control/Query.java
// public interface Query {
// 
//     /**
//      * Execute the query.
//      * 
//      * @param doc
//      *            The document being queried.
//      * @param params
//      *            Query parameters.
//      * @return The list of nodes in the results.
//      * @throws xdb.control.QueryException
//      *             For errors.
//      */
//     public List<Node> query(Document doc, Map<String, String[]> params) throws QueryException;
// }
// 
// Path: src/main/java/xdb/dom/XmlParser.java
// public class XmlParser extends DocumentBuilder {
//     private ErrorHandler eh = null;
// 
//     @Override
//     public DOMImplementation getDOMImplementation() {
//         return DocumentImpl.IMPLEMENTATION;
//     }
// 
//     @Override
//     public boolean isNamespaceAware() {
//         return false;
//     }
// 
//     @Override
//     public boolean isValidating() {
//         return false;
//     }
// 
//     @Override
//     public Document newDocument() {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public void setEntityResolver(EntityResolver er) {
//     }
// 
//     @Override
//     public void setErrorHandler(ErrorHandler errorHandler) {
//         this.eh = errorHandler;
//     }
// 
//     @Override
//     public Document parse(InputSource is) throws SAXException, IOException {
//         try {
//             SAXParserFactory factor = SAXParserFactory.newInstance();
//             SAXParser parser = factor.newSAXParser();
//             XMLReader reader = parser.getXMLReader();
//             if (eh != null) {
//                 reader.setErrorHandler(eh);
//             }
//             DomHandler handler = new DomHandler();
//             reader.setContentHandler(handler);
//             reader.parse(is);
//             return handler.getDoc();
//         } catch (ParserConfigurationException ex) {
//             throw new SAXException(ex);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/query/QueryInit.java
// public final class QueryInit {
// 
//     private QueryInit() {
//     }
// 
//     /**
//      * Init the query from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @param fileName
//      *            The file name.
//      * @return The query.
//      */
//     public static Query init(Element configElement, String fileName) {
//         if ("xpath-query".equals(configElement.getNodeName())) {
//             return XPathQuery.init(configElement);
//         } else if ("multi-id-query".equals(configElement.getNodeName())) {
//             return MultiIdQuery.init(configElement);
//         } else if ("multi-key-query".equals(configElement.getNodeName())) {
//             return MultiKeyQuery.init(configElement);
//         } else if ("whole-doc-query".equals(configElement.getNodeName())) {
//             return WholeDocQuery.init(configElement);
//         } else {
//             String msg = "Unknown query in " + fileName + " - " + configElement.getNodeName();
//             throw new IllegalStateException(msg);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/query/XPathQuery.java
// public class XPathQuery implements Query {
//     private final String xpath;
// 
//     /**
//      * Init the query from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @return The query.
//      */
//     public static XPathQuery init(Element configElement) {
//         String xpath = configElement.getAttribute("xpath");
//         return new XPathQuery(xpath);
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param xpath
//      *            The xpath.
//      */
//     public XPathQuery(String xpath) {
//         this.xpath = xpath;
//     }
// 
//     @Override
//     public List<Node> query(Document doc, Map<String, String[]> params) throws QueryException {
//         try {
//             return XPathEngine.query(doc, xpath, CollectionsUtil.flatten(params));
//         } catch (XPathExpressionException ex) {
//             throw new QueryException(ex.getMessage(), ex);
//         }
//     }
// }


import java.io.StringReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import xdb.control.Query;
import xdb.dom.XmlParser;
import xdb.query.QueryInit;
import xdb.query.XPathQuery;
package xdb.query;



public class XPathQueryTest extends TestCase {

    public XPathQueryTest(String testName) {
        super(testName);
    }

    public void testInit() throws Exception {
        String xml = "<xpath-query xpath=\"id($id)\" />";
        Element config = parse(xml).getDocumentElement();
        Query instance = QueryInit.init(config, "test-config.xml");
// Path: src/main/java/xdb/control/Query.java
// public interface Query {
// 
//     /**
//      * Execute the query.
//      * 
//      * @param doc
//      *            The document being queried.
//      * @param params
//      *            Query parameters.
//      * @return The list of nodes in the results.
//      * @throws xdb.control.QueryException
//      *             For errors.
//      */
//     public List<Node> query(Document doc, Map<String, String[]> params) throws QueryException;
// }
// 
// Path: src/main/java/xdb/dom/XmlParser.java
// public class XmlParser extends DocumentBuilder {
//     private ErrorHandler eh = null;
// 
//     @Override
//     public DOMImplementation getDOMImplementation() {
//         return DocumentImpl.IMPLEMENTATION;
//     }
// 
//     @Override
//     public boolean isNamespaceAware() {
//         return false;
//     }
// 
//     @Override
//     public boolean isValidating() {
//         return false;
//     }
// 
//     @Override
//     public Document newDocument() {
//         throw new UnsupportedOperationException();
//     }
// 
//     @Override
//     public void setEntityResolver(EntityResolver er) {
//     }
// 
//     @Override
//     public void setErrorHandler(ErrorHandler errorHandler) {
//         this.eh = errorHandler;
//     }
// 
//     @Override
//     public Document parse(InputSource is) throws SAXException, IOException {
//         try {
//             SAXParserFactory factor = SAXParserFactory.newInstance();
//             SAXParser parser = factor.newSAXParser();
//             XMLReader reader = parser.getXMLReader();
//             if (eh != null) {
//                 reader.setErrorHandler(eh);
//             }
//             DomHandler handler = new DomHandler();
//             reader.setContentHandler(handler);
//             reader.parse(is);
//             return handler.getDoc();
//         } catch (ParserConfigurationException ex) {
//             throw new SAXException(ex);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/query/QueryInit.java
// public final class QueryInit {
// 
//     private QueryInit() {
//     }
// 
//     /**
//      * Init the query from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @param fileName
//      *            The file name.
//      * @return The query.
//      */
//     public static Query init(Element configElement, String fileName) {
//         if ("xpath-query".equals(configElement.getNodeName())) {
//             return XPathQuery.init(configElement);
//         } else if ("multi-id-query".equals(configElement.getNodeName())) {
//             return MultiIdQuery.init(configElement);
//         } else if ("multi-key-query".equals(configElement.getNodeName())) {
//             return MultiKeyQuery.init(configElement);
//         } else if ("whole-doc-query".equals(configElement.getNodeName())) {
//             return WholeDocQuery.init(configElement);
//         } else {
//             String msg = "Unknown query in " + fileName + " - " + configElement.getNodeName();
//             throw new IllegalStateException(msg);
//         }
//     }
// }
// 
// Path: src/main/java/xdb/query/XPathQuery.java
// public class XPathQuery implements Query {
//     private final String xpath;
// 
//     /**
//      * Init the query from its configuration.
//      * 
//      * @param configElement
//      *            The configuration element.
//      * @return The query.
//      */
//     public static XPathQuery init(Element configElement) {
//         String xpath = configElement.getAttribute("xpath");
//         return new XPathQuery(xpath);
//     }
// 
//     /**
//      * Constructor.
//      * 
//      * @param xpath
//      *            The xpath.
//      */
//     public XPathQuery(String xpath) {
//         this.xpath = xpath;
//     }
// 
//     @Override
//     public List<Node> query(Document doc, Map<String, String[]> params) throws QueryException {
//         try {
//             return XPathEngine.query(doc, xpath, CollectionsUtil.flatten(params));
//         } catch (XPathExpressionException ex) {
//             throw new QueryException(ex.getMessage(), ex);
//         }
//     }
// }


// Path: src/test/java/xdb/query/XPathQueryTest.java
import java.io.StringReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import xdb.control.Query;
import xdb.dom.XmlParser;
import xdb.query.QueryInit;
import xdb.query.XPathQuery;

package xdb.query;



public class XPathQueryTest extends TestCase {

    public XPathQueryTest(String testName) {
        super(testName);
    }

    public void testInit() throws Exception {
        String xml = "<xpath-query xpath=\"id($id)\" />";
        Element config = parse(xml).getDocumentElement();
        Query instance = QueryInit.init(config, "test-config.xml");
        assertTrue(instance instanceof XPathQuery);