Program: 36979
Project: 36979
Buggy source:
/** 
 * Annotate article with annotation schema.
 * @param a the read article
 */
public void AnnotateArticle(Article a){
  try {
    Utilities.MakeDirectory("String_Node_Str");
    DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
    Document doc=docBuilder.newDocument();
    Element rootElement=doc.createElement("String_Node_Str");
    doc.appendChild(rootElement);
    Element pmcid=doc.createElement("String_Node_Str");
    pmcid.setTextContent(a.getPmc());
    rootElement.appendChild(pmcid);
    Element pcid=doc.createElement("String_Node_Str");
    pcid.setTextContent(a.getPmid());
    rootElement.appendChild(pcid);
    Element pissn=doc.createElement("String_Node_Str");
    pissn.setTextContent(a.getPissn());
    rootElement.appendChild(pissn);
    Element eissn=doc.createElement("String_Node_Str");
    eissn.setTextContent(a.getEissn());
    rootElement.appendChild(eissn);
    Element title=doc.createElement("String_Node_Str");
    title.setTextContent(a.getTitle());
    rootElement.appendChild(title);
    Element authors=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getAuthors().size(); i++) {
      Element author=doc.createElement("String_Node_Str");
      Element authorName=doc.createElement("String_Node_Str");
      authorName.setTextContent(a.getAuthors().get(i).name);
      author.appendChild(authorName);
      for (int j=0; j < a.getAuthors().get(i).affiliation.size(); j++) {
        Element AuthorAffiliation=doc.createElement("String_Node_Str");
        AuthorAffiliation.setTextContent(a.getAuthors().get(i).affiliation.get(j));
        author.appendChild(AuthorAffiliation);
      }
      Element authorEmail=doc.createElement("String_Node_Str");
      authorEmail.setTextContent(a.getAuthors().get(i).email);
      author.appendChild(authorEmail);
      authors.appendChild(author);
    }
    rootElement.appendChild(authors);
    Element keywords=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getKeywords().length; i++) {
      Element keyword=doc.createElement("String_Node_Str");
      keyword.setTextContent(a.getKeywords()[i]);
      keywords.appendChild(keyword);
    }
    rootElement.appendChild(keywords);
    Element publisher=doc.createElement("String_Node_Str");
    Element publisherName=doc.createElement("String_Node_Str");
    publisherName.setTextContent(a.getPublisher_name());
    publisher.appendChild(publisherName);
    Element publisherLoc=doc.createElement("String_Node_Str");
    publisherLoc.setTextContent(a.getPublisher_loc());
    publisher.appendChild(publisherLoc);
    rootElement.appendChild(publisher);
    Element venue=doc.createElement("String_Node_Str");
    venue.setTextContent(a.getVenue());
    publisher.appendChild(venue);
    Element journal=doc.createElement("String_Node_Str");
    journal.setTextContent(a.getJournal_name());
    publisher.appendChild(journal);
    Element abstractEl=doc.createElement("String_Node_Str");
    abstractEl.setTextContent(a.getAbstract());
    rootElement.appendChild(abstractEl);
    Table[] tables=a.getTables();
    Element tablesEl=doc.createElement("String_Node_Str");
    rootElement.appendChild(tablesEl);
    for (int i=0; i < tables.length; i++) {
      Element tableEl=doc.createElement("String_Node_Str");
      tablesEl.appendChild(tableEl);
      Table table=tables[i];
      Element TabOrder=doc.createElement("String_Node_Str");
      TabOrder.setTextContent(table.getTable_title());
      tableEl.appendChild(TabOrder);
      Element TabCaption=doc.createElement("String_Node_Str");
      TabCaption.setTextContent(table.getTable_caption());
      tableEl.appendChild(TabCaption);
      Element TabFooter=doc.createElement("String_Node_Str");
      TabFooter.setTextContent(table.getTable_footer());
      tableEl.appendChild(TabFooter);
      Element TabStructure=doc.createElement("String_Node_Str");
      TabStructure.setTextContent(table.getTableStructureType().toString());
      tableEl.appendChild(TabStructure);
      Element TabPragmatic=doc.createElement("String_Node_Str");
      TabPragmatic.setTextContent(table.PragmaticClass);
      tableEl.appendChild(TabPragmatic);
      Element TabHasXML=doc.createElement("String_Node_Str");
      if (table.isNoXMLTable())       TabHasXML.setTextContent("String_Node_Str");
 else       TabHasXML.setTextContent("String_Node_Str");
      tableEl.appendChild(TabHasXML);
      Element CellsEl=doc.createElement("String_Node_Str");
      tableEl.appendChild(CellsEl);
      Cell[][] cells=table.original_cells;
      for (int j=0; j < cells.length; j++) {
        for (int k=0; k < cells[j].length; k++) {
          Element CellEl=doc.createElement("String_Node_Str");
          CellsEl.appendChild(CellEl);
          Element CellID=doc.createElement("String_Node_Str");
          String cellIDStr="String_Node_Str" + j + k;
          CellID.setTextContent(cellIDStr);
          cells[j][k].CellId=cellIDStr;
          CellEl.appendChild(CellID);
          if (cells[j][k].getSuperRowIndex() != null && !cells[j][k].getSuperRowIndex().equals("String_Node_Str")) {
            Element SuperRowRef=doc.createElement("String_Node_Str");
            SuperRowRef.setTextContent(cells[j][k].getSuperRowIndex());
            CellEl.appendChild(SuperRowRef);
          }
          Element CellValue=doc.createElement("String_Node_Str");
          CellValue.setTextContent(cells[j][k].getCell_content());
          CellEl.appendChild(CellValue);
          Element CellType=doc.createElement("String_Node_Str");
          CellType.setTextContent(cells[j][k].getCellType());
          CellEl.appendChild(CellType);
          for (int s=j - 1; s >= 0; s--) {
            if (s >= 0 && cells[j][k].isIs_header() && !cells[s][k].isIs_header() && !cells[j][k].getCell_content().equals("String_Node_Str")) {
              break;
            }
            if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header() && !cells[s][k].getCell_content().equals("String_Node_Str")) {
              Element HeaderRef=doc.createElement("String_Node_Str");
              HeaderRef.setTextContent("String_Node_Str" + s + k);
              CellEl.appendChild(HeaderRef);
              break;
            }
            if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header() && cells[s][k].getCell_content().equals("String_Node_Str")) {
              Element HeaderCatRef=doc.createElement("String_Node_Str");
              HeaderCatRef.setTextContent("String_Node_Str" + s + 0);
              CellEl.appendChild(HeaderCatRef);
              break;
            }
          }
          for (int s=k - 1; s >= 0; s--) {
            if (s >= 0 && cells[j][s] != null && cells[j][s].isIs_stub()) {
              Element StubRef=doc.createElement("String_Node_Str");
              StubRef.setTextContent("String_Node_Str" + j + s);
              CellEl.appendChild(StubRef);
              break;
            }
          }
          Element CellRoles=doc.createElement("String_Node_Str");
          CellEl.appendChild(CellRoles);
          boolean isDataCell=true;
          if (cells[j][k].isIs_header()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          if (cells[j][k].isIs_stub()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          boolean isSuperRow=false;
          for (int l=0; l < 5; l++) {
            if (cells[j][k] != null && j + l < cells.length && cells[j + l][k] != null && cells[j + l][k].getSuperRowIndex() != null && cells[j + l][k].getSuperRowIndex().equals(cells[j][k].CellId)) {
              isSuperRow=true;
              break;
            }
          }
          if (isSuperRow) {
            for (int l=0; l < cells[j].length; l++) {
              cells[j][l].setIs_subheader(true);
            }
          }
          if (cells[j][k].isIs_subheader()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
          }
          if (j == 0 && k == 0 && cells[j][k].isIs_header()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          if (isDataCell) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
          }
          Element CellRow=doc.createElement("String_Node_Str");
          CellRow.setTextContent(j + "String_Node_Str");
          CellEl.appendChild(CellRow);
          Element CellColumn=doc.createElement("String_Node_Str");
          CellColumn.setTextContent(k + "String_Node_Str");
          CellEl.appendChild(CellColumn);
        }
      }
    }
    TransformerFactory transformerFactory=TransformerFactory.newInstance();
    Transformer transformer=transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT,"String_Node_Str");
    DOMSource source;
    source=new DOMSource(doc);
    StreamResult result=new StreamResult(new File("String_Node_Str" + a.getPmc() + "String_Node_Str"));
    transformer.transform(source,result);
  }
 catch (  Exception ex) {
    ex.printStackTrace();
  }
}

Fixed version (ground truth):
/** 
 * Annotate article with annotation schema.
 * @param a the read article
 */
public void AnnotateArticle(Article a){
  try {
    Utilities.MakeDirectory("String_Node_Str");
    DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
    Document doc=docBuilder.newDocument();
    Element rootElement=doc.createElement("String_Node_Str");
    doc.appendChild(rootElement);
    Element pmcid=doc.createElement("String_Node_Str");
    pmcid.setTextContent(a.getPmc());
    rootElement.appendChild(pmcid);
    Element pcid=doc.createElement("String_Node_Str");
    pcid.setTextContent(a.getPmid());
    rootElement.appendChild(pcid);
    Element pissn=doc.createElement("String_Node_Str");
    pissn.setTextContent(a.getPissn());
    rootElement.appendChild(pissn);
    Element eissn=doc.createElement("String_Node_Str");
    eissn.setTextContent(a.getEissn());
    rootElement.appendChild(eissn);
    Element title=doc.createElement("String_Node_Str");
    title.setTextContent(a.getTitle());
    rootElement.appendChild(title);
    Element authors=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getAuthors().size(); i++) {
      Element author=doc.createElement("String_Node_Str");
      Element authorName=doc.createElement("String_Node_Str");
      authorName.setTextContent(a.getAuthors().get(i).name);
      author.appendChild(authorName);
      for (int j=0; j < a.getAuthors().get(i).affiliation.size(); j++) {
        Element AuthorAffiliation=doc.createElement("String_Node_Str");
        AuthorAffiliation.setTextContent(a.getAuthors().get(i).affiliation.get(j));
        author.appendChild(AuthorAffiliation);
      }
      Element authorEmail=doc.createElement("String_Node_Str");
      authorEmail.setTextContent(a.getAuthors().get(i).email);
      author.appendChild(authorEmail);
      authors.appendChild(author);
    }
    rootElement.appendChild(authors);
    Element keywords=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getKeywords().length; i++) {
      Element keyword=doc.createElement("String_Node_Str");
      keyword.setTextContent(a.getKeywords()[i]);
      keywords.appendChild(keyword);
    }
    rootElement.appendChild(keywords);
    Element publisher=doc.createElement("String_Node_Str");
    Element publisherName=doc.createElement("String_Node_Str");
    publisherName.setTextContent(a.getPublisher_name());
    publisher.appendChild(publisherName);
    Element publisherLoc=doc.createElement("String_Node_Str");
    publisherLoc.setTextContent(a.getPublisher_loc());
    publisher.appendChild(publisherLoc);
    rootElement.appendChild(publisher);
    Element venue=doc.createElement("String_Node_Str");
    venue.setTextContent(a.getVenue());
    publisher.appendChild(venue);
    Element journal=doc.createElement("String_Node_Str");
    journal.setTextContent(a.getJournal_name());
    publisher.appendChild(journal);
    Element abstractEl=doc.createElement("String_Node_Str");
    abstractEl.setTextContent(a.getAbstract());
    rootElement.appendChild(abstractEl);
    Table[] tables=a.getTables();
    Element tablesEl=doc.createElement("String_Node_Str");
    rootElement.appendChild(tablesEl);
    for (int i=0; i < tables.length; i++) {
      Element tableEl=doc.createElement("String_Node_Str");
      tablesEl.appendChild(tableEl);
      Table table=tables[i];
      Element TabOrder=doc.createElement("String_Node_Str");
      TabOrder.setTextContent(table.getTable_title());
      tableEl.appendChild(TabOrder);
      Element TabCaption=doc.createElement("String_Node_Str");
      TabCaption.setTextContent(table.getTable_caption());
      tableEl.appendChild(TabCaption);
      Element TabFooter=doc.createElement("String_Node_Str");
      TabFooter.setTextContent(table.getTable_footer());
      tableEl.appendChild(TabFooter);
      Element TabStructure=doc.createElement("String_Node_Str");
      TabStructure.setTextContent(table.getTableStructureType().toString());
      tableEl.appendChild(TabStructure);
      Element TabPragmatic=doc.createElement("String_Node_Str");
      TabPragmatic.setTextContent(table.PragmaticClass);
      tableEl.appendChild(TabPragmatic);
      Element TabHasXML=doc.createElement("String_Node_Str");
      if (table.isNoXMLTable())       TabHasXML.setTextContent("String_Node_Str");
 else       TabHasXML.setTextContent("String_Node_Str");
      tableEl.appendChild(TabHasXML);
      Element CellsEl=doc.createElement("String_Node_Str");
      tableEl.appendChild(CellsEl);
      Cell[][] cells=table.original_cells;
      for (int j=0; j < cells.length; j++) {
        for (int k=0; k < cells[j].length; k++) {
          Element CellEl=doc.createElement("String_Node_Str");
          CellsEl.appendChild(CellEl);
          Element CellID=doc.createElement("String_Node_Str");
          String cellIDStr="String_Node_Str" + j + k;
          CellID.setTextContent(cellIDStr);
          cells[j][k].CellId=cellIDStr;
          CellEl.appendChild(CellID);
          if (cells[j][k].getSuperRowIndex() != null && !cells[j][k].getSuperRowIndex().equals("String_Node_Str")) {
            Element SuperRowRef=doc.createElement("String_Node_Str");
            SuperRowRef.setTextContent(cells[j][k].getSuperRowIndex());
            CellEl.appendChild(SuperRowRef);
          }
          Element CellValue=doc.createElement("String_Node_Str");
          CellValue.setTextContent(cells[j][k].getCell_content());
          CellEl.appendChild(CellValue);
          Element CellType=doc.createElement("String_Node_Str");
          CellType.setTextContent(cells[j][k].getCellType());
          CellEl.appendChild(CellType);
          for (int s=j - 1; s >= 0; s--) {
            if (s >= 0 && cells[j][k].isIs_header() && !cells[s][k].isIs_header() && !cells[j][k].getCell_content().equals("String_Node_Str")) {
              break;
            }
            if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
              Element HeaderRef=doc.createElement("String_Node_Str");
              HeaderRef.setTextContent("String_Node_Str" + s + k);
              CellEl.appendChild(HeaderRef);
            }
            if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
              Element HeaderCatRef=doc.createElement("String_Node_Str");
              HeaderCatRef.setTextContent("String_Node_Str" + s + 0);
              CellEl.appendChild(HeaderCatRef);
              break;
            }
          }
          for (int s=k - 1; s >= 0; s--) {
            if (s >= 0 && cells[j][s] != null && cells[j][s].isIs_stub()) {
              Element StubRef=doc.createElement("String_Node_Str");
              StubRef.setTextContent("String_Node_Str" + j + s);
              CellEl.appendChild(StubRef);
              break;
            }
          }
          Element CellRoles=doc.createElement("String_Node_Str");
          CellEl.appendChild(CellRoles);
          boolean isDataCell=true;
          if (cells[j][k].isIs_header()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          if (cells[j][k].isIs_stub()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          boolean isSuperRow=false;
          for (int l=0; l < 5; l++) {
            if (cells[j][k] != null && j + l < cells.length && cells[j + l][k] != null && cells[j + l][k].getSuperRowIndex() != null && cells[j + l][k].getSuperRowIndex().equals(cells[j][k].CellId)) {
              isSuperRow=true;
              break;
            }
          }
          if (isSuperRow) {
            for (int l=0; l < cells[j].length; l++) {
              cells[j][l].setIs_subheader(true);
            }
          }
          if (cells[j][k].isIs_subheader()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
          }
          if (k == 0 && cells[j][k].isIs_header()) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
            isDataCell=false;
          }
          if (isDataCell) {
            Element CellRole=doc.createElement("String_Node_Str");
            CellRole.setTextContent("String_Node_Str");
            CellRoles.appendChild(CellRole);
          }
          Element CellRow=doc.createElement("String_Node_Str");
          CellRow.setTextContent(j + "String_Node_Str");
          CellEl.appendChild(CellRow);
          Element CellColumn=doc.createElement("String_Node_Str");
          CellColumn.setTextContent(k + "String_Node_Str");
          CellEl.appendChild(CellColumn);
        }
      }
    }
    TransformerFactory transformerFactory=TransformerFactory.newInstance();
    Transformer transformer=transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT,"String_Node_Str");
    DOMSource source;
    source=new DOMSource(doc);
    StreamResult result=new StreamResult(new File("String_Node_Str" + a.getPmc() + "String_Node_Str"));
    transformer.transform(source,result);
  }
 catch (  Exception ex) {
    ex.printStackTrace();
  }
}