docs: public final void retrievePage(final Map<String, Object> pAddParam,
      final IRequestData pRequestData, final Map<String, Class<?>> pEntityMap,
        final boolean pShowDbgMsg,
          final IDelegateEvaluate<IRequestData,
            String> pFilterFiMaker) throws Exception {
      String nmEnt;
      if (pAddParam.get("nameOwnerEntity") != null) {
        // owned entity put it to refresh owner list
        nmEnt = (String) pAddParam.get("nameOwnerEntity");
        if (pShowDbgMsg) {
          this.logger.debug(pAddParam, SrvEntitiesPage.class,
            "It's used nameOwnerEntity: " + nmEnt);
        }
      } else {
        nmEnt = pRequestData.getParameter("nmEnt");
        if (pShowDbgMsg) {
          this.logger.debug(pAddParam, SrvEntitiesPage.class,
            "It's used nmEnt: " + nmEnt);
        }
      }
      Class<?> entityClass = pEntityMap.get(nmEnt);
      Set<String> filterAppearance = null;
      if (pRequestData.getParameter("flyNeedFltAppear") != null) {
        filterAppearance = new HashSet<String>();
        pAddParam.put("filterAppearance", filterAppearance);
        if (pShowDbgMsg) {
          this.logger.debug(pAddParam, SrvEntitiesPage.class,
            "It's used filterAppearance: " + filterAppearance);
        }
      }
      StringBuffer sbWhere = revealPageFilterData(pAddParam, pRequestData,
        entityClass, pShowDbgMsg);
      //cause settled either from request or from settings
      Map<String, String> orderMap = new HashMap<String, String>();
      String queryOrderBy = "";
      String fltOrdPrefix;
      String nmRnd = pRequestData.getParameter("nmRnd");
      if (nmRnd.contains("pickerDub")) {
        fltOrdPrefix = "fltordPD";
      } else if (nmRnd.contains("picker")) {
        fltOrdPrefix = "fltordP";
      } else {
        fltOrdPrefix = "fltordM";
      }
      if (pShowDbgMsg) {
        this.logger.debug(pAddParam, SrvEntitiesPage.class,
          "It's used fltOrdPrefix: " + fltOrdPrefix);
      }
      String orderBy = pRequestData.getParameter(fltOrdPrefix + "orderBy");
      if (pShowDbgMsg) {
        this.logger.debug(pAddParam, SrvEntitiesPage.class,
          "It's used orderBy: " + orderBy);
      }
      if (orderBy != null && !orderBy.equals("disabled")) {
        orderMap.put(fltOrdPrefix + "orderBy", orderBy);
        String desc = "";
        if (pRequestData.getParameter(fltOrdPrefix + "orderByDesc") != null) {
          // HTML form send nothing for unchecked checkbox
          desc = " desc";
          orderMap.put(fltOrdPrefix + "orderByDesc", "on");
        }
        queryOrderBy = " order by " + nmEnt.toUpperCase() + "."
          + orderBy.toUpperCase() + desc;
      } else {
        orderMap.put(fltOrdPrefix + "orderBy", this.mngUvdSettings
          .lazClsSts(entityClass).get("orderByDefault"));
        String orderByDesc = this.mngUvdSettings
          .lazClsSts(entityClass).get("orderByDescDefault");
        String orderByDescStr = "";
        if (orderByDesc.equals("on")) {
          orderMap.put(fltOrdPrefix + "orderByDesc", orderByDesc);
          orderByDescStr = " desc";
        }
        queryOrderBy = " order by " + nmEnt.toUpperCase() + "."
          + orderMap.get(fltOrdPrefix + "orderBy").toUpperCase() + orderByDescStr;
      }
      if (pShowDbgMsg) {
        this.logger.debug(pAddParam, SrvEntitiesPage.class,
          "It's used queryOrderBy: " + queryOrderBy);
      }
      Integer rowCount;
      String strWhere = null;
      String strFiWhere = null;
      if (pFilterFiMaker != null) {
        strFiWhere = pFilterFiMaker.evaluate(pAddParam, pRequestData);
        if (pShowDbgMsg) {
          this.logger.debug(pAddParam, SrvEntitiesPage.class,
            "It's used pFilterFiMaker/where: " + pFilterFiMaker.getClass()
              .getSimpleName() + "/" + strFiWhere);
        }
      }
      if (strFiWhere != null) {
        if (sbWhere.length() > 0) {
          strWhere = strFiWhere + " and " + sbWhere.toString();
        } else {
          strWhere = strFiWhere;
        }
      } else if (sbWhere.length() > 0) {
        strWhere = sbWhere.toString();
      }
      if (strWhere != null) {
        if (strFiWhere != null) { //it's maybe second level conditions:
          String qu = this.srvOrm.evalSqlSelect(pAddParam, entityClass);
          qu = qu.substring(qu.indexOf("from"));
          qu = "select count(*) as TOTALROWS " + qu + " where " + strWhere;
          rowCount = this.srvOrm.evalRowCountByQuery(pAddParam, entityClass, qu);
        } else {
          rowCount = this.srvOrm.evalRowCountWhere(pAddParam, entityClass,
            strWhere);
        }
      } else {
        rowCount = this.srvOrm.evalRowCount(pAddParam, entityClass);
      }
      Integer page = Integer.valueOf(pRequestData.getParameter("page"));
      Integer itemsPerPage = Integer.valueOf(mngUvdSettings.getAppSettings()
        .get("itemsPerPage"));
      int totalPages = srvPage.evalPageCount(rowCount, itemsPerPage);
      if (page > totalPages) {
        page = totalPages;
      }
      int firstResult = (page - 1) * itemsPerPage; //0-20,20-40
      List entities;
      if (strWhere != null || queryOrderBy.length() > 0) {
        if (strWhere != null) {
          entities = this.srvOrm.retrievePageWithConditions(pAddParam,
            entityClass, "where " + strWhere + queryOrderBy,
              firstResult, itemsPerPage);
        } else {
          entities = this.srvOrm.retrievePageWithConditions(pAddParam,
            entityClass, queryOrderBy, firstResult, itemsPerPage);
        }
      } else {
        entities = this
          .srvOrm.retrievePage(pAddParam, entityClass, firstResult, itemsPerPage);
      }
      Integer paginationTail = Integer.valueOf(mngUvdSettings.getAppSettings()
        .get("paginationTail"));
      List<Page> pages = srvPage.evalPages(page, totalPages, paginationTail);
      pRequestData.setAttribute("totalItems", rowCount);
      pRequestData.setAttribute("pages", pages);
      pRequestData.setAttribute("orderMap", orderMap);
      pRequestData.setAttribute("entities", entities);
      pRequestData.setAttribute("classEntity", entityClass);
      pRequestData.setAttribute("mngUvds", this.mngUvdSettings);
      pRequestData.setAttribute("srvOrm", this.srvOrm);
      pRequestData.setAttribute("hldCnvFtfsNames",
        this.fieldConverterNamesHolder);
      pRequestData.setAttribute("fctCnvFtfs", this.convertersFieldsFatory);
      if (filterAppearance != null) {
        pRequestData.setAttribute("filterAppearance", filterAppearance);
      }
    }