/**
   * Generates a JTable using results from Assessment data
   *
   * @param assessment - Assessment object
   */
  public void makeTable(Assessment assessment) {
    DefaultTableModel model =
        new DefaultTableModel() {
          @Override
          public boolean isCellEditable(int row, int column) {
            // Disables all cells from being editable
            return false;
          }
        };

    // Assigns column headings
    boolean isAnonymised = !assessment.getResults().get(0).getCandKey().contains("#");
    if (isAnonymised) {
      model.addColumn("Name");
      model.addColumn("Student Number");
    } else {
      model.addColumn("Anon Codes");
    }

    model.addColumn("#Ass");
    model.addColumn("Module Code");
    model.addColumn("Mark");
    model.addColumn("Grade");

    table = new JTable(model);
    table.setFont(new Font("Calibri", Font.BOLD, 14));

    // Sets column header look
    JTableHeader header = table.getTableHeader();
    header.setFont(new Font("Calibri", Font.BOLD, 16));
    header.setBackground(Color.black);
    header.setForeground(Color.WHITE);

    // Sets cell selection to single so only one cell is selected
    table.setCellSelectionEnabled(true);
    System.out.println("Making JTable");
    // Fetches first assessment and adds results data to model
    for (Result r : assessment.getResults()) {
      String name = r.getName();
      if (r.getName().equals("")) {
        name = r.getCandKey();
      }
      if (isAnonymised) {
        model.addRow(
            new Object[] {
              name, r.getCandKey(), r.getAssessment(), r.getModuleCode(), r.getMark(), r.getGrade()
            });
      } else {
        model.addRow(
            new Object[] {
              r.getCandKey(), r.getAssessment(), r.getModuleCode(), r.getMark(), r.getGrade()
            });
      }
    }

    table.setPreferredScrollableViewportSize(new Dimension(200, 300));
    table.setFillsViewportHeight(true);
    table.setShowGrid(false);
  }
  /**
   * Loops through all currently loaded Students and matches Anon Codes If matched then replaces
   * anon codes with Student Name
   *
   * @param assessments - ArrayList of currently loaded Assessments
   * @param students - ArrayList of all students
   */
  public void deAnnonymise(ArrayList<Assessment> assessments, ArrayList<Student> students) {
    for (Assessment a : assessments) {
      for (Result t : a.getResults()) {
        String candKey = t.getCandKey();
        // Checks if candKey is actually student number
        // If candKey is student Number, then is coursework file
        if (candKey.substring(candKey.length() - 2, candKey.length() - 1).equals("/")) {
          // Removes the end /1 or /2 after student number
          candKey = candKey.substring(0, candKey.length() - 2);
          candKey = candKey.replaceAll("#", "");

          for (Student s : students) {
            // Finds student with matching student numbers
            if (candKey.equals(s.getStudentNumber() + "")) {
              t.setCandKey(s.getStudentNumber() + "");
              s.addMarks(t.getModuleCode() + " " + t.getAssessment(), t.getMark());
            }
          }
        } else {
          // If candKey is anon code
          for (Student s : students) {
            candKey = candKey.replaceAll("#", "");
            if (candKey.equals(s.getAMC() + "")) {
              // Finds student with matching anonymous marking code replaces it with student number
              t.setCandKey(s.getStudentNumber() + "");
              t.setName(s.getName());
              s.addMarks(t.getModuleCode() + " " + t.getAssessment(), t.getMark());
            }
          }
        }
      }
    }
  }
 /**
  * Loops through all Assessment Objects within Assessment ArrayList If finds existing one, that
  * matches string returns true
  *
  * @param assCode - Assessment code to check
  * @param assessments - ArrayList of assessments
  * @return true - If have existing assessment
  */
 public boolean checkAllAss(String assCode, ArrayList<Assessment> assessments) {
   for (Assessment t : assessments) {
     if (t.getResults().get(0).getAssessment().equals(assCode)) {
       // If does have assessment already
       return true;
     }
   }
   return false;
 }