Ejemplo n.º 1
0
  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;
  }