docs: @RequestMapping(value = "/api/history/{profileIdentifier}", method = RequestMethod.GET)
      public
      @ResponseBody
      HashMap<String, Object> getHistory(Model mode, @PathVariable String profileIdentifier,
                                         @RequestParam(value = "clientUUID", defaultValue = Constants.PROFILE_CLIENT_DEFAULT_ID) String clientUUID,
                                         @RequestParam(value = "offset", defaultValue = "0") int offset,
                                         @RequestParam(value = "limit", defaultValue = "-1") int limit,
                                         @RequestParam(value = "source_uri[]", required = false) String[] sourceURIFilters,
                                         @RequestParam(value = "page", defaultValue = "1") int page,
                                         @RequestParam(value = "rows", defaultValue = "-1") int rows,
                                         @RequestParam(value = "hasMessage", defaultValue = "false") boolean hasMessage) throws Exception {
          Integer profileId = ControllerUtils.convertProfileIdentifier(profileIdentifier);
          HashMap<String, String[]> filters = new HashMap<String, String[]>();
          if (sourceURIFilters != null) {
              filters.put(Constants.HISTORY_FILTER_SOURCE_URI, sourceURIFilters);
          }
  
          // rows exists because jqgrid uses it.. but limit is more common
          // set limit to rows if it was set
          if (rows != -1) {
              limit = rows;
          }
  
          // offset id # of page(-1) * rows if not passed in
          if (offset == 0) {
              offset = (page - 1) * rows;
          }
  
          History[] histories = HistoryService.getInstance().getHistory(profileId, clientUUID, offset, limit, false, filters, hasMessage);
          int totalRows = HistoryService.getInstance().getHistoryCount(profileId, clientUUID, filters);
          HashMap<String, Object> returnJSON = Utils.getJQGridJSON(histories, "history", offset, totalRows, limit);
  
          return returnJSON;
      }