/**
   * Finds the right index at which to insert a new data approval level. Returns -1 if the new data
   * approval level is a duplicate.
   *
   * @param dataApprovalLevels list of all levels.
   * @param newLevel new level to find the insertion point for.
   * @return index where the new approval level should be inserted, or -1 if the new level is a
   *     duplicate.
   */
  private int getInsertIndex(
      List<DataApprovalLevel> dataApprovalLevels, DataApprovalLevel newLevel) {
    int i = dataApprovalLevels.size() - 1;

    while (i >= 0) {
      DataApprovalLevel test = dataApprovalLevels.get(i);

      int orgLevelDifference = newLevel.getOrgUnitLevel() - test.getOrgUnitLevel();

      if (orgLevelDifference > 0) {
        break;
      }

      if (orgLevelDifference == 0) {
        if (newLevel.levelEquals(test)) {
          return -1;
        }

        if (test.getCategoryOptionGroupSet() == null) {
          break;
        }
      }

      i--;
    }

    return i + 1;
  }
  @Override
  public boolean dataApprovalLevelExists(DataApprovalLevel level) {
    List<DataApprovalLevel> dataApprovalLevels = getAllDataApprovalLevels();

    for (DataApprovalLevel dataApprovalLevel : dataApprovalLevels) {
      if (level.levelEquals(dataApprovalLevel)) {
        return true;
      }
    }

    return false;
  }