List of usage examples for javax.xml.xpath XPath evaluate
public String evaluate(String expression, InputSource source) throws XPathExpressionException;
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; }