public Filter build() {
      Filter filter;
      switch (FilterType.valueOf(type)) {
        case ColumnCountGetFilter:
          filter = new ColumnCountGetFilter(limit);
          break;
        case ColumnPaginationFilter:
          filter = new ColumnPaginationFilter(limit, offset);
          break;
        case ColumnPrefixFilter:
          filter = new ColumnPrefixFilter(Base64.getDecoder().decode(value));
          break;
        case ColumnRangeFilter:
          filter = new ColumnRangeFilter(Base64.getDecoder().decode(minColumn), minColumnInclusive,
            Base64.getDecoder().decode(maxColumn), maxColumnInclusive);
          break;
        case DependentColumnFilter:
          filter = new DependentColumnFilter(Base64.getDecoder().decode(family),
            qualifier != null ? Base64.getDecoder().decode(qualifier) : null, dropDependentColumn,
            CompareOperator.valueOf(op), comparator.build());
          break;
        case FamilyFilter:
          filter = new FamilyFilter(CompareOperator.valueOf(op), comparator.build());
          break;
        case FilterList: {
          List<Filter> list = new ArrayList<>(filters.size());
          for (FilterModel model : filters) {
            list.add(model.build());
          }
          filter = new FilterList(FilterList.Operator.valueOf(op), list);
        }
          break;
        case FirstKeyOnlyFilter:
          filter = new FirstKeyOnlyFilter();
          break;
        case InclusiveStopFilter:
          filter = new InclusiveStopFilter(Base64.getDecoder().decode(value));
          break;
        case KeyOnlyFilter:
          filter = new KeyOnlyFilter();
          break;
        case MultipleColumnPrefixFilter: {
          byte[][] values = new byte[prefixes.size()][];
          for (int i = 0; i < prefixes.size(); i++) {
            values[i] = Base64.getDecoder().decode(prefixes.get(i));
          }
          filter = new MultipleColumnPrefixFilter(values);
        }
          break;
        case MultiRowRangeFilter: {
          ArrayList<MultiRowRangeFilter.RowRange> rowRanges = new ArrayList<>(ranges.size());
          for (RowRangeModel rangeModel : ranges) {
            rowRanges.add(rangeModel.build());
          }
          filter = new MultiRowRangeFilter(rowRanges);
        }
          break;
        case PageFilter:
          filter = new PageFilter(Long.parseLong(value));
          break;
        case PrefixFilter:
          filter = new PrefixFilter(Base64.getDecoder().decode(value));
          break;
        case QualifierFilter:
          filter = new QualifierFilter(CompareOperator.valueOf(op), comparator.build());
          break;
        case RandomRowFilter:
          filter = new RandomRowFilter(chance);
          break;
        case RowFilter:
          filter = new RowFilter(CompareOperator.valueOf(op), comparator.build());
          break;
        case SingleColumnValueFilter:
          filter = new SingleColumnValueFilter(Base64.getDecoder().decode(family),
            qualifier != null ? Base64.getDecoder().decode(qualifier) : null,
            CompareOperator.valueOf(op), comparator.build());
          if (ifMissing != null) {
            ((SingleColumnValueFilter) filter).setFilterIfMissing(ifMissing);
          }
          if (latestVersion != null) {
            ((SingleColumnValueFilter) filter).setLatestVersionOnly(latestVersion);
          }
          break;
        case SingleColumnValueExcludeFilter:
          filter = new SingleColumnValueExcludeFilter(Base64.getDecoder().decode(family),
            qualifier != null ? Base64.getDecoder().decode(qualifier) : null,
            CompareOperator.valueOf(op), comparator.build());
          if (ifMissing != null) {
            ((SingleColumnValueExcludeFilter) filter).setFilterIfMissing(ifMissing);
          }
          if (latestVersion != null) {
            ((SingleColumnValueExcludeFilter) filter).setLatestVersionOnly(latestVersion);
          }
          break;
        case SkipFilter:
          filter = new SkipFilter(filters.get(0).build());
          break;
        case TimestampsFilter:
          filter = new TimestampsFilter(timestamps);
          break;
        case ValueFilter:
          filter = new ValueFilter(CompareOperator.valueOf(op), comparator.build());
          break;
        case WhileMatchFilter:
          filter = new WhileMatchFilter(filters.get(0).build());
          break;
        case FuzzyRowFilter: {
          ArrayList<Pair<byte[], byte[]>> fuzzyKeyArgs = new ArrayList<>(fuzzyKeys.size());
          for (FuzzyKeyModel keyModel : fuzzyKeys) {
            fuzzyKeyArgs.add(keyModel.build());
          }
          filter = new FuzzyRowFilter(fuzzyKeyArgs);
        }
          break;
        default:
          throw new RuntimeException("unhandled filter type: " + type);
      }
      return filter;
    }
Returns if stop row is inclusive.
hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/ScannerModel.java