public void parse(String fileName) throws IOException, ParseException {
    BufferedReader reader =
        new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(fileName)));
    boolean seenGroverCleveland = false;
    President cleveland1 = null;
    String line = reader.readLine().trim();
    while (line != null) {
      if (!line.startsWith("#") && line.length() > 0) {
        String[] fields = line.split(",");
        President p = new President();
        p.name = fields[1];
        p.born = parseDate(p.sBorn = fields[2]);
        p.died = parseDate(p.sDied = fields[3]);
        p.ascension = parseDate(p.sAscension = fields[4]);
        p.endOfTerm = parseDate(p.sEndOfTerm = fields[5]);
        p.alive = fields[3].length() == 0;
        if (p.name.equals("Grover Cleveland")) { // the president with two non-consecutive terms
          if (seenGroverCleveland) {
            p.groverCleveland2 = true;
            p.otherCleveland = cleveland1;
            cleveland1.otherCleveland = p;
          } else {
            p.groverCleveland1 = true;
            cleveland1 = p;
            seenGroverCleveland = true;
          }
        }
        presidents.add(p);
      }
      line = reader.readLine();
      if (line != null) line = line.trim();
    }
    presidents.get(presidents.size() - 1).inOffice = true;

    mccain = new President();
    mccain.name = "John McCain";
    mccain.born = parseDate(mccain.sBorn = "8/29/1936");
    mccain.died = parseDate("");
    mccain.ascension = parseDate("1/20/2009");
    mccain.alive = true;
    mccain.candidate = true;
    presidents.add(mccain);

    obama = new President();
    obama.name = "Barack Obama";
    obama.born = parseDate(obama.sBorn = "8/4/1961");
    obama.died = parseDate("");
    obama.ascension = parseDate("1/20/2009");
    obama.alive = true;
    obama.candidate = true;
    presidents.add(obama);
  }