code: public List<CmsListItem> filter(List<CmsListItem> items, String filter) {
  
          if (CmsStringUtil.isEmptyOrWhitespaceOnly(filter)) {
              return items;
          }
          String filterCriteria = filter;
          if (m_caseInSensitive) {
              filterCriteria = filter.toLowerCase();
          }
  
          List<CmsListItem> res = new ArrayList<CmsListItem>();
          Iterator<CmsListItem> itItems = items.iterator();
          while (itItems.hasNext()) {
              CmsListItem item = itItems.next();
              if (res.contains(item)) {
                  continue;
              }
              Iterator<CmsListColumnDefinition> itCols = m_columns.iterator();
              while (itCols.hasNext()) {
                  CmsListColumnDefinition col = itCols.next();
                  if (item.get(col.getId()) == null) {
                      continue;
                  }
                  String columnValue = item.get(col.getId()).toString();
                  if (m_caseInSensitive) {
                      columnValue = columnValue.toLowerCase();
                  }
                  if (columnValue.indexOf(filterCriteria) > -1) {
                      res.add(item);
                      break;
                  }
              }
          }
          return res;
      }
docs: Returns a sublist of the given items, that match the given filter string.<p>
  
  @param items the items to filter
  @param filter the string to filter
  
  @return the filtered sublist