Search in sources :

Example 1 with XPathQueryService

use of org.xmldb.api.modules.XPathQueryService in project exist by eXist-db.

the class XMLDBXPathTask method execute.

@Override
public void execute() throws BuildException {
    if (uri == null) {
        throw new BuildException("you have to specify an XMLDB collection URI");
    }
    if (text != null) {
        final PropertyHelper helper = PropertyHelper.getPropertyHelper(getProject());
        query = helper.replaceProperties(null, text, null);
    }
    if (query == null) {
        throw new BuildException("you have to specify a query");
    }
    log("XPath is: " + query, org.apache.tools.ant.Project.MSG_DEBUG);
    registerDatabase();
    try {
        log("Get base collection: " + uri, Project.MSG_DEBUG);
        final Collection base = DatabaseManager.getCollection(uri, user, password);
        if (base == null) {
            final String msg = "Collection " + uri + " could not be found.";
            if (failonerror) {
                throw new BuildException(msg);
            } else {
                log(msg, Project.MSG_ERR);
            }
        } else {
            final XPathQueryService service = (XPathQueryService) base.getService("XPathQueryService", "1.0");
            // set pretty-printing on
            service.setProperty(OutputKeys.INDENT, "yes");
            service.setProperty(OutputKeys.ENCODING, "UTF-8");
            if (namespace != null) {
                log("Using namespace: " + namespace, Project.MSG_DEBUG);
                service.setNamespace("ns", namespace);
            }
            final ResourceSet results;
            if (resource != null) {
                log("Query resource: " + resource, Project.MSG_DEBUG);
                results = service.queryResource(resource, query);
            } else {
                log("Query collection", Project.MSG_DEBUG);
                results = service.query(query);
            }
            log("Found " + results.getSize() + " results", Project.MSG_INFO);
            if ((destDir != null) && (results != null)) {
                log("write results to directory " + destDir.getAbsolutePath(), Project.MSG_INFO);
                final ResourceIterator iter = results.getIterator();
                log("Writing results to directory " + destDir.getAbsolutePath(), Project.MSG_DEBUG);
                while (iter.hasMoreResources()) {
                    final XMLResource res = (XMLResource) iter.nextResource();
                    log("Writing resource " + res.getId(), Project.MSG_DEBUG);
                    writeResource(res, destDir);
                }
            } else if (outputproperty != null) {
                if (count) {
                    getProject().setNewProperty(outputproperty, String.valueOf(results.getSize()));
                } else {
                    final ResourceIterator iter = results.getIterator();
                    final StringBuilder result = new StringBuilder();
                    while (iter.hasMoreResources()) {
                        final XMLResource res = (XMLResource) iter.nextResource();
                        result.append(res.getContent().toString());
                        result.append("\n");
                    }
                    getProject().setNewProperty(outputproperty, result.toString());
                }
            }
        }
    } catch (final XMLDBException e) {
        final String msg = "XMLDB exception caught while executing query: " + e.getMessage();
        if (failonerror) {
            throw new BuildException(msg, e);
        } else {
            log(msg, e, Project.MSG_ERR);
        }
    } catch (final IOException e) {
        final String msg = "XMLDB exception caught while writing destination file: " + e.getMessage();
        if (failonerror) {
            throw new BuildException(msg, e);
        } else {
            log(msg, e, Project.MSG_ERR);
        }
    }
}
Also used : XPathQueryService(org.xmldb.api.modules.XPathQueryService) Collection(org.xmldb.api.base.Collection) XMLDBException(org.xmldb.api.base.XMLDBException) PropertyHelper(org.apache.tools.ant.PropertyHelper) BuildException(org.apache.tools.ant.BuildException) ResourceSet(org.xmldb.api.base.ResourceSet) IOException(java.io.IOException) ResourceIterator(org.xmldb.api.base.ResourceIterator) XMLResource(org.xmldb.api.modules.XMLResource)

Example 2 with XPathQueryService

use of org.xmldb.api.modules.XPathQueryService in project exist by eXist-db.

the class CollectionConfigurationTest method collectionConfigurationService6.

@Test
public void collectionConfigurationService6() throws XMLDBException {
    Collection testCollection = DatabaseManager.getCollection(XmldbURI.LOCAL_DB + "/" + TEST_COLLECTION);
    // Add document....
    XMLResource doc = (XMLResource) testCollection.createResource(TestConstants.TEST_XML_URI.toString(), "XMLResource");
    doc.setContent(DOCUMENT_CONTENT);
    testCollection.storeResource(doc);
    // ... then configure collection *manually*
    XmldbURI configurationFileName = XmldbURI.create(CollectionConfiguration.DEFAULT_COLLECTION_CONFIG_FILE);
    storeConfiguration(CONF_COLL_URI, configurationFileName, CONFIG1);
    // ... then configure collection automatically
    IndexQueryService idxConf = (IndexQueryService) testCollection.getService("IndexQueryService", "1.0");
    idxConf.configureCollection(CONFIG1);
    XPathQueryService service = (XPathQueryService) testCollection.getService("XPathQueryService", "1.0");
    // our config file
    ResourceSet result = service.query("xmldb:get-child-resources('" + CONF_COLL_URI + "')");
    assertEquals(configurationFileName.toString(), result.getResource(0).getContent());
    // No numeric values because we have no index
    result = service.query("util:index-key-occurrences( /test/a, 1 ) ");
    assertEquals(0, result.getSize());
    // No string value because we have no index
    result = service.query("util:index-key-occurrences( /test/b, \"1\" ) ");
    assertEquals(0, result.getSize());
    // No numeric values because we have no index
    result = service.query("util:qname-index-lookup( xs:QName(\"a\"), 1 ) ");
    assertEquals(0, result.getSize());
    // No string value because we have no index
    result = service.query("util:qname-index-lookup( xs:QName(\"b\"), \"1\" ) ");
    assertEquals(0, result.getSize());
    // ...let's activate the index
    idxConf.reindexCollection();
    // WARNING : the code hereafter used to *not* work whereas
    // testCollectionConfigurationService4 did.
    // Adding confMgr.invalidateAll(getName()); in Collection.storeInternal solved the problem
    // Strange case that needs investigations... -pb
    // 3 numeric values
    result = service.query("util:index-key-occurrences(/test/a, 1)");
    assertEquals("3", result.getResource(0).getContent());
    // ... but 1 string value
    result = service.query("util:index-key-occurrences(/test/b, \"1\")");
    assertEquals("1", result.getResource(0).getContent());
    // 3 numeric values
    result = service.query("util:qname-index-lookup( xs:QName(\"a\"), 1 ) ");
    assertEquals(3, result.getSize());
    // ... but 1 string value
    result = service.query("util:qname-index-lookup( xs:QName(\"b\"), \"1\" ) ");
    assertEquals(1, result.getSize());
}
Also used : XPathQueryService(org.xmldb.api.modules.XPathQueryService) Collection(org.xmldb.api.base.Collection) ResourceSet(org.xmldb.api.base.ResourceSet) XMLResource(org.xmldb.api.modules.XMLResource)

Example 3 with XPathQueryService

use of org.xmldb.api.modules.XPathQueryService in project exist by eXist-db.

the class CollectionConfigurationTest method collectionConfigurationService10.

/**
 * Remove config document
 */
@Test
public void collectionConfigurationService10() throws XMLDBException {
    Collection testCollection = DatabaseManager.getCollection(XmldbURI.LOCAL_DB + "/" + TEST_COLLECTION);
    CollectionManagementService cms = (CollectionManagementService) testCollection.getService("CollectionManagementService", "1.0");
    Collection sub2 = cms.createCollection(COLLECTION_SUB2.toString());
    UserManagementService ums = (UserManagementService) sub2.getService("UserManagementService", "1.0");
    ums.chmod("rwxr-xr-x");
    IndexQueryService idxConf = (IndexQueryService) testCollection.getService("IndexQueryService", "1.0");
    idxConf.configureCollection(CONFIG1);
    // ... then index document
    XMLResource doc = (XMLResource) sub2.createResource(TestConstants.TEST_XML_URI.toString(), "XMLResource");
    doc.setContent(DOCUMENT_CONTENT);
    sub2.storeResource(doc);
    XPathQueryService service = (XPathQueryService) sub2.getService("XPathQueryService", "1.0");
    // 3 numeric values
    ResourceSet result = service.query("util:index-key-occurrences(/test/a, 1)");
    assertEquals("3", result.getResource(0).getContent());
    // ... but 1 string value
    result = service.query("util:index-key-occurrences(/test/b, \"1\")");
    assertEquals("1", result.getResource(0).getContent());
    // 3 numeric values
    result = service.query("util:qname-index-lookup(xs:QName(\"a\"), 1 ) ");
    assertEquals(3, result.getSize());
    // ... but 1 string value
    result = service.query("util:qname-index-lookup(xs:QName(\"b\"), \"1\" ) ");
    assertEquals(1, result.getSize());
    // remove config document thus dropping the configuration
    Collection confCol = DatabaseManager.getCollection("xmldb:exist://" + CONF_COLL_URI.toString(), ADMIN_DB_USER, ADMIN_DB_PWD);
    Resource confDoc = confCol.getResource(DEFAULT_COLLECTION_CONFIG_FILE);
    assertNotNull(confDoc);
    confCol.removeResource(confDoc);
    // cms = (CollectionManagementService) confCol.getService("CollectionManagementService", "1.0");
    // cms.removeCollection(".");
    idxConf.reindexCollection();
    // index should be empty since configuration was removed
    result = service.query("util:index-key-occurrences(/test/a, 1)");
    assertEquals(0, result.getSize());
    result = service.query("util:index-key-occurrences(/test/b, \"1\")");
    assertEquals(0, result.getSize());
    result = service.query("util:qname-index-lookup(xs:QName(\"a\"), 1 ) ");
    assertEquals(0, result.getSize());
    result = service.query("util:qname-index-lookup(xs:QName(\"b\"), \"1\" ) ");
    assertEquals(0, result.getSize());
}
Also used : CollectionManagementService(org.xmldb.api.modules.CollectionManagementService) XPathQueryService(org.xmldb.api.modules.XPathQueryService) XMLResource(org.xmldb.api.modules.XMLResource) Resource(org.xmldb.api.base.Resource) Collection(org.xmldb.api.base.Collection) ResourceSet(org.xmldb.api.base.ResourceSet) XMLResource(org.xmldb.api.modules.XMLResource)

Example 4 with XPathQueryService

use of org.xmldb.api.modules.XPathQueryService in project exist by eXist-db.

the class CollectionConfigurationTest method collectionConfigurationService3.

@Test
public void collectionConfigurationService3() throws XMLDBException {
    Collection testCollection = DatabaseManager.getCollection(XmldbURI.LOCAL_DB + "/" + TEST_COLLECTION);
    // Configure collection *manually*
    storeConfiguration(CONF_COLL_URI, CollectionConfiguration.DEFAULT_COLLECTION_CONFIG_FILE_URI, CONFIG1);
    // ... then index document
    XMLResource doc = (XMLResource) testCollection.createResource(TestConstants.TEST_XML_URI.toString(), "XMLResource");
    doc.setContent(DOCUMENT_CONTENT);
    testCollection.storeResource(doc);
    XPathQueryService service = (XPathQueryService) testCollection.getService("XPathQueryService", "1.0");
    // 3 numeric values
    ResourceSet result = service.query("util:index-key-occurrences(/test/a, 1)");
    assertEquals(1, result.getSize());
    assertEquals("3", result.getResource(0).getContent());
    // ... but 1 string value
    result = service.query("util:index-key-occurrences(/test/b, \"1\")");
    assertEquals(1, result.getSize());
    assertEquals("1", result.getResource(0).getContent());
    // 3 numeric values
    result = service.query("util:qname-index-lookup(xs:QName(\"a\"), 1 ) ");
    assertEquals(3, result.getSize());
    // ... but 1 string value
    result = service.query("util:qname-index-lookup(xs:QName(\"b\"), \"1\" ) ");
    assertEquals(1, result.getSize());
}
Also used : XPathQueryService(org.xmldb.api.modules.XPathQueryService) Collection(org.xmldb.api.base.Collection) ResourceSet(org.xmldb.api.base.ResourceSet) XMLResource(org.xmldb.api.modules.XMLResource)

Example 5 with XPathQueryService

use of org.xmldb.api.modules.XPathQueryService in project exist by eXist-db.

the class CollectionConfigurationTest method collectionConfigurationService7.

/**
 * Check if configurations are properly passed down the collection hierarchy.
 */
@Test
public void collectionConfigurationService7() throws XMLDBException {
    Collection testCollection = DatabaseManager.getCollection(XmldbURI.LOCAL_DB + "/" + TEST_COLLECTION);
    CollectionManagementService cms = (CollectionManagementService) testCollection.getService("CollectionManagementService", "1.0");
    Collection sub2 = cms.createCollection(COLLECTION_SUB2.toString());
    UserManagementService ums = (UserManagementService) sub2.getService("UserManagementService", "1.0");
    ums.chmod("rwxr-xr-x");
    // Configure collection automatically
    // sub2 should inherit its index configuration from the top collection
    IndexQueryService idxConf = (IndexQueryService) testCollection.getService("IndexQueryService", "1.0");
    idxConf.configureCollection(CONFIG1);
    // ... then index document
    XMLResource doc = (XMLResource) sub2.createResource(TestConstants.TEST_XML_URI.toString(), "XMLResource");
    doc.setContent(DOCUMENT_CONTENT);
    sub2.storeResource(doc);
    XPathQueryService service = (XPathQueryService) sub2.getService("XPathQueryService", "1.0");
    // 3 numeric values
    ResourceSet result = service.query("util:index-key-occurrences(/test/a, 1)");
    assertEquals("3", result.getResource(0).getContent());
    // ... but 1 string value
    result = service.query("util:index-key-occurrences(/test/b, \"1\")");
    assertEquals("1", result.getResource(0).getContent());
    // 3 numeric values
    result = service.query("util:qname-index-lookup(xs:QName(\"a\"), 1 ) ");
    assertEquals(3, result.getSize());
    // ... but 1 string value
    result = service.query("util:qname-index-lookup(xs:QName(\"b\"), \"1\" ) ");
    assertEquals(1, result.getSize());
}
Also used : CollectionManagementService(org.xmldb.api.modules.CollectionManagementService) XPathQueryService(org.xmldb.api.modules.XPathQueryService) Collection(org.xmldb.api.base.Collection) ResourceSet(org.xmldb.api.base.ResourceSet) XMLResource(org.xmldb.api.modules.XMLResource)

Aggregations

XPathQueryService (org.xmldb.api.modules.XPathQueryService)148 ResourceSet (org.xmldb.api.base.ResourceSet)123 EXistXPathQueryService (org.exist.xmldb.EXistXPathQueryService)92 XMLResource (org.xmldb.api.modules.XMLResource)60 Collection (org.xmldb.api.base.Collection)31 Test (org.junit.Test)22 Resource (org.xmldb.api.base.Resource)18 XMLDBException (org.xmldb.api.base.XMLDBException)14 EXistResource (org.exist.xmldb.EXistResource)10 CollectionManagementService (org.xmldb.api.modules.CollectionManagementService)9 XUpdateQueryService (org.xmldb.api.modules.XUpdateQueryService)8 IndexQueryService (org.exist.xmldb.IndexQueryService)6 IOException (java.io.IOException)3 ResourceIterator (org.xmldb.api.base.ResourceIterator)3 BinaryResource (org.xmldb.api.modules.BinaryResource)3 MalformedURLException (java.net.MalformedURLException)2 Path (java.nio.file.Path)2 Node (org.w3c.dom.Node)2 HttpURLConnection (java.net.HttpURLConnection)1 URL (java.net.URL)1