public static void filterTableColumn(
      TableColumn<ty_any_type, ty_any_type> column,
      ty_table_column PPLColumn,
      FilterCriteria filterCriteria) {

    TableView<ty_any_type> tableView = column.getTableView();
    FilteredList<ty_any_type> filteredList =
        (FilteredList<ty_any_type>)
            tableView.getProperties().get(GenericTableRowsService.filteredListpropertyId);

    if (filterCriteria == null) {
      // no filter
      filteredList.setPredicate(rowObject -> true);
    } else {
      Predicate<String> stringPredicate = getStringPredicate(filterCriteria);

      filteredList.setPredicate(
          rowObject -> {
            ty_any_type cellValue;
            if (rowObject == null) {
              cellValue = null;
            } else {
              cellValue = PPLColumn.getRow_to_cell_value_converter().convert(rowObject);
            }

            if (cellValue != null) {
              // return cellValue.to_string ().getJavaString ().toLowerCase ().contains (
              // filterValue.toLowerCase () );
              if (!filterCriteria.excludeElements) {
                return stringPredicate.test(cellValue.to_string().getJavaString());
              } else {
                return !stringPredicate.test(cellValue.to_string().getJavaString());
              }
            } else {
              return false;
            }
          });
    }
  }