| 1 16 package scriptella.driver.xpath; 17 18 import org.w3c.dom.Document ; 19 import org.xml.sax.InputSource ; 20 import scriptella.spi.AbstractConnection; 21 import scriptella.spi.ConnectionParameters; 22 import scriptella.spi.ParametersCallback; 23 import scriptella.spi.ProviderException; 24 import scriptella.spi.QueryCallback; 25 import scriptella.spi.Resource; 26 27 import javax.xml.parsers.DocumentBuilderFactory ; 28 import java.net.URL ; 29 import java.util.IdentityHashMap ; 30 import java.util.Map ; 31 32 39 public class XPathConnection extends AbstractConnection { 40 private Map <Resource, XPathQueryExecutor> queriesCache = new IdentityHashMap <Resource, XPathQueryExecutor>(); 41 private XPathExpressionCompiler compiler = new XPathExpressionCompiler(); 42 private Document document; 43 private URL url; 44 static final DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance(); 45 46 49 protected XPathConnection() { 50 } 51 52 public XPathConnection(ConnectionParameters parameters) { 53 super(Driver.DIALECT, parameters); 54 url = parameters.getResolvedUrl(); 55 } 57 58 public void executeScript(final Resource scriptContent, final ParametersCallback parametersCallback) throws ProviderException { 59 throw new XPathProviderException("Script execution is not supported yet"); 60 } 61 62 public void executeQuery(Resource queryContent, ParametersCallback parametersCallback, QueryCallback queryCallback) throws ProviderException { 63 XPathQueryExecutor exec = queriesCache.get(queryContent); 64 if (exec == null) { 65 exec = new XPathQueryExecutor(getDocument(), queryContent, compiler, counter); 66 queriesCache.put(queryContent, exec); 67 } 68 exec.execute(queryCallback, parametersCallback); 69 } 70 71 private Document getDocument() { 72 if (document == null) { 73 try { 74 document = DBF.newDocumentBuilder().parse(new InputSource (url.toString())); 75 } catch (Exception e) { 76 throw new XPathProviderException("Unable to parse document " + url, e); 77 } 78 } 79 return document; 80 } 81 82 public void close() throws ProviderException { 83 queriesCache = null; 84 document = null; 85 } 86 } 87 | Popular Tags |