public PageResponse<StatePageRow> loadRuleListForState(StatePageRequest request)
      throws SerializationException {
    if (request == null) {
      throw new IllegalArgumentException("request cannot be null");
    }
    if (request.getPageSize() != null && request.getPageSize() < 0) {
      throw new IllegalArgumentException("pageSize cannot be less than zero.");
    }

    // Do query
    long start = System.currentTimeMillis();

    // TODO: May need to use a filter for both package and categories
    // NOTE: Filtering is handled in repository.findAssetsByState()
    int numRowsToReturn = (request.getPageSize() == null ? -1 : request.getPageSize());
    AssetItemPageResult result =
        rulesRepository.findAssetsByState(
            request.getStateName(), false, request.getStartRowIndex(), numRowsToReturn);
    log.debug("Search time: " + (System.currentTimeMillis() - start));

    // Populate response
    boolean bHasMoreRows = result.hasNext;

    List<StatePageRow> rowList =
        new StatePageRowBuilder()
            .withPageRequest(request)
            .withContent(result.assets.iterator())
            .build();

    PageResponse<StatePageRow> response =
        new PageResponseBuilder<StatePageRow>()
            .withStartRowIndex(request.getStartRowIndex())
            .withPageRowList(rowList)
            .withLastPage(!bHasMoreRows)
            .buildWithTotalRowCount(-1);

    long methodDuration = System.currentTimeMillis() - start;
    log.debug(
        "Searched for Assest with State ("
            + request.getStateName()
            + ") in "
            + methodDuration
            + " ms.");
    return response;
  }
  /** @deprecated in favour of {@link #loadRuleListForState(StatePageRequest)} */
  public TableDataResult loadRuleListForState(
      String stateName, int skip, int numRows, String tableConfig) throws SerializationException {

    AssetItemPageResult result = rulesRepository.findAssetsByState(stateName, false, skip, numRows);
    return new TableDisplayHandler(tableConfig).loadRuleListTable(result);
  }