Example usage for javax.xml.xpath XPath evaluate

List of usage examples for javax.xml.xpath XPath evaluate

Introduction

In this page you can find the example usage for javax.xml.xpath XPath evaluate.

Prototype

public String evaluate(String expression, InputSource source) throws XPathExpressionException;

Source Link

Document

Evaluate an XPath expression in the context of the specified InputSource and return the result as a String .

Usage

From source file:de.mpg.mpdl.inge.xmltransforming.TestBase.java

/**
 * Delivers the value of one distinct node in an <code>org.w3c.dom.Document</code>.
 * /*from   w  w  w . ja va2  s  .  c  om*/
 * @param document The <code>org.w3c.dom.Document</code>
 * @param xpathExpression The XPath expression as string
 * 
 * @return The value of the node
 * 
 * @throws TransformerException Thrown when the transformation failed
 */
protected String getValue(Document document, String xpathExpression) throws TransformerException {
    XPathFactory factory = XPathFactory.newInstance();
    XPath xPath = factory.newXPath();
    try {
        return xPath.evaluate(xpathExpression, document);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

From source file:com.rapidminer.tools.Tools.java

/**
 * Reads a text file into a single string. Process files created with RapidMiner 5.2.008 or
 * earlier will be read with the system encoding (for compatibility reasons); all other files
 * will be read with UTF-8 encoding.//from www. ja  v  a  2s.c  om
 * */
public static String readTextFile(File file) throws IOException {
    FileInputStream inStream = new FileInputStream(file);

    // due to a bug in pre-5.2.009, process files were stored in System encoding instead of
    // UTF-8. So we have to check the process version, and if it's less than 5.2.009 we have
    // to retrieve the file again with System encoding.
    // If anything goes wrong while parsing the version number, we continue with the old
    // method. If something goes wrong, the file is either not utf-8 encoded (so the old
    // method will probably work), or it is not a valid process file (which will also be
    // detected by the old method).
    boolean useFallback = false;
    try {
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document processXmlDocument = documentBuilder.parse(inStream);
        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPath = xPathFactory.newXPath();
        String versionString = xPath.evaluate("/process/@version", processXmlDocument);
        VersionNumber version = new VersionNumber(versionString);
        if (version.isAtMost(5, 2, 8)) {
            useFallback = true;
        }
    } catch (XPathExpressionException e) {
        useFallback = true;
    } catch (SAXException e) {
        useFallback = true;
    } catch (ParserConfigurationException e) {
        useFallback = true;
    } catch (IOException e) {
        useFallback = true;
    } catch (NumberFormatException e) {
        useFallback = true;
    }

    InputStreamReader reader = null;

    try {
        inStream = new FileInputStream(file);
        if (useFallback) {
            // default reader (as in old versions)
            reader = new InputStreamReader(inStream);
        } else {
            // utf8 reader
            reader = new InputStreamReader(inStream, XMLImporter.PROCESS_FILE_CHARSET);
        }

        return readTextFile(reader);
    } finally {
        try {
            inStream.close();
        } catch (IOException e) {
        }
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
            }
        }
    }
}

From source file:jef.tools.XMLUtils.java

/**
 * XPath/*from w  w w . ja  v  a  2s .  com*/
 * 
 * @param startPoint
 *            
 * @param expr
 *            xpath?
 * @return xpath?
 * @throws XPathExpressionException
 */
public static String evalXpath(Object startPoint, String expr) throws XPathExpressionException {
    XPath xpath = xp.newXPath();
    return xpath.evaluate(expr, startPoint);
}

From source file:hoot.services.controllers.osm.ChangesetResourceCloseTest.java

@Test
@Category(UnitTest.class)
public void testChangesetAutoCloseWhenMaxElementsUploadedToEmptyChangeset() throws Exception {
    Properties hootProps = HootProperties.getInstance();
    //lower the max allowed elements per changeset from the default to the number of elements
    //we're uploading
    final int maximumChangesetElements = 12;
    hootProps.setProperty("maximumChangesetElements", String.valueOf(maximumChangesetElements));
    HootProperties.setProperties(hootProps);
    Assert.assertEquals(maximumChangesetElements,
            Integer.parseInt(HootProperties.getInstance().getProperty("maximumChangesetElements")));

    try {/* ww  w  .j av  a 2s .  c  o  m*/
        final BoundingBox originalBounds = OsmTestUtils.createStartingTestBounds();
        final long changesetId = OsmTestUtils.createTestChangeset(originalBounds, 0);

        //Now create a new changeset with a number of elements equal to the max allowed.  The elements
        //should be written and the changeset closed.
        Document responseData = null;
        try {
            responseData = resource().path("api/0.6/changeset/" + changesetId + "/upload")
                    .queryParam("mapId", "" + mapId).type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
                    .post(Document.class, "<osmChange version=\"0.3\" generator=\"iD\">" + "<create>"
                            + "<node id=\"-1\" lon=\"" + originalBounds.getMinLon() + "\" lat=\""
                            + originalBounds.getMinLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 1\" v=\"val 1\"/>" + "<tag k=\"key 2\" v=\"val 2\"/>" + "</node>"
                            + "<node id=\"-2\" lon=\"" + originalBounds.getMaxLon() + "\" lat=\""
                            + originalBounds.getMaxLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "</node>" + "<node id=\"-3\" lon=\"" + originalBounds.getMinLon() + "\" lat=\""
                            + originalBounds.getMinLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "</node>" + "<node id=\"-4\" lon=\"" + originalBounds.getMinLon() + "\" lat=\""
                            + originalBounds.getMinLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 3\" v=\"val 3\"/>" + "</node>" + "<node id=\"-5\" lon=\""
                            + originalBounds.getMinLon() + "\" lat=\"" + originalBounds.getMinLat()
                            + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 4\" v=\"val 4\"/>" + "</node>"
                            + "<way id=\"-6\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<nd ref=\"-1\"></nd>" + "<nd ref=\"-2\"></nd>" + "<nd ref=\"-5\"></nd>"
                            + "<tag k=\"key 1\" v=\"val 1\"/>" + "<tag k=\"key 2\" v=\"val 2\"/>" + "</way>"
                            + "<way id=\"-7\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<nd ref=\"-3\"></nd>" + "<nd ref=\"-2\"></nd>" + "</way>"
                            + "<way id=\"-8\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<nd ref=\"-1\"></nd>" + "<nd ref=\"-2\"></nd>" + "<tag k=\"key 3\" v=\"val 3\"/>"
                            + "</way>" + "<relation id=\"-9\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"node\" role=\"role1\" ref=\"-1\"></member>"
                            + "<member type=\"way\" role=\"role3\" ref=\"-7\"></member>"
                            + "<member type=\"way\" role=\"role2\" ref=\"-6\"></member>"
                            + "<member type=\"node\" ref=\"-3\"></member>" + "<tag k=\"key 1\" v=\"val 1\"/>"
                            + "</relation>" + "<relation id=\"-10\" version=\"0\" changeset=\"" + changesetId
                            + "\" >" + "<member type=\"node\" role=\"role1\" ref=\"-5\"></member>"
                            + "<member type=\"relation\" role=\"role1\" ref=\"-9\"></member>"
                            + "<tag k=\"key 2\" v=\"val 2\"/>" + "<tag k=\"key 3\" v=\"val 3\"/>"
                            + "</relation>" + "<relation id=\"-11\" version=\"0\" changeset=\"" + changesetId
                            + "\" >" + "<member type=\"way\" role=\"\" ref=\"-7\"></member>"
                            + "<tag k=\"key 4\" v=\"val 4\"/>" + "</relation>"
                            + "<relation id=\"-12\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"node\" role=\"role1\" ref=\"-3\"></member>" + "</relation>"
                            + "</create>" + "<modify/>" + "<delete if-unused=\"true\"/>" + "</osmChange>");
        } catch (UniformInterfaceException e) {
            ClientResponse r = e.getResponse();
            Assert.fail("Unexpected response " + r.getStatus() + " " + r.getEntity(String.class));
        }
        Assert.assertNotNull(responseData);

        XPath xpath = XmlDocumentBuilder.createXPath();
        Set<Long> nodeIds = new LinkedHashSet<Long>();
        Set<Long> wayIds = new LinkedHashSet<Long>();
        Set<Long> relationIds = new LinkedHashSet<Long>();
        try {
            NodeList returnedNodes = XPathAPI.selectNodeList(responseData, "//osm/diffResult/node");
            Assert.assertEquals(5, returnedNodes.getLength());

            long oldElementId = Long
                    .parseLong(xpath.evaluate("//osm/diffResult/node[1]/@old_id", responseData));
            Assert.assertEquals(-1, oldElementId);
            long newElementId = Long
                    .parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_id", responseData));
            Assert.assertNotSame(-1, newElementId);
            nodeIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@old_id", responseData));
            Assert.assertEquals(-2, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_id", responseData));
            Assert.assertNotSame(-2, newElementId);
            nodeIds.add(newElementId);
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_id", responseData)) + 1,
                    newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@old_id", responseData));
            Assert.assertEquals(-3, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@new_id", responseData));
            Assert.assertNotSame(-3, newElementId);
            nodeIds.add(newElementId);
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_id", responseData)) + 1,
                    newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@old_id", responseData));
            Assert.assertEquals(-4, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@new_id", responseData));
            Assert.assertNotSame(-4, newElementId);
            nodeIds.add(newElementId);
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@new_id", responseData)) + 1,
                    newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[5]/@old_id", responseData));
            Assert.assertEquals(-5, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[5]/@new_id", responseData));
            Assert.assertNotSame(-5, newElementId);
            nodeIds.add(newElementId);
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@new_id", responseData)) + 1,
                    newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[5]/@new_version", responseData)));

            NodeList returnedWays = XPathAPI.selectNodeList(responseData, "//osm/diffResult/way");
            Assert.assertEquals(3, returnedWays.getLength());

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@old_id", responseData));
            Assert.assertEquals(-6, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_id", responseData));
            Assert.assertNotSame(-6, newElementId);
            wayIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@old_id", responseData));
            Assert.assertEquals(-7, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_id", responseData));
            Assert.assertNotSame(-7, newElementId);
            wayIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@old_id", responseData));
            Assert.assertEquals(-8, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@new_id", responseData));
            Assert.assertNotSame(-8, newElementId);
            wayIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@new_version", responseData)));

            NodeList returnedRelations = XPathAPI.selectNodeList(responseData, "//osm/diffResult/relation");
            Assert.assertEquals(4, returnedRelations.getLength());

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@old_id", responseData));
            Assert.assertEquals(-9, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_id", responseData));
            Assert.assertNotSame(-9, newElementId);
            relationIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@old_id", responseData));
            Assert.assertEquals(-10, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_id", responseData));
            Assert.assertNotSame(-10, newElementId);
            relationIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@old_id", responseData));
            Assert.assertEquals(-11, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@new_id", responseData));
            Assert.assertNotSame(-11, newElementId);
            relationIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@new_version", responseData)));

            oldElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@old_id", responseData));
            Assert.assertEquals(-12, oldElementId);
            newElementId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@new_id", responseData));
            Assert.assertNotSame(-12, newElementId);
            relationIds.add(newElementId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@new_version", responseData)));
        } catch (XPathExpressionException e) {
            Assert.fail("Error parsing response document: " + e.getMessage());
        }

        //changes have actually occurred with the upload of the changeset...what's actually being
        //done here is to compare the state of the default test data set with the dataset we uploaded
        //here, and they should match each other
        OsmTestUtils.verifyTestDataUnmodified(originalBounds, changesetId, nodeIds, wayIds, relationIds);
        OsmTestUtils.verifyTestChangesetClosed(changesetId);
    } catch (Exception e) {
        log.error(e.getMessage());
        throw e;
    } finally {
        //set this back to default now that this test is over
        HootProperties.getInstance().setProperty("maximumChangesetElements",
                HootProperties.getDefault("maximumChangesetElements"));
        Assert.assertEquals(Integer.parseInt(HootProperties.getDefault("maximumChangesetElements")),
                Integer.parseInt(HootProperties.getInstance().getProperty("maximumChangesetElements")));
    }
}

From source file:com.flexive.core.storage.GenericDivisionImporter.java

/**
 * Get division export information from an exported archive
 *
 * @param zip zip file containing the export
 * @return FxDivisionExportInfo/*  w  w  w  . j  a  v  a 2 s  .c o  m*/
 * @throws FxApplicationException on errors
 */
public FxDivisionExportInfo getDivisionExportInfo(ZipFile zip) throws FxApplicationException {
    ZipEntry ze = getZipEntry(zip, FILE_BUILD_INFOS);
    FxDivisionExportInfo exportInfo;
    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse(zip.getInputStream(ze));

        XPath xPath = XPathFactory.newInstance().newXPath();

        String[] drops;
        String dropsRaw = xPath.evaluate("/flexive/drops", document);
        if (dropsRaw == null || !dropsRaw.startsWith("["))
            drops = new String[0];
        else {
            dropsRaw = dropsRaw.substring(1, dropsRaw.length() - 1);
            drops = dropsRaw.split(", ");
        }
        exportInfo = new FxDivisionExportInfo(Integer.parseInt(xPath.evaluate("/flexive/division", document)),
                Integer.parseInt(xPath.evaluate("/flexive/schema", document)),
                Integer.parseInt(xPath.evaluate("/flexive/build", document)),
                xPath.evaluate("/flexive/verbose", document), xPath.evaluate("/flexive/appserver", document),
                xPath.evaluate("/flexive/database", document), xPath.evaluate("/flexive/dbdriver", document),
                xPath.evaluate("/flexive/domain", document), Arrays.asList(drops),
                xPath.evaluate("/flexive/user", document),
                FxFormatUtils.getDateTimeFormat().parse(xPath.evaluate("/flexive/date", document)));
    } catch (Exception e) {
        throw new FxApplicationException(e, "ex.import.parseInfoFailed", e.getMessage());
    }
    return exportInfo;
}

From source file:hoot.services.controllers.osm.ChangesetResourceCloseTest.java

@Test
@Category(UnitTest.class)
public void testChangesetAutoCloseWhenMaxElementsUploadedToExistingChangeset() throws Exception {
    Properties hootProps = HootProperties.getInstance();
    //lower the max allowed elements per changeset from the default to the sum of number of
    //elements existing currently in changeset + what we're adding
    final int maximumChangesetElements = 18;
    hootProps.setProperty("maximumChangesetElements", String.valueOf(maximumChangesetElements));
    HootProperties.setProperties(hootProps);
    Assert.assertEquals(maximumChangesetElements,
            Integer.parseInt(HootProperties.getInstance().getProperty("maximumChangesetElements")));

    try {// w  ww.  jav a  2  s .  com
        final BoundingBox originalBounds = OsmTestUtils.createStartingTestBounds();
        final long changesetId = OsmTestUtils.createTestChangeset(originalBounds);
        final Set<Long> nodeIds = OsmTestUtils.createTestNodes(changesetId, originalBounds);
        final Long[] nodeIdsArr = nodeIds.toArray(new Long[] {});
        final Set<Long> wayIds = OsmTestUtils.createTestWays(changesetId, nodeIds);
        final Long[] wayIdsArr = wayIds.toArray(new Long[] {});
        final Set<Long> relationIds = OsmTestUtils.createTestRelations(changesetId, nodeIds, wayIds);
        final Long[] relationIdsArr = relationIds.toArray(new Long[] {});

        final BoundingBox updatedBounds = OsmTestUtils.createAfterModifiedTestChangesetBounds();
        //Now update an existing changeset with a number of elements that, when combined with the
        //existing elements, are equal to the max allowed.  The elements should be written and the
        //changeset closed.
        Document responseData = null;
        try {
            responseData = resource().path("api/0.6/changeset/" + changesetId + "/upload")
                    .queryParam("mapId", "" + mapId).type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
                    .post(Document.class, "<osmChange version=\"0.3\" generator=\"iD\">" + "<create/>"
                            + "<modify>" + "<node id=\"" + nodeIdsArr[0] + "\" lon=\""
                            + updatedBounds.getMinLon() + "\" " + "lat=\"" + updatedBounds.getMinLat()
                            + "\" version=\"1\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 1b\" v=\"val 1b\"></tag>" + "<tag k=\"key 2b\" v=\"val 2b\"></tag>"
                            + "</node>" + "<node id=\"" + nodeIdsArr[1] + "\" lon=\""
                            + originalBounds.getMaxLon() + "\" " + "lat=\"" + updatedBounds.getMinLat()
                            + "\" version=\"1\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 3b\" v=\"val 3b\"></tag>" + "</node>" + "<way id=\"" + wayIdsArr[0]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >" + "<nd ref=\""
                            + nodeIdsArr[0] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[4] + "\"></nd>"
                            + "<tag k=\"key 2\" v=\"val 2\"></tag>" + "</way>" + "<way id=\"" + wayIdsArr[1]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >" + "<nd ref=\""
                            + nodeIdsArr[4] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[2] + "\"></nd>" + "</way>"
                            + "<relation id=\"" + relationIdsArr[0] + "\" version=\"1\" changeset=\""
                            + changesetId + "\" >" + "<member type=\"way\" role=\"role4\" ref=\"" + wayIdsArr[1]
                            + "\"></member>" + "<member type=\"way\" role=\"role2\" ref=\"" + wayIdsArr[0]
                            + "\"></member>" + "<member type=\"node\" ref=\"" + nodeIdsArr[2] + "\"></member>"
                            + "</relation>" + "<relation id=\"" + relationIdsArr[1]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"relation\" role=\"role1\" ref=\"" + relationIdsArr[0]
                            + "\"></member>" + "<member type=\"node\" ref=\"" + nodeIdsArr[4] + "\"></member>"
                            + "<tag k=\"key 2\" v=\"val 2\"></tag>" + "<tag k=\"key 3\" v=\"val 3\"></tag>"
                            + "</relation>" + "</modify>" + "<delete if-unused=\"true\"/>" + "</osmChange>");
        } catch (UniformInterfaceException e) {
            ClientResponse r = e.getResponse();
            Assert.fail("Unexpected response " + r.getStatus() + " " + r.getEntity(String.class));
        }
        Assert.assertNotNull(responseData);

        XPath xpath = XmlDocumentBuilder.createXPath();
        try {
            NodeList returnedNodes = XPathAPI.selectNodeList(responseData, "//osm/diffResult/node");
            Assert.assertEquals(2, returnedNodes.getLength());

            Assert.assertEquals((long) nodeIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_version", responseData)));

            Assert.assertEquals((long) nodeIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_version", responseData)));

            NodeList returnedWays = XPathAPI.selectNodeList(responseData, "//osm/diffResult/way");
            Assert.assertEquals(2, returnedWays.getLength());

            Assert.assertEquals((long) wayIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@old_id", responseData)));
            Assert.assertEquals(Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_version", responseData)));

            Assert.assertEquals((long) wayIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@old_id", responseData)));
            Assert.assertEquals(Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_version", responseData)));

            NodeList returnedRelations = XPathAPI.selectNodeList(responseData, "//osm/diffResult/relation");
            Assert.assertEquals(2, returnedRelations.getLength());

            //check the modified relations
            Assert.assertEquals((long) relationIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_version", responseData)));

            Assert.assertEquals((long) relationIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_version", responseData)));
        } catch (XPathExpressionException e) {
            Assert.fail("Error parsing response document: " + e.getMessage());
        }

        final Timestamp now = new Timestamp(Calendar.getInstance().getTimeInMillis());

        QChangesets changesets = QChangesets.changesets;
        hoot.services.db2.Changesets changeset = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                .from(changesets).where(changesets.id.eq(changesetId)).singleResult(changesets);

        try {
            final Map<Long, CurrentNodes> nodes =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentNodesTbl)
                            .map(currentNodesTbl.id, currentNodesTbl);
            Assert.assertEquals(5, nodes.size());

            CurrentNodes nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(nodeIdsArr[0], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Thread.sleep(1000);
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(2, tags.size());
            Assert.assertEquals("val 1b", tags.get("key 1b"));
            Assert.assertEquals("val 2b", tags.get("key 2b"));

            nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(originalBounds.getMaxLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(nodeIdsArr[1], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 3b", tags.get("key 3b"));

            nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[3]);
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 3", tags.get("key 3"));

            nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[4]);
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));
        } catch (Exception e) {
            Assert.fail("Error checking nodes: " + e.getMessage());
        }

        try {
            final Map<Long, CurrentWays> ways =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWaysTbl)
                            .map(currentWaysTbl.id, currentWaysTbl);
            Assert.assertEquals(3, ways.size());

            CurrentWays wayRecord = (CurrentWays) ways.get(wayIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(wayIdsArr[0], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            List<CurrentWayNodes> wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                    .from(currentWayNodesTbl).where(currentWayNodesTbl.wayId.eq(wayIdsArr[0]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            CurrentWayNodes wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[0], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the previously existing tags
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) wayRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 2", tags.get("key 2"));

            wayRecord = (CurrentWays) ways.get(wayIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(wayIdsArr[1], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWayNodesTbl)
                    .where(currentWayNodesTbl.wayId.eq(wayIdsArr[1]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[2], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the way with no tags
            Assert.assertTrue(wayRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) wayRecord.getTags()).getValue()));

            //verify the created ways
            wayRecord = (CurrentWays) ways.get(wayIdsArr[2]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(wayIdsArr[2], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWayNodesTbl)
                    .where(currentWayNodesTbl.wayId.eq(wayIdsArr[2]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[0], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[1], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the created tags
            tags = PostgresUtils.postgresObjToHStore((PGobject) wayRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 3", tags.get("key 3"));
        } catch (Exception e) {
            Assert.fail("Error checking ways: " + e.getMessage());
        }

        try {
            final Map<Long, CurrentRelations> relations =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationsTbl)
                            .map(currentRelationsTbl.id, currentRelationsTbl);
            Assert.assertEquals(4, relations.size());

            CurrentRelations relationRecord = (CurrentRelations) relations.get(relationIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[0], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            List<CurrentRelationMembers> members = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                    .from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[0]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(3, members.size());
            CurrentRelationMembers member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("role4", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[1], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("role2", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[0], member.getMemberId());
            member = members.get(2);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(3), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[2], member.getMemberId());
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.trimToNull(((PGobject) relationRecord.getTags()).getValue()) == null);

            relationRecord = (CurrentRelations) relations.get(relationIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[1], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[1]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(2, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.relation, member.getMemberType());
            Assert.assertEquals("role1", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(relationIdsArr[0], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[4], member.getMemberId());
            tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(2, tags.size());
            Assert.assertEquals("val 2", tags.get("key 2"));
            Assert.assertEquals("val 3", tags.get("key 3"));

            relationRecord = (CurrentRelations) relations.get(relationIdsArr[2]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[2], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[2]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(1, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[1], member.getMemberId());
            tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));

            relationRecord = (CurrentRelations) relations.get(relationIdsArr[3]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[3], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                            .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[3]))
                            .orderBy(currentRelationMembersTbl.sequenceId.asc())
                            .list(currentRelationMembersTbl);
            Assert.assertEquals(1, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("role1", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[2], member.getMemberId());
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) relationRecord.getTags()).getValue()));
        } catch (Exception e) {
            Assert.fail("Error checking relations: " + e.getMessage());
        }

        try {
            Assert.assertNotNull(changeset);
            Assert.assertTrue(changeset.getCreatedAt().before(now));
            Assert.assertTrue(changeset.getClosedAt().after(changeset.getCreatedAt()));
            Assert.assertTrue(changeset.getClosedAt().before(now));
            Assert.assertEquals(new Integer(18), changeset.getNumChanges());
            Assert.assertEquals(new Long(userId), changeset.getUserId());

            BoundingBox expandedBounds = new BoundingBox(originalBounds);
            expandedBounds.expand(updatedBounds,
                    Double.parseDouble(HootProperties.getDefault("changesetBoundsExpansionFactorDeegrees")));
            hoot.services.models.osm.Changeset hootChangeset = new hoot.services.models.osm.Changeset(mapId,
                    changesetId, conn);
            BoundingBox changesetBounds = hootChangeset.getBounds();
            Assert.assertTrue(changesetBounds.equals(expandedBounds));
        } catch (Exception e) {
            Assert.fail("Error checking changeset: " + e.getMessage());
        }
    } catch (Exception e) {
        log.error(e.getMessage());
        throw e;
    } finally {
        //set this back to default now that this test is over
        HootProperties.getInstance().setProperty("maximumChangesetElements",
                HootProperties.getDefault("maximumChangesetElements"));
        Assert.assertEquals(Integer.parseInt(HootProperties.getDefault("maximumChangesetElements")),
                Integer.parseInt(HootProperties.getInstance().getProperty("maximumChangesetElements")));
    }
}

From source file:gov.nij.bundles.intermediaries.ers.EntityResolutionMessageHandlerTest.java

@Test
public void testPerformEntityResolution() throws Exception {

    XPath xp = XPathFactory.newInstance().newXPath();
    xp.setNamespaceContext(testNamespaceContext);

    XmlConverter converter = new XmlConverter();
    converter.getDocumentBuilderFactory().setNamespaceAware(true);
    Document testRequestMessage = converter.toDOMDocument(testRequestMessageInputStream);
    // LOG.info(converter.toString(testRequestMessage));

    Node entityContainerNode = testRequestMessage
            .getElementsByTagNameNS(EntityResolutionNamespaceContext.ER_EXT_NAMESPACE, "EntityContainer")
            .item(0);/*  ww  w .j a va 2 s .c  o m*/
    assertNotNull(entityContainerNode);

    List<String> lastNames = new ArrayList<String>();
    List<String> firstNames = new ArrayList<String>();
    List<String> sids = new ArrayList<String>();

    NodeList inputEntityNodes = (NodeList) testRequestMessage
            .getElementsByTagNameNS(EntityResolutionNamespaceContext.ER_EXT_NAMESPACE, "Entity");
    int inputEntityNodeCount = 6;
    assertEquals(inputEntityNodeCount, inputEntityNodes.getLength());

    for (int i = 0; i < inputEntityNodeCount; i++) {
        Node entityNode = inputEntityNodes.item(i);
        lastNames.add(
                xp.evaluate("ext:PersonSearchResult/ext:Person/nc:PersonName/nc:PersonSurName", entityNode));
        firstNames.add(
                xp.evaluate("ext:PersonSearchResult/ext:Person/nc:PersonName/nc:PersonGivenName", entityNode));
        sids.add(xp.evaluate(
                "ext:PersonSearchResult/ext:Person/jxdm:PersonAugmentation/jxdm:PersonStateFingerprintIdentification/nc:IdentificationID",
                entityNode));
    }

    Map<String, Integer> lastNameCountMap = new HashMap<String, Integer>();
    for (String lastName : lastNames) {
        Integer count = lastNameCountMap.get(lastName);
        if (count == null) {
            count = 0;
        }
        lastNameCountMap.put(lastName, ++count);
    }
    Map<String, Integer> firstNameCountMap = new HashMap<String, Integer>();
    for (String firstName : firstNames) {
        Integer count = firstNameCountMap.get(firstName);
        if (count == null) {
            count = 0;
        }
        firstNameCountMap.put(firstName, ++count);
    }
    Map<String, Integer> sidCountMap = new HashMap<String, Integer>();
    for (String sid : sids) {
        Integer count = sidCountMap.get(sid);
        if (count == null) {
            count = 0;
        }
        sidCountMap.put(sid, ++count);
    }

    Document resultDocument = entityResolutionMessageHandler.performEntityResolution(entityContainerNode, null,
            null);

    resultDocument.normalizeDocument();
    // LOG.info(converter.toString(resultDocument));
    NodeList entityNodes = (NodeList) xp.evaluate("//merge-result:EntityContainer/merge-result-ext:Entity",
            resultDocument, XPathConstants.NODESET);
    assertEquals(inputEntityNodeCount, entityNodes.getLength());
    entityNodes = (NodeList) xp.evaluate("//merge-result-ext:MergedRecord", resultDocument,
            XPathConstants.NODESET);
    assertEquals(3, entityNodes.getLength());
    entityNodes = (NodeList) xp.evaluate("//merge-result-ext:OriginalRecordReference", resultDocument,
            XPathConstants.NODESET);
    assertEquals(inputEntityNodeCount, entityNodes.getLength());
    for (int i = 0; i < entityNodes.getLength(); i++) {
        Element e = (Element) entityNodes.item(i);
        String entityIdRef = e.getAttributeNS(EntityResolutionNamespaceContext.STRUCTURES_NAMESPACE, "ref");
        assertNotNull(entityIdRef);
        assertNotNull(xp.evaluate("//merge-result-ext:Entity[@s:id='" + entityIdRef + "']", resultDocument,
                XPathConstants.NODE));
    }
    for (String lastName : lastNameCountMap.keySet()) {
        assertEquals(lastNameCountMap.get(lastName).intValue(), ((Number) xp.evaluate(
                "count(//merge-result-ext:Entity[ext:PersonSearchResult/ext:Person/nc:PersonName/nc:PersonSurName='"
                        + lastName + "'])",
                resultDocument, XPathConstants.NUMBER)).intValue());
    }
    for (String firstName : firstNames) {
        assertEquals(firstNameCountMap.get(firstName).intValue(), ((Number) xp.evaluate(
                "count(//merge-result-ext:Entity[ext:PersonSearchResult/ext:Person/nc:PersonName/nc:PersonGivenName='"
                        + firstName + "'])",
                resultDocument, XPathConstants.NUMBER)).intValue());
    }
    for (String sid : sids) {
        assertEquals(sidCountMap.get(sid).intValue(), ((Number) xp.evaluate(
                "count(//merge-result-ext:Entity[ext:PersonSearchResult/ext:Person/jxdm:PersonAugmentation/jxdm:PersonStateFingerprintIdentification/nc:IdentificationID='"
                        + sid + "'])",
                resultDocument, XPathConstants.NUMBER)).intValue());
    }

    String recordLimitExceeded = xp.evaluate(
            "/merge-result:EntityMergeResultMessage/merge-result:RecordLimitExceededIndicator", resultDocument);
    assertEquals("false", recordLimitExceeded);

}

From source file:hoot.services.controllers.osm.ChangesetResourceUploadAllTest.java

@Test
@Category(UnitTest.class)
public void testUploadAll() throws Exception {
    try {/*from   ww  w  . j  a v a  2 s.  com*/
        final BoundingBox originalBounds = OsmTestUtils.createStartingTestBounds();
        final long changesetId = OsmTestUtils.createTestChangeset(originalBounds);
        final Set<Long> nodeIds = OsmTestUtils.createTestNodes(changesetId, originalBounds);
        final Long[] nodeIdsArr = nodeIds.toArray(new Long[] {});
        final Set<Long> wayIds = OsmTestUtils.createTestWays(changesetId, nodeIds);
        final Long[] wayIdsArr = wayIds.toArray(new Long[] {});
        final Set<Long> relationIds = OsmTestUtils.createTestRelations(changesetId, nodeIds, wayIds);
        final Long[] relationIdsArr = relationIds.toArray(new Long[] {});

        /*now update the changeset via the service with create, modify, and delete requests in the
          same diff request
                
         The original dataset looks like (0 based ID ordering):
                
         nodes
                
         node 0: with node tags "key 1" and "key 2"
         node 1: with no node tags
         node 2: with no node tags
         node 3: with node tags "key 3"
         node 4: with node tags "key 4"
                
         ways
                
         way 0: with nodes 0, 1, 4; with way tags "key 1" and "key 2"
         way 1: with nodes 2, 1; with no way tags
         way 2: with node 0, 1; with way tags "key 3"
                
         relations
                
         relation 0: with members:
           node 0, "role1"
           way 1, "role3"
           way 0, "role2"
           node 2, no role
           relation tags
             "key 1"/"val 1"
         relation 1: with members:
           node 4, "role1"
           relation 0, "role1"
           relation tags
             "key 2"/"val 2"
             "key 3"/"val 3"
         relation 2: with members:
           way 1, no role
           relation tags
             "key 4"/"val 4"
         relation 3: with members:
           node 2, "role1"
           no tags
                
         This request:
                
         creates two nodes:
           one linked to the existing node tag "key 4" and a new node tag, "key 5"
           one with no node tags
                
         creates two ways:
           one with node 0 and node 4; with way tag "key 4"
           one with node 0, node 2, and node 4; with no way tag
                
         creates three relations:
           one with way 1/"role2", node 2/"role3", and node 4/empty role; with no
             relation tag
           one with node 0/"role1" and the previous relation created in this list, no role; with
             relation tag "key 4"
           one with relation 1/"role2"; with relation tag "key 1"
                
         modifies two nodes:
           modifies node 0 to have tag "key 1b" and "key 2b" and an updated bounds
           modifies node 1 to have tag "key 5b" and an updated bounds
                
         modifies two ways:
           modifies way 0 to remove node 1; remove tag "key 1"
           modifies way 1 to swap node 1 for node 4; tags unchanged
                
         modifies two relations:
           modifies relation 0 to remove node 0; remove tag "key 1"
           modifies relation 1 to reverse the order of node 4 and relation 0; tags unchanged
                
         deletes one node:
           node 3
                
         deletes one way
           way 2
                
         deletes one relation
           relation 2
         */
        final BoundingBox updatedBounds = OsmTestUtils.createAfterModifiedTestChangesetBounds();
        Document responseData = null;
        try {
            responseData = resource().path("api/0.6/changeset/" + changesetId + "/upload")
                    .queryParam("mapId", "" + mapId).type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
                    .post(Document.class, "<osmChange version=\"0.3\" generator=\"iD\">" + "<create>"
                            + "<node id=\"-1\" lon=\"" + originalBounds.getMinLon() + "\" lat=\""
                            + originalBounds.getMinLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 4\" v=\"val 4\"/>" + "<tag k=\"key 5\" v=\"val 5\"/>" + "</node>"
                            + "<node id=\"-2\" lon=\"" + originalBounds.getMaxLon() + "\" lat=\""
                            + originalBounds.getMaxLat() + "\" version=\"0\" changeset=\"" + changesetId + "\">"
                            + "</node>" + "<way id=\"-3\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<nd ref=\"" + nodeIdsArr[0] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[4]
                            + "\"></nd>" + "<tag k=\"key 4\" v=\"val 4\"/>" + "</way>"
                            + "<way id=\"-4\" version=\"0\" changeset=\"" + changesetId + "\" >" + "<nd ref=\""
                            + nodeIdsArr[0] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[2] + "\"></nd>"
                            + "<nd ref=\"" + nodeIdsArr[4] + "\"></nd>" + "</way>"
                            + "<relation id=\"-5\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"way\" role=\"role2\" ref=\"" + wayIdsArr[1] + "\"></member>"
                            + "<member type=\"node\" role=\"role3\" ref=\"" + nodeIdsArr[2] + "\"></member>"
                            + "<member type=\"node\" role=\"\" ref=\"" + nodeIdsArr[4] + "\"></member>"
                            + "</relation>" + "<relation id=\"-6\" version=\"0\" changeset=\"" + changesetId
                            + "\" >" + "<member type=\"node\" role=\"role1\" ref=\"" + nodeIdsArr[0]
                            + "\"></member>" + "<member type=\"relation\" ref=\"-5\"></member>"
                            + "<tag k=\"key 4\" v=\"val 4\"></tag>" + "</relation>"
                            + "<relation id=\"-7\" version=\"0\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"relation\" role=\"role2\" ref=\"" + relationIdsArr[1]
                            + "\"></member>" + "<tag k=\"key 1\" v=\"val 1\"></tag>" + "</relation>"
                            + "</create>" + "<modify>" + "<node id=\"" + nodeIdsArr[0] + "\" lon=\""
                            + updatedBounds.getMinLon() + "\" " + "lat=\"" + updatedBounds.getMinLat()
                            + "\" version=\"1\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 1b\" v=\"val 1b\"></tag>" + "<tag k=\"key 2b\" v=\"val 2b\"></tag>"
                            + "</node>" + "<node id=\"" + nodeIdsArr[1] + "\" lon=\""
                            + updatedBounds.getMinLon() + "\" " + "lat=\"" + updatedBounds.getMinLat()
                            + "\" version=\"1\" changeset=\"" + changesetId + "\">"
                            + "<tag k=\"key 5b\" v=\"val 5b\"></tag>" + "</node>" + "<way id=\"" + wayIdsArr[0]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >" + "<nd ref=\""
                            + nodeIdsArr[0] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[4] + "\"></nd>"
                            + "<tag k=\"key 2\" v=\"val 2\"></tag>" + "</way>" + "<way id=\"" + wayIdsArr[1]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >" + "<nd ref=\""
                            + nodeIdsArr[4] + "\"></nd>" + "<nd ref=\"" + nodeIdsArr[2] + "\"></nd>" + "</way>"
                            + "<relation id=\"" + relationIdsArr[0] + "\" version=\"1\" changeset=\""
                            + changesetId + "\" >" + "<member type=\"way\" role=\"role4\" ref=\"" + wayIdsArr[1]
                            + "\"></member>" + "<member type=\"way\" role=\"role2\" ref=\"" + wayIdsArr[0]
                            + "\"></member>" + "<member type=\"node\" ref=\"" + nodeIdsArr[2] + "\"></member>"
                            + "</relation>" + "<relation id=\"" + relationIdsArr[1]
                            + "\" version=\"1\" changeset=\"" + changesetId + "\" >"
                            + "<member type=\"relation\" role=\"role1\" ref=\"" + relationIdsArr[0]
                            + "\"></member>" + "<member type=\"node\" ref=\"" + nodeIdsArr[4] + "\"></member>"
                            + "<tag k=\"key 2\" v=\"val 2\"></tag>" + "<tag k=\"key 3\" v=\"val 3\"></tag>"
                            + "</relation>" + "</modify>" + "<delete if-unused=\"true\">" + "<node id=\""
                            + nodeIdsArr[3] + "\" lon=\"" + originalBounds.getMinLon() + "\" " + "lat=\""
                            + originalBounds.getMinLat() + "\" version=\"1\" " + "changeset=\"" + changesetId
                            + "\">" + "</node>" + "<way id=\"" + wayIdsArr[2] + "\" version=\"1\" "
                            + "changeset=\"" + changesetId + "\">" + "<nd ref=\"" + nodeIdsArr[0] + "\"></nd>"
                            + "<nd ref=\"" + nodeIdsArr[1] + "\"></nd>" + "</way>" + "<relation id=\""
                            + relationIdsArr[2] + "\" version=\"1\" " + "changeset=\"" + changesetId + "\">"
                            + "<member type=\"way\" ref=\"" + wayIdsArr[1] + "\"></member>" + "</relation>"
                            + "</delete>" + "</osmChange>");
        } catch (UniformInterfaceException e) {
            ClientResponse r = e.getResponse();
            Assert.fail("Unexpected response " + r.getStatus() + " " + r.getEntity(String.class));
        }
        Assert.assertNotNull(responseData);

        XPath xpath = XmlDocumentBuilder.createXPath();
        Set<Long> createdNodeIds = new LinkedHashSet<Long>();
        Set<Long> createdWayIds = new LinkedHashSet<Long>();
        Set<Long> createdRelationIds = new LinkedHashSet<Long>();
        try {
            NodeList returnedNodes = XPathAPI.selectNodeList(responseData, "//osm/diffResult/node");
            Assert.assertEquals(5, returnedNodes.getLength());

            //check the created nodes
            Assert.assertEquals(-1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@old_id", responseData)));
            long newId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdNodeIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[1]/@new_version", responseData)));

            Assert.assertEquals(-2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdNodeIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[2]/@new_version", responseData)));

            //check the modified nodes
            Assert.assertEquals((long) nodeIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[3]/@new_version", responseData)));

            Assert.assertEquals((long) nodeIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[4]/@new_version", responseData)));

            //check the deleted node
            Assert.assertEquals((long) nodeIdsArr[3],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/node[5]/@old_id", responseData)));
            org.w3c.dom.Node deletedXml = XPathAPI.selectSingleNode(responseData, "//osm/diffResult/node[5]");
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_id"));
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_version"));

            NodeList returnedWays = XPathAPI.selectNodeList(responseData, "//osm/diffResult/way");
            Assert.assertEquals(5, returnedWays.getLength());

            //check the created ways
            Assert.assertEquals(-3,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdWayIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[1]/@new_version", responseData)));

            Assert.assertEquals(-4,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdWayIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[2]/@new_version", responseData)));

            //check the modified ways
            Assert.assertEquals((long) wayIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@old_id", responseData)));
            Assert.assertEquals(Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[3]/@new_version", responseData)));

            Assert.assertEquals((long) wayIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[4]/@old_id", responseData)));
            Assert.assertEquals(Long.parseLong(xpath.evaluate("//osm/diffResult/way[4]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[4]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[4]/@new_version", responseData)));

            //check the deleted way
            Assert.assertEquals((long) wayIdsArr[2],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/way[5]/@old_id", responseData)));
            deletedXml = XPathAPI.selectSingleNode(responseData, "//osm/diffResult/way[5]");
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_id"));
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_version"));

            NodeList returnedRelations = XPathAPI.selectNodeList(responseData, "//osm/diffResult/relation");
            Assert.assertEquals(6, returnedRelations.getLength());

            //check the created relations
            Assert.assertEquals(-5,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdRelationIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[1]/@new_version", responseData)));

            Assert.assertEquals(-6,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdRelationIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[2]/@new_version", responseData)));

            Assert.assertEquals(-7,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@old_id", responseData)));
            newId = Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@new_id", responseData));
            Assert.assertTrue(newId > 0);
            createdRelationIds.add(newId);
            Assert.assertEquals(1,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[3]/@new_version", responseData)));

            //check the modified relations
            Assert.assertEquals((long) relationIdsArr[0],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[4]/@new_version", responseData)));

            Assert.assertEquals((long) relationIdsArr[1],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[5]/@old_id", responseData)));
            Assert.assertEquals(
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[5]/@old_id", responseData)),
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[5]/@new_id", responseData)));
            Assert.assertEquals(2,
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[5]/@new_version", responseData)));

            //check the deleted relation
            Assert.assertEquals((long) relationIdsArr[2],
                    Long.parseLong(xpath.evaluate("//osm/diffResult/relation[6]/@old_id", responseData)));
            deletedXml = XPathAPI.selectSingleNode(responseData, "//osm/diffResult/relation[6]");
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_id"));
            Assert.assertNull(deletedXml.getAttributes().getNamedItem("new_version"));
        } catch (XPathExpressionException e) {
            Assert.fail("Error parsing response document: " + e.getMessage());
        }
        QChangesets changesets = QChangesets.changesets;
        hoot.services.db2.Changesets changeset = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                .from(changesets).where(changesets.id.eq(changesetId)).singleResult(changesets);

        final Long[] createdNodeIdsArr = createdNodeIds.toArray(new Long[] {});
        final Long[] createdWayIdsArr = createdWayIds.toArray(new Long[] {});
        final Long[] createdRelationIdsArr = createdRelationIds.toArray(new Long[] {});

        final Timestamp now = new Timestamp(Calendar.getInstance().getTimeInMillis());
        try {
            final Map<Long, CurrentNodes> nodes =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentNodesTbl)
                            .map(currentNodesTbl.id, currentNodesTbl);
            Assert.assertEquals(6, nodes.size());

            //verify the updated nodes
            CurrentNodes nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(nodeIdsArr[0], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            //verify the modified tags
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(2, tags.size());
            Assert.assertEquals("val 1b", tags.get("key 1b"));
            Assert.assertEquals("val 2b", tags.get("key 2b"));

            nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(updatedBounds.getMinLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(nodeIdsArr[1], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            //verify the created tags
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 5b", tags.get("key 5b"));

            //verify the created nodes
            nodeRecord = (CurrentNodes) nodes.get(createdNodeIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(originalBounds.getMinLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(originalBounds.getMinLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(createdNodeIdsArr[0], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(2, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));
            Assert.assertEquals("val 5", tags.get("key 5"));

            nodeRecord = (CurrentNodes) nodes.get(createdNodeIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), nodeRecord.getChangesetId());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(originalBounds.getMaxLat()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLatitude());
            Assert.assertEquals(new Integer(
                    (int) (DbUtils.toDbCoordPrecision(originalBounds.getMaxLon()) * GeoUtils.GEO_RECORD_SCALE)),
                    nodeRecord.getLongitude());
            Assert.assertEquals(createdNodeIdsArr[1], nodeRecord.getId());
            Assert.assertEquals(
                    new Long(QuadTileCalculator.tileForPoint(DbUtils.fromDbCoordValue(nodeRecord.getLatitude()),
                            DbUtils.fromDbCoordValue(nodeRecord.getLongitude()))),
                    nodeRecord.getTile());
            Assert.assertTrue(nodeRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), nodeRecord.getVersion());
            Assert.assertEquals(new Boolean(true), nodeRecord.getVisible());
            //verify the nodes with no tags
            Assert.assertTrue(nodeRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) nodeRecord.getTags()).getValue()));

            Assert.assertNull(nodes.get(nodeIdsArr[3]));

            //verify the previously existing tags
            nodeRecord = (CurrentNodes) nodes.get(nodeIdsArr[4]);
            tags = PostgresUtils.postgresObjToHStore((PGobject) nodeRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));
        } catch (Exception e) {
            Assert.fail("Error checking nodes: " + e.getMessage());
        }

        try {
            final Map<Long, CurrentWays> ways =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWaysTbl)
                            .map(currentWaysTbl.id, currentWaysTbl);
            Assert.assertEquals(4, ways.size());

            //verify the updated ways
            CurrentWays wayRecord = (CurrentWays) ways.get(wayIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(wayIdsArr[0], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            List<CurrentWayNodes> wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                    .from(currentWayNodesTbl).where(currentWayNodesTbl.wayId.eq(wayIdsArr[0]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            CurrentWayNodes wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[0], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the previously existing tags
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) wayRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 2", tags.get("key 2"));

            wayRecord = (CurrentWays) ways.get(wayIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(wayIdsArr[1], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWayNodesTbl)
                    .where(currentWayNodesTbl.wayId.eq(wayIdsArr[1]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[2], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            Assert.assertTrue(wayRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) wayRecord.getTags()).getValue()));

            //verify the created ways
            wayRecord = (CurrentWays) ways.get(createdWayIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(createdWayIdsArr[0], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWayNodesTbl)
                    .where(currentWayNodesTbl.wayId.eq(createdWayIdsArr[0]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(2, wayNodes.size());
            wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[0], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the created tags
            tags = PostgresUtils.postgresObjToHStore((PGobject) wayRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));

            wayRecord = (CurrentWays) ways.get(createdWayIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), wayRecord.getChangesetId());
            Assert.assertEquals(createdWayIdsArr[1], wayRecord.getId());
            Assert.assertTrue(wayRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), wayRecord.getVersion());
            Assert.assertEquals(new Boolean(true), wayRecord.getVisible());
            wayNodes = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWayNodesTbl)
                    .where(currentWayNodesTbl.wayId.eq(createdWayIdsArr[1]))
                    .orderBy(currentWayNodesTbl.sequenceId.asc()).list(currentWayNodesTbl);
            Assert.assertEquals(3, wayNodes.size());
            wayNode = wayNodes.get(0);
            Assert.assertEquals(nodeIdsArr[0], wayNode.getNodeId());
            Assert.assertEquals(new Long(1), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(1);
            Assert.assertEquals(nodeIdsArr[2], wayNode.getNodeId());
            Assert.assertEquals(new Long(2), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            wayNode = wayNodes.get(2);
            Assert.assertEquals(nodeIdsArr[4], wayNode.getNodeId());
            Assert.assertEquals(new Long(3), wayNode.getSequenceId());
            Assert.assertEquals(wayRecord.getId(), wayNode.getWayId());
            //verify the ways with no tags
            Assert.assertTrue(wayRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) wayRecord.getTags()).getValue()));

            //verify the deleted way
            Assert.assertNull(new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentWaysTbl)
                    .where(currentWaysTbl.id.eq(new Long(wayIdsArr[2]))).singleResult(currentWaysTbl)

            );
        } catch (Exception e) {
            Assert.fail("Error checking ways: " + e.getMessage());
        }

        try {
            final Map<Long, CurrentRelations> relations =

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationsTbl)
                            .map(currentRelationsTbl.id, currentRelationsTbl);
            Assert.assertEquals(6, relations.size());

            //verify the updated relations
            CurrentRelations relationRecord = (CurrentRelations) relations.get(relationIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[0], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            List<CurrentRelationMembers> members = new SQLQuery(conn, DbUtils.getConfiguration(mapId))
                    .from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[0]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(3, members.size());
            CurrentRelationMembers member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("role4", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[1], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("role2", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[0], member.getMemberId());
            member = members.get(2);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(3), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[2], member.getMemberId());
            //verify tags that should no longer exist
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) relationRecord.getTags()).getValue()));

            relationRecord = (CurrentRelations) relations.get(relationIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[1], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(2), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[1]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(2, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.relation, member.getMemberType());
            Assert.assertEquals("role1", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(relationIdsArr[0], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[4], member.getMemberId());
            //verify the previously existing tags
            Map<String, String> tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(2, tags.size());
            Assert.assertEquals("val 2", tags.get("key 2"));
            Assert.assertEquals("val 3", tags.get("key 3"));

            //verify the unmodified relation
            relationRecord = (CurrentRelations) relations.get(relationIdsArr[3]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(relationIdsArr[3], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(relationIdsArr[3]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(1, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("role1", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[2], member.getMemberId());
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) relationRecord.getTags()).getValue()));

            //verify the created relations
            relationRecord = (CurrentRelations) relations.get(createdRelationIdsArr[0]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(createdRelationIdsArr[0], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(createdRelationIdsArr[0]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(3, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.way, member.getMemberType());
            Assert.assertEquals("role2", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(wayIdsArr[1], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("role3", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[2], member.getMemberId());
            member = members.get(2);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(3), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[4], member.getMemberId());
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) relationRecord.getTags()).getValue()));

            relationRecord = (CurrentRelations) relations.get(createdRelationIdsArr[1]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(createdRelationIdsArr[1], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(createdRelationIdsArr[1]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(2, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.node, member.getMemberType());
            Assert.assertEquals("role1", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(nodeIdsArr[0], member.getMemberId());
            member = members.get(1);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.relation, member.getMemberType());
            Assert.assertEquals("", member.getMemberRole());
            Assert.assertEquals(new Integer(2), member.getSequenceId());

            Assert.assertEquals(createdRelationIdsArr[0], member.getMemberId());
            //verify the created tags
            tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 4", tags.get("key 4"));

            relationRecord = (CurrentRelations) relations.get(createdRelationIdsArr[2]);
            Assert.assertEquals(new Long(changesetId), relationRecord.getChangesetId());
            Assert.assertEquals(createdRelationIdsArr[2], relationRecord.getId());
            Assert.assertTrue(relationRecord.getTimestamp().before(now));
            Assert.assertEquals(new Long(1), relationRecord.getVersion());
            Assert.assertEquals(new Boolean(true), relationRecord.getVisible());
            members = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationMembersTbl)
                    .where(currentRelationMembersTbl.relationId.eq(createdRelationIdsArr[2]))
                    .orderBy(currentRelationMembersTbl.sequenceId.asc()).list(currentRelationMembersTbl);
            Assert.assertEquals(1, members.size());
            member = members.get(0);
            Assert.assertEquals(relationRecord.getId(), member.getRelationId());
            Assert.assertEquals(DbUtils.nwr_enum.relation, member.getMemberType());
            Assert.assertEquals("role2", member.getMemberRole());
            Assert.assertEquals(new Integer(1), member.getSequenceId());

            Assert.assertEquals(relationIdsArr[1], member.getMemberId());
            tags = PostgresUtils.postgresObjToHStore((PGobject) relationRecord.getTags());
            Assert.assertNotNull(tags);
            Assert.assertEquals(1, tags.size());
            Assert.assertEquals("val 1", tags.get("key 1"));

            //verify the deleted relation
            Assert.assertNull(

                    new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(currentRelationsTbl)
                            .where(currentRelationsTbl.id.eq(new Long(relationIdsArr[2])))
                            .singleResult(currentRelationsTbl));

            //verify the relations with no tags
            relationRecord = (CurrentRelations) relations.get(relationIdsArr[3]);
            Assert.assertTrue(relationRecord.getTags() == null
                    || StringUtils.isEmpty(((PGobject) relationRecord.getTags()).getValue()));
        } catch (Exception e) {
            Assert.fail("Error checking relations: " + e.getMessage());
        }

        try {
            changeset = new SQLQuery(conn, DbUtils.getConfiguration(mapId)).from(changesets)
                    .where(changesets.id.eq(changesetId)).singleResult(changesets);

            Assert.assertNotNull(changeset);
            Assert.assertTrue(changeset.getCreatedAt().before(now));
            Assert.assertTrue(changeset.getClosedAt().after(changeset.getCreatedAt()));
            Assert.assertEquals(new Integer(28), changeset.getNumChanges());
            Assert.assertEquals(new Long(userId), changeset.getUserId());

            BoundingBox expandedBounds = new BoundingBox();
            final double boundsExpansionFactor = Double
                    .parseDouble(HootProperties.getDefault("changesetBoundsExpansionFactorDeegrees"));
            expandedBounds.expand(originalBounds, boundsExpansionFactor);
            expandedBounds.expand(updatedBounds, boundsExpansionFactor);
            hoot.services.models.osm.Changeset hootChangeset = new hoot.services.models.osm.Changeset(mapId,
                    changesetId, conn);
            BoundingBox changesetBounds = hootChangeset.getBounds();
            //TODO: fix
            //Assert.assertTrue(changesetBounds.equals(expandedBounds));
        } catch (Exception e) {
            Assert.fail("Error checking changeset: " + e.getMessage());
        }
    } catch (Exception e) {
        log.error(e.getMessage());
        throw e;
    }
}

From source file:com.esri.gpt.server.csw.provider3.GetRecordsProvider.java

/**
 * Handles an XML based request (normally HTTP POST).
 * @param context the operation context/*from  w  w  w .j  a  v  a2 s .  co  m*/
 * @param root the root node
 * @param xpath an XPath to enable queries (properly configured with name spaces)
 * @throws Exception if a processing exception occurs
 */
public void handleXML(OperationContext context, Node root, XPath xpath) throws Exception {

    // initialize
    LOGGER.finer("Handling csw:GetRecords request XML...");
    QueryOptions qOptions = context.getRequestOptions().getQueryOptions();
    qOptions.setMaxRecordsThreshold(getMaxRecordsThreshold());
    ServiceProperties svcProps = context.getServiceProperties();
    ParseHelper pHelper = new ParseHelper();
    ValidationHelper vHelper = new ValidationHelper();
    String locator;
    String[] parsed;
    ISupportedValues supported;
    IProviderFactory factory = context.getProviderFactory();

    // service and version are parsed by the parent RequestHandler

    // TODO requestId
    locator = "@outputFormat";
    parsed = pHelper.getParameterValues(root, xpath, locator);
    supported = svcProps.getSupportedValues(CswConstants.Parameter_OutputFormat);
    try {
        context.getOperationResponse()
                .setOutputFormat(vHelper.validateValue(supported, locator, parsed, false));
    } catch (OwsException ex) {
        context.getOperationResponse().setResponseCode(HttpServletResponse.SC_BAD_REQUEST);
        throw ex;
    }

    // output schema
    locator = "@outputSchema";
    parsed = pHelper.getParameterValues(root, xpath, locator);
    supported = svcProps.getSupportedValues(CswConstants.Parameter_OutputSchema);
    try {
        qOptions.setOutputSchema(vHelper.validateValue(supported, locator, parsed, false));
    } catch (OwsException ex) {
        context.getOperationResponse().setResponseCode(HttpServletResponse.SC_BAD_REQUEST);
        throw ex;
    }

    // start and max records
    qOptions.setStartRecord(Math.max(Val.chkInt(xpath.evaluate("@startPosition", root), 1), 1));
    qOptions.setMaxRecords(Val.chkInt(xpath.evaluate("@maxRecords", root), 10));

    // result type
    locator = "@resultType";
    parsed = pHelper.getParameterValues(root, xpath, locator);
    supported = svcProps.getSupportedValues(CswConstants.Parameter_ResultType);
    qOptions.setResultType(vHelper.validateValue(supported, locator, parsed, false));
    if (qOptions.getResultType() == null) {
        qOptions.setResultType(CswConstants.ResultType_Results);
    }

    // find the query node
    locator = "csw:Query";
    Node ndQuery = (Node) xpath.evaluate(locator, root, XPathConstants.NODE);
    if (ndQuery != null) {

        // query type names
        locator = "csw:Query/@typeNames";
        parsed = pHelper.getParameterValues(root, xpath, "@typeNames");
        qOptions.setQueryTypeNames(vHelper.validateValues(locator, parsed, false));

        // response element set type
        locator = "csw:ElementSetName";
        parsed = pHelper.getParameterValues(ndQuery, xpath, locator);
        supported = svcProps.getSupportedValues(CswConstants.Parameter_ElementSetType);
        qOptions.setElementSetType(vHelper.validateValue(supported, locator, parsed, false));

        // response element set type names
        String elementSetType = qOptions.getElementSetType();
        if (elementSetType != null) {
            locator = "csw:ElementSetName/@typeNames";
            parsed = pHelper.getParameterValues(ndQuery, xpath, locator);
            qOptions.setElementSetTypeNames(vHelper.validateValues(locator, parsed, false));
        }

        locator = "csw:ElementName";
        parsed = pHelper.getParameterValues(ndQuery, xpath, locator);
        if (parsed != null && qOptions.getElementSetType() != null) {
            String msg = "GetRecordsProvider:handleGet: elementName not allowed if elementSetName present.";
            context.getOperationResponse().setResponseCode(HttpServletResponse.SC_BAD_REQUEST);
            throw new OwsException(OwsException.OWSCODE_NoApplicableCode, locator, msg);
        }
        supported = svcProps.getSupportedValues(CswConstants.Parameter_ElementName);
        qOptions.setElementNames(vHelper.validateValues(supported, locator, parsed, false));

        // find the constraint node
        Node ndConstraint = (Node) xpath.evaluate("csw:Constraint", ndQuery, XPathConstants.NODE);
        if (ndConstraint != null) {

            // constraint version
            String constraintVersion = xpath.evaluate("@version", ndConstraint);
            qOptions.setQueryConstraintVersion(constraintVersion);

            // csw:CqlText
            locator = "csw:CqlText";
            Node ndCql = (Node) xpath.evaluate(locator, ndConstraint, XPathConstants.NODE);
            if (ndCql != null) {
                String cql = Val.chkStr(ndCql.getTextContent());
                qOptions.setQueryConstraintCql(cql);
                ICqlParser parser = factory.makeCqlParser(context, constraintVersion);
                if (parser == null) {
                    String msg = "IProviderFactory.makeCqlParser: instantiation failed.";
                    throw new OwsException(OwsException.OWSCODE_NoApplicableCode, locator, msg);
                } else {
                    parser.parseCql(context, cql);
                }
            } else {

                // ogc:Filter
                locator = "fes:Filter";
                Node ndFilter = (Node) xpath.evaluate(locator, ndConstraint, XPathConstants.NODE);
                if (ndFilter != null) {
                    IFilterParser parser = factory.makeFilterParser(context, constraintVersion);
                    if (parser == null) {
                        String msg = "IProviderFactory.makeFilterParser: instantiation failed.";
                        throw new OwsException(OwsException.OWSCODE_NoApplicableCode, locator, msg);
                    } else {
                        parser.parseFilter(context, ndFilter, xpath);
                    }
                } else {
                    String msg = "An OGC filter for the CSW constraint is required.";
                    throw new OwsException(OwsException.OWSCODE_NoApplicableCode, locator, msg);
                }
            }
        }

        // ogc:SortBy
        locator = "ogc:SortBy";
        Node ndSortBy = (Node) xpath.evaluate(locator, ndQuery, XPathConstants.NODE);
        if (ndSortBy != null) {
            ISortByParser parser = factory.makeSortByParser(context);
            if (parser == null) {
                String msg = "IProviderFactory.makeSortByParser: instantiation failed.";
                throw new OwsException(OwsException.OWSCODE_NoApplicableCode, locator, msg);
            } else {
                parser.parseSortBy(context, ndSortBy, xpath);
            }
        }
    }

    // execute the request
    this.execute(context);
}

From source file:com.ext.portlet.epsos.EpsosHelperService.java

public static String getPortalTranslation(String key, String language) {
    String translation = "";
    language = language.replaceAll("_", "-");
    try {//from  ww w  . j a v a2 s. c  om
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        URL url = cl.getResource("content/language/application/" + language + "/SpiritEhrPortal.xml");

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setValidating(false);
        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(url.getFile());
        doc.getDocumentElement().normalize();
        XPath xpath = XPathFactory.newInstance().newXPath();
        translation = xpath.evaluate("//*[@key='" + key + "']", doc);
        if (Validator.isNull(translation))
            translation = key;
    } catch (Exception e) {
        Log.error(e.getMessage());
    }
    return translation;
}