/**
   * Validate EIA template table
   *
   * @param eiaTemplate the EIA template table to be parsed
   * @return an array of Incompliances
   */
  public static ArrayList<Incompliance> parseEIATemplateTable(EDFTable eiaTemplate) {

    ArrayList<Incompliance> eiaIncompliances = new ArrayList<Incompliance>();

    final int errorSrcTypeIndex = Incompliance.index_incomp_src_eiatemplate;
    final String incomplianceType = Incompliance.typeOfErrorHeader[errorSrcTypeIndex];
    Incompliance incomp;
    String description;
    boolean bASCII;
    String fileName = eiaTemplate.getMasterFile().getPath();
    int row = 0, col;

    final int COL_INDEX_LOCAL_PATIENT_ID = 2;
    final int COL_INDEX_LOCAL_RECORDING_ID = 3;
    final int COL_INDEX_START_DATE = 4;

    /**
     * ********************************************************** 80 ascii : local patient
     * identification **********************************************************
     */
    col = 0;
    String partient_id =
        ((String) eiaTemplate.getModel().getValueAt(row, COL_INDEX_LOCAL_PATIENT_ID));
    if (partient_id == null || partient_id.equals("")) {
      // [Partient_id](B.2) can be empty field
    } else {
      // [Partient_id](B.1) check for ascii
      bASCII = checkAsciiF(partient_id);
      if (!bASCII) {
        description = Incompliance.error_eia_ascii;
        incomp =
            new Incompliance(incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
        eiaIncompliances.add(incomp);
      }
    }

    /**
     * ********************************************************** 80 ascii : local recording
     * identification **********************************************************
     */
    col = 1;
    String recording_id =
        ((String) eiaTemplate.getModel().getValueAt(row, COL_INDEX_LOCAL_RECORDING_ID));
    if (recording_id == null || recording_id.equals("")) {
      // [Recording_id](C.2) can be empty field
    } else {
      // [Recording_id](C.1) check for ascii
      bASCII = checkAsciiF(recording_id);
      if (!bASCII) {
        description = Incompliance.error_eia_ascii;
        incomp =
            new Incompliance(incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
        eiaIncompliances.add(incomp);
      }
    }

    /**
     * ********************************************************** 8 ascii : startdate of recording
     * (dd.mm.yy) **********************************************************
     */
    col = 2;
    String startdate =
        ((String) eiaTemplate.getModel().getValueAt(row, COL_INDEX_START_DATE)).trim();
    if (startdate == null || startdate.equals("")) {
      // [Startdate](D.2) cannot be empty field
      description = Incompliance.error_eia_empty;
      incomp =
          new Incompliance(incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
      eiaIncompliances.add(incomp);
    } else {
      // [Startdate](D.1) check for ascii
      bASCII = checkAsciiF(startdate);
      if (!bASCII) {
        description = Incompliance.error_eia_ascii;
        incomp =
            new Incompliance(incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
        eiaIncompliances.add(incomp);
      } else {
        // [Startdate](D.4) separator between digits should be only �period�
        String[] items = startdate.split("\\.");
        if (items.length != 3) {
          description = Incompliance.error_eia_dateformat;
          incomp =
              new Incompliance(
                  incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
          eiaIncompliances.add(incomp);
        } else {
          // [Startdate](D.3) dd:00-31, mm:00-12, yy:00-99
          try {
            int dd = Integer.parseInt(items[0]);
            int mm = Integer.parseInt(items[1]);
            int yy = Integer.parseInt(items[2]);
            if (dd >= 0 && dd <= 31 && mm >= 0 && mm <= 12 && yy >= 00 && yy <= 99) {
              // valid date format
            } else {
              description = Incompliance.error_eia_daterange;
              incomp =
                  new Incompliance(
                      incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
              eiaIncompliances.add(incomp);
            }
          } catch (NumberFormatException e) {
            description = Incompliance.error_eia_daterange;
            incomp =
                new Incompliance(
                    incomplianceType, description, fileName, row, col, errorSrcTypeIndex);
            eiaIncompliances.add(incomp);
          }
        }
      }
    }

    if (eiaIncompliances.size() > 0) {
      eiaTemplate.setEdfValid(false);
    }

    return eiaIncompliances;
  }