private static <T> List<Range> boundriesToRanges(Range orig, SortedSet<T> boundrySet) {
List<Range> result = new ArrayList<>();
List<T> boundries = new ArrayList<>(boundrySet);
String property = orig.getPropertyName();
FilterPredicate lower =
new FilterPredicate(property, orig.getLowerBound().getOperator(), boundries.get(0));
for (int i = 1; i < boundries.size() - 1; i++) {
result.add(new Range(lower, new FilterPredicate(property, LESS_THAN, boundries.get(i))));
lower = new FilterPredicate(property, GREATER_THAN_OR_EQUAL, boundries.get(i));
}
result.add(new Range(lower, new FilterPredicate(property, orig.getUpperBound().getOperator(),
boundries.get(boundries.size() - 1))));
return result;
}