/**
  * Get the level which is best for displaying the given range.
  *
  * @param levels list of levels to be checked
  * @param r the range to be displayed
  * @return
  */
 private Level getBestLevel(List<Level> levels, Range r) {
   for (int i = levels.size() - 1; i > 0; i--) {
     Level lev = levels.get(i);
     if (r.getLength() > lev.resolution * ContinuousFormatterHelper.NOTIONAL_SCREEN_SIZE / 2) {
       return lev;
     }
   }
   return levels.get(0);
 }
  /**
   * This function is equivalent to getSelectedFromList(URI uri, List<Record> data) but it uses
   * range to check whether anything has changed since the last request. If nothing has changed,
   * return the same list.
   */
  public List<Record> getSelectedFromList(String name, Range range, List<Record> data) {

    if (range.equals(rangeMap.get(name)) && currentMap.get(name) != null) {
      return currentMap.get(name);
    }

    rangeMap.put(name, range);
    List<Record> currentSelected = getSelectedFromList(name, data);
    currentMap.put(name, currentSelected);

    return currentSelected;
  }