@Override
  public void open(Reader reader) throws IOException {
    fittestLogBody = XMLLogUtils.load(reader);
    if (fittestLogBody == null) throw new IOException("Failed to read log file!");

    // populate events
    List<EType> eList = fittestLogBody.getE();
    if (eList != null) {
      events = new ArrayList<String>();

      for (EType event : eList) {

        if (event.getO() != null) {
          for (OType o : event.getO()) {
            if (o.getTy() != null && o.getTy().endsWith("RecordEvent")) {
              List<OType.Fd> fds = o.getFd();
              String eventId = "";
              for (OType.Fd fd : fds) {

                if (fd.getN() != null && fd.getN().equals("targetID")) {
                  if (fd.getV() != null) eventId = fd.getV().getV();
                  else eventId = "targetIDEmpty";
                  eventId = eventId + "_";
                }

                if (fd.getN() != null && fd.getN().equals("type")) {
                  if (fd.getV() != null) eventId = eventId + fd.getV().getV();
                  else eventId = eventId + "eventTypeEmpty";
                }
              }
              if (eventId.equals("")) {
                eventId = "eventEmpty";
              }
              eventId = eventId.replaceAll("\"", "");
              events.add(eventId);
              break;
            }
          }
        }
      }

      currentIndex = 0;
    } else {
      throw new IOException("Empty log file!");
    }
  }