private Incident parseIncidentEntry(final Node node, final HashMap<String, String> map) throws JaxenException { final XPath xPath = new Dom4jXPath(".//d:*"); xPath.setNamespaceContext(new SimpleNamespaceContext(map)); // System.out.println("node: " + node.asXML()); final List<Node> nodes = xPath.selectNodes(node); // System.out.println("No. of d-namespace nodes: " + nodes.size()); final String incidentId = nodes.get(0).getText(); final String message = nodes.get(1).getText(); final String latitude = nodes.get(2).getText(); final String longitude = nodes.get(3).getText(); final String type = nodes.get(4).getText(); final String summary = nodes.get(5).getText(); final String createDate = nodes.get(6).getText(); final String distance = nodes.get(7).getText(); System.out.println("Message: " + message); // extract date occurred and time occurred from message final String messageValues[] = message.split(" "); final String dateTime = messageValues[0]; // System.out.println("dateTime: " + dateTime); // time and date that incident occurred final String dateTimeValues[] = dateTime.split("\\)"); final String createDateValues[] = createDate.split("T"); final String dateOccurred = createDateValues[0]; // taken from create date (need the year) final String timeOccurred = dateTimeValues[1]; final String dateOccurred2 = dateTimeValues[0]; // taken from message need the month and day final String dateOccurredValues[] = dateOccurred.split("-"); final String dateOccurredValues2[] = dateOccurred2.split("/"); final String timeOccurredValues[] = timeOccurred.split(":"); // Joda Time: year, month, day, hour, min System.out.println( String.format( "Year: %s, month: %s, day: %s, hour: %s, min: %s", Integer.parseInt(dateOccurredValues[0]), Integer.parseInt(dateOccurredValues2[1]), Integer.parseInt(dateOccurredValues2[0].substring(1)), Integer.parseInt(timeOccurredValues[0]), Integer.parseInt(timeOccurredValues[1]))); final DateTime dateTimeOccurred = new DateTime( Integer.parseInt(dateOccurredValues[0]), Integer.parseInt(dateOccurredValues2[1]), Integer.parseInt(dateOccurredValues2[0].substring(1)), Integer.parseInt(timeOccurredValues[0]), Integer.parseInt(timeOccurredValues[1])); // time and date that incident was updated final String dateUpdated = createDateValues[0]; final String timeUpdated = createDateValues[1]; final String dateUpdatedValues[] = dateUpdated.split("-"); final String timeUpdatedValues[] = timeUpdated.split(":"); Integer hourOfDay = Integer.parseInt(timeUpdatedValues[0]) + 8; if (hourOfDay >= 24) { hourOfDay = 0; } // Joda Time: year, month, day, hour, min, secs // hour + 8 because Singapore is GMT +8 final DateTime dateTimeUpdated = new DateTime( Integer.parseInt(dateUpdatedValues[0]), Integer.parseInt(dateUpdatedValues[1]), Integer.parseInt(dateUpdatedValues[2]), hourOfDay, Integer.parseInt(timeUpdatedValues[1]), Integer.parseInt(timeUpdatedValues[2].substring(0, 2))); // calculate duration between datetime occurred and updated final Duration timeElapsed = new Duration(dateTimeOccurred, dateTimeUpdated); // put into Incident final Incident incident = new Incident(incidentId); // something wrong with incidentId initialisation of ObjectId // final Incident incident = new Incident(); // use default constructor for now incident.setId( String.format("%s_%s_%s_%s", dateOccurred, timeOccurred, latitude, longitude)); // custom id incident.setMessage(message); incident.setStartTimestamp(String.valueOf(dateTimeOccurred.getMillis())); incident.setEndTimestamp(String.valueOf(dateTimeUpdated.getMillis())); incident.setLatitude(latitude); incident.setLongitude(longitude); incident.setType(type); incident.setSummary(summary); incident.setCreateDate(createDate); incident.setDistance(distance); incident.setDateOccurred(dateOccurred); incident.setTimeOccured(timeOccurred); incident.setTimeElapsed(timeElapsed.toString()); return incident; }