public static CustomChoice create(final Object choice, String repr) {
    if (choice instanceof Pattern) {
      return new CustomChoice(repr) {

        private static final long serialVersionUID = -3239105477862513930L;

        @Override
        public RowFilter getFilter(final IFilterEditor ed) {
          final int index = ed.getModelIndex();
          final Pattern pattern = (Pattern)choice;
          return new RowFilter() {
            @Override
            public boolean include(Entry entry) {
              Object o = entry.getValue(index);
              if (o == null) {
                return false;
              }
              Format fmt = ed.getFormat();
              String s = (fmt == null) ? o.toString() :
                         fmt.format(o);
              return pattern.matcher(s).matches();
            }
          };
        }
      };
    }
    return new CustomChoice(repr) {
      private static final long serialVersionUID = -3573642873044716998L;

      @Override
      public RowFilter getFilter(final IFilterEditor editor) {
        final int index = editor.getModelIndex();
        final String string = (choice instanceof String)
                              ? (String)choice : null;
        return new RowFilter() {
          @Override
          public boolean include(Entry entry) {
            Object o = entry.getValue(index);
            if ((string != null) && (o instanceof String)
                && editor.isIgnoreCase()) {
              return string.equalsIgnoreCase((String)o);
            }

            return choice.equals(o);
          }
        };
      }
    };
  }
public static CustomChoice create(final Object choice, String repr)