@Override
  public Request<Long> getTotalRowCount() {
    PriseMedicamentRegimeRequest request = (PriseMedicamentRegimeRequest) getContext();

    if (isFiltered) {
      /* permanently filtered - hierarchical lists */
      if (filterCriteria != null) {

        if (searchCriterions != null) {
          /* permanent filter added to search criterion */
          if (nonAffected) {
            if (!searchInReverse)
              return request.countNonAffectedPriseMedicamentRegime(property, searchCriterions);
            else
              return request.countNonAffectedPriseMedicamentRegimeReverse(
                  property, searchCriterions);
          } else return request.countPriseMedicamentRegime(searchCriterions);
        } else {
          /* permanent filter only */
          if (nonAffected) {
            if (!searchInReverse)
              return request.countNonAffectedPriseMedicamentRegime(property, filterCriteria);
            else
              return request.countNonAffectedPriseMedicamentRegimeReverse(property, filterCriteria);
          } else return request.countPriseMedicamentRegime(filterCriteria);
        }

      } else return request.countNonAffectedPriseMedicamentRegime("id");
    } else {

      if (searchCriterions != null) {
        if (nonAffected) {
          if (!searchInReverse)
            return request.countNonAffectedPriseMedicamentRegime(property, searchCriterions);
          else
            return request.countNonAffectedPriseMedicamentRegimeReverse(property, searchCriterions);
        } else return request.countPriseMedicamentRegime(searchCriterions);
      } else {

        if (nonAffected) {
          if (!searchInReverse) return request.countNonAffectedPriseMedicamentRegime(property);
          else return request.countNonAffectedPriseMedicamentRegimeReverse(property);
        } else return request.countPriseMedicamentRegime();
      }
    }
  }