private void cleanUp() {
    System.out.println("Cleaning up timestamp errors...");

    final List<Incident> incidents = trafficInfoService.read("incident", Incident.class);

    for (final Incident i : incidents) {
      final String message = i.getMessage();
      final String createDate = i.getCreateDate();

      // 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]));

      i.setStartTimestamp(String.valueOf(dateTimeOccurred.getMillis()));

      System.out.println("Date: " + dateTimeOccurred);
      System.out.println("Date in Millis: " + dateTimeOccurred.getMillis());

      trafficInfoService.update(i);
    }

    System.out.println("Total incidents size: " + incidents.size());
  }
  private void filterIncidents(final ArrayList<Incident> incidentList) {
    // check if an incident already exists in DB
    // if exists, what needs to be updated
    // and which incidents have been resolved?
    // else, write incident to DB

    final List<String> ongoingIncidentIds = new ArrayList<String>();

    System.out.println("Size of incidentList: " + incidentList.size());

    for (final Incident incident : incidentList) {
      System.out.println("current incident: " + incident.getMessage());
      final Incident existingIncident = trafficInfoService.read(incident);

      if (existingIncident != null) {
        // already has incident in DB

        if (!existingIncident.getMessage().equals(incident.getMessage())) {
          // if message is different, update incidentMap information
          // service update will check again to update message if different
          extractIncidentInfo(incident);
        }

        System.out.println("Existing entry, updating DB: " + incident.getMessage());

        // retrieve ongoingIncident
        final Incident ongoingIncident =
            trafficInfoService.read(incident, "ongoing", Incident.class);

        // check if ongoing collections has incident, if yes, put the updated incident inside
        if (ongoingIncident != null) {
          // if contains incident, add it to list, at the end, compare with ongoingIncidents list
          // the non-overlapping ones are the resolved ones.
          ongoingIncidentIds.add(ongoingIncident.getId());

          System.out.println("Ongoing incident added to List: " + ongoingIncident.getMessage());

          // update ongoing and incident collections, new incident must replace the old
          // ongoingIncident
          trafficInfoService.update(incident, "ongoing", Incident.class);
          trafficInfoService.update(incident);
        } else {
          // not found in ongoing collection, add it to ongoing collection
          trafficInfoService.insert(incident, "ongoing");
          ongoingIncidentIds.add(incident.getId());

          // update incident collections only
          System.out.println("incident collection updated: " + incident.getMessage());
          trafficInfoService.update(incident);
        }

      } else {
        // incident does not exist in DB
        // extract incident info, then write it to DB
        System.out.println("New entry, adding to DB: " + incident.getMessage());

        final Incident tempIncident = extractIncidentInfo(incident);

        // insert to incident collection
        trafficInfoService.insert(tempIncident);

        // insert to ongoing collection
        trafficInfoService.insert(tempIncident, "ongoing");
        ongoingIncidentIds.add(tempIncident.getId());
      }
    }

    // the incident objects left inside ongoingIncidents are the ones resolved (non-overlapped)
    // remove these incident objects from ongoing collections

    // retrieve the ongoing traffic event of Incident type only
    final List<Incident> ongoingIncidents = trafficInfoService.read("ongoing", Incident.class);
    boolean ongoing;

    for (final Incident ongoingIncident : ongoingIncidents) {
      ongoing = false;

      for (final String ongoingIncidentId : ongoingIncidentIds) {
        if (ongoingIncident.getId().equals(ongoingIncidentId)) {
          // still ongoing, not resolved, break
          ongoing = true;

          break;
        }
      }

      // ongoingIncident not found to be ongoing anymore
      if (!ongoing) {
        trafficInfoService.delete(ongoingIncident, "ongoing", Incident.class);
      }
    }
  }