Example usage for com.google.common.collect Range upperBoundType

List of usage examples for com.google.common.collect Range upperBoundType

Introduction

In this page you can find the example usage for com.google.common.collect Range upperBoundType.

Prototype

public BoundType upperBoundType() 

Source Link

Document

Returns the type of this range's upper bound: BoundType#CLOSED if the range includes its upper endpoint, BoundType#OPEN if it does not.

Usage

From source file:org.apache.hadoop.hive.ql.optimizer.calcite.druid.DruidIntervalUtils.java

protected static boolean mergeable(Range range1, Range range2) {
    Comparable x1 = range1.upperEndpoint();
    Comparable x2 = range2.lowerEndpoint();
    int compare = x1.compareTo(x2);
    return compare > 0 || (compare == 0 && range1.upperBoundType() == BoundType.CLOSED
            && range2.lowerBoundType() == BoundType.CLOSED);
}

From source file:com.tinspx.util.base.NumberUtils.java

@SuppressWarnings("unchecked")
public static Range<Long> toLongRange(@NonNull Range<? extends Number> range) {
    if (range.hasLowerBound()) {
        if (range.hasUpperBound()) {
            if (range.lowerEndpoint() instanceof Long && range.upperEndpoint() instanceof Long) {
                return (Range<Long>) range;
            }/*from  w  w  w  .  j a  v a  2  s  .  co m*/
            return Range.range(range.lowerEndpoint().longValue(), range.lowerBoundType(),
                    range.upperEndpoint().longValue(), range.upperBoundType());
        } else {
            if (range.lowerEndpoint() instanceof Long) {
                return (Range<Long>) range;
            }
            return Range.downTo(range.lowerEndpoint().longValue(), range.lowerBoundType());
        }
    } else if (range.hasUpperBound()) {
        if (range.upperEndpoint() instanceof Long) {
            return (Range<Long>) range;
        }
        return Range.upTo(range.upperEndpoint().longValue(), range.upperBoundType());
    } else {
        return Range.all();
    }
}

From source file:org.nmdp.ngs.range.rtree.RangeGeometries.java

/**
 * Create and return a new rectangle geometry from the specified range.
 *
 * @param range range, must not be null, must not be empty, and must have lower and upper bounds
 * @return a new rectangle geometry from the specified range
 *//*  w w w .  ja  v a 2 s .com*/
public static <N extends Number & Comparable<? super N>> Rectangle range(final Range<N> range) {
    checkNotNull(range);
    if (range.isEmpty()) {
        throw new IllegalArgumentException("range must not be empty");
    }
    if (!range.hasLowerBound() || !range.hasUpperBound()) {
        throw new IllegalArgumentException("range must have lower and upper bounds");
    }
    Number lowerEndpoint = range.lowerEndpoint();
    BoundType lowerBoundType = range.lowerBoundType();
    Number upperEndpoint = range.upperEndpoint();
    BoundType upperBoundType = range.upperBoundType();

    /*
            
      Since we are representing genomic coordinate systems, the expectation is
      that endpoints are instance of Integer, Long, or BigInteger; thus for open
      lower and upper bounds we can safely add or substract 1.0 respectively.
            
      Then by convention a rectangle with y1 0.0 and height of 1.0 is used.
            
      closed(10, 20) --> (10.0, 0.0, 20.0, 1.0)
      closedOpen(10, 20) --> (10.0, 0.0, 19.0, 1.0)
      openClosed(10, 20) --> (11.0, 0.0, 20.0, 1.0)
      open(10, 20) --> (11.0, 0.0, 19.0, 1.0);
            
      closed(10, 11) --> (10.0, 0.0, 11.0, 1.0)
      closedOpen(10, 11) --> (10.0, 0.0, 10.0, 1.0)
      openClosed(10, 11) --> (11.0, 0.0, 11.0, 1.0)
      open(10, 11) --> empty, throw exception
            
      closed(10, 10) --> (10.0, 0.0, 10.0, 1.0)
      closedOpen(10, 10) --> empty, throw exception
      openClosed(10, 10) --> empty, throw exception
      open(10, 10) --> empty, throw exception
            
    */
    double x1 = lowerBoundType == BoundType.OPEN ? lowerEndpoint.doubleValue() + 1.0d
            : lowerEndpoint.doubleValue();
    double y1 = 0.0d;
    double x2 = upperBoundType == BoundType.OPEN ? upperEndpoint.doubleValue() - 1.0d
            : upperEndpoint.doubleValue();
    double y2 = 1.0d;
    return Geometries.rectangle(x1, y1, x2, y2);
}

From source file:org.dishevelled.bio.range.rtree.RangeGeometries.java

/**
 * Create and return a new rectangle geometry from the specified range.
 *
 * @param <N> value type/*from   w ww . j a  v  a 2s. c o  m*/
 * @param range range, must not be null, must not be empty, and must have lower and upper bounds
 * @return a new rectangle geometry from the specified range
 */
public static <N extends Number & Comparable<? super N>> Rectangle range(final Range<N> range) {
    checkNotNull(range);
    if (range.isEmpty()) {
        throw new IllegalArgumentException("range must not be empty");
    }
    if (!range.hasLowerBound() || !range.hasUpperBound()) {
        throw new IllegalArgumentException("range must have lower and upper bounds");
    }
    Number lowerEndpoint = range.lowerEndpoint();
    BoundType lowerBoundType = range.lowerBoundType();
    Number upperEndpoint = range.upperEndpoint();
    BoundType upperBoundType = range.upperBoundType();

    /*
            
      Since we are representing genomic coordinate systems, the expectation is
      that endpoints are instance of Integer, Long, or BigInteger; thus for open
      lower and upper bounds we can safely add or subtract 1.0 respectively.
            
      Then by convention a rectangle with y1 0.0 and height of 1.0 is used.
            
      closed(10, 20) --> (10.0, 0.0, 20.0, 1.0)
      closedOpen(10, 20) --> (10.0, 0.0, 19.0, 1.0)
      openClosed(10, 20) --> (11.0, 0.0, 20.0, 1.0)
      open(10, 20) --> (11.0, 0.0, 19.0, 1.0);
            
      closed(10, 11) --> (10.0, 0.0, 11.0, 1.0)
      closedOpen(10, 11) --> (10.0, 0.0, 10.0, 1.0)
      openClosed(10, 11) --> (11.0, 0.0, 11.0, 1.0)
      open(10, 11) --> empty, throw exception
            
      closed(10, 10) --> (10.0, 0.0, 10.0, 1.0)
      closedOpen(10, 10) --> empty, throw exception
      openClosed(10, 10) --> empty, throw exception
      open(10, 10) --> empty, throw exception
            
    */
    double x1 = lowerBoundType == BoundType.OPEN ? lowerEndpoint.doubleValue() + 1.0d
            : lowerEndpoint.doubleValue();
    double y1 = 0.0d;
    double x2 = upperBoundType == BoundType.OPEN ? upperEndpoint.doubleValue() - 1.0d
            : upperEndpoint.doubleValue();
    double y2 = 1.0d;
    return Geometries.rectangle(x1, y1, x2, y2);
}

From source file:org.apache.kylin.common.util.RangeUtil.java

public static String formatTsRange(Range<Long> tsRange) {
    if (tsRange == null)
        return null;

    StringBuilder sb = new StringBuilder();
    if (tsRange.hasLowerBound()) {
        if (tsRange.lowerBoundType() == BoundType.CLOSED) {
            sb.append("[");
        } else {//from  ww w  .  ja  v a2s . co  m
            sb.append("(");
        }
        sb.append(DateFormat.formatToTimeStr(tsRange.lowerEndpoint()));
    } else {
        sb.append("(-");
    }

    sb.append("~");

    if (tsRange.hasUpperBound()) {
        sb.append(DateFormat.formatToTimeStr(tsRange.upperEndpoint()));
        if (tsRange.upperBoundType() == BoundType.CLOSED) {
            sb.append("]");
        } else {
            sb.append(")");
        }
    } else {
        sb.append("+)");
    }
    return sb.toString();
}

From source file:com.tinspx.util.io.callbacks.FileChannelCallback.java

/**
 * Normalizes lower bound to a closed bound type (if exists) and the
 * upper bound to an open bound type (if exists). Missing bounds remain
 * missing. Lower bound must be non-negative and upper bound must be
 * positive. The range cannot be empty./*  ww w . j av  a 2 s.  com*/
 */
static Range<Long> checkAndNormalize(Range<Long> range) {
    checkArgument(!range.isEmpty(), "range %s is empty", range);
    boolean make = false;
    long lower = -1;
    long upper = -1;

    if (range.hasLowerBound()) {
        lower = range.lowerEndpoint();
        if (range.lowerBoundType() == BoundType.OPEN) {
            make = true;
            lower++;
        }
        checkArgument(lower >= 0, "closed lower bound (%s) may not be negative", lower);
    }
    if (range.hasUpperBound()) {
        upper = range.upperEndpoint();
        if (range.upperBoundType() == BoundType.CLOSED) {
            make = true;
            upper++;
        }
        checkArgument(upper > 0, "open upper bound (%s) must be positive", upper);
    }
    if (make) {
        if (lower >= 0) {
            if (upper > 0) {
                range = Range.closedOpen(lower, upper);
            } else {
                range = Range.atLeast(lower);
            }
        } else {
            assert upper > 0 : upper;
            range = Range.lessThan(upper);
        }
        checkArgument(!range.isEmpty(), "normalized range %s is empty", range);
    }
    return range;
}

From source file:org.apache.calcite.adapter.druid.DruidDateTimeUtils.java

protected static List<LocalInterval> toInterval(List<Range<Calendar>> ranges) {
    List<LocalInterval> intervals = Lists.transform(ranges, new Function<Range<Calendar>, LocalInterval>() {
        public LocalInterval apply(Range<Calendar> range) {
            if (!range.hasLowerBound() && !range.hasUpperBound()) {
                return DruidTable.DEFAULT_INTERVAL;
            }//from  w w  w . j  a v  a  2s  .  c  o  m
            long start = range.hasLowerBound() ? range.lowerEndpoint().getTime().getTime()
                    : DruidTable.DEFAULT_INTERVAL.getStartMillis();
            long end = range.hasUpperBound() ? range.upperEndpoint().getTime().getTime()
                    : DruidTable.DEFAULT_INTERVAL.getEndMillis();
            if (range.hasLowerBound() && range.lowerBoundType() == BoundType.OPEN) {
                start++;
            }
            if (range.hasUpperBound() && range.upperBoundType() == BoundType.CLOSED) {
                end++;
            }
            return LocalInterval.create(start, end);
        }
    });
    if (LOGGER.isInfoEnabled()) {
        LOGGER.info("Converted time ranges " + ranges + " to interval " + intervals);
    }
    return intervals;
}

From source file:com.stackframe.collect.RangeUtilities.java

/**
 * Build an expression suitable for passing to JDBC as part of an SQL query from a date range.
 *
 * @param column the name of the column/*w w  w .j  a  v a2s  .  c om*/
 * @param dateRange the Range
 * @return a String containing the expression
 */
public static String toSQL(String column, Range<Date> dateRange) {
    StringBuilder buf = new StringBuilder();
    if (dateRange.hasLowerBound()) {
        BoundType lowerBound = dateRange.lowerBoundType();
        String operator;
        switch (lowerBound) {
        case CLOSED:
            operator = ">=";
            break;
        case OPEN:
            operator = ">";
            break;
        default:
            throw new AssertionError("unexpected bound type " + lowerBound);
        }

        Date lowerEndpoint = dateRange.lowerEndpoint();
        java.sql.Date lowerDate = convert(lowerEndpoint);
        buf.append(String.format("%s %s '%s'", column, operator, lowerDate.toString()));
        if (dateRange.hasUpperBound()) {
            buf.append(" AND ");
        }
    }

    if (dateRange.hasUpperBound()) {
        BoundType upperBound = dateRange.upperBoundType();
        String operator;
        switch (upperBound) {
        case CLOSED:
            operator = "<=";
            break;
        case OPEN:
            operator = "<";
            break;
        default:
            throw new AssertionError("unexpected bound type " + upperBound);
        }

        Date upperEndpoint = dateRange.upperEndpoint();
        java.sql.Date upperDate = convert(upperEndpoint);
        buf.append(String.format("%s %s '%s'", column, operator, upperDate.toString()));
    }

    return buf.toString();
}

From source file:org.apache.hadoop.hive.ql.optimizer.calcite.druid.DruidIntervalUtils.java

protected static List<Interval> toInterval(List<Range> ranges) {
    List<Interval> intervals = Lists.transform(ranges, new Function<Range, Interval>() {
        @Override/*w  ww  . j  a v  a2 s  .c o m*/
        public Interval apply(Range range) {
            if (!range.hasLowerBound() && !range.hasUpperBound()) {
                return DruidTable.DEFAULT_INTERVAL;
            }
            long start = range.hasLowerBound() ? toLong(range.lowerEndpoint())
                    : DruidTable.DEFAULT_INTERVAL.getStartMillis();
            long end = range.hasUpperBound() ? toLong(range.upperEndpoint())
                    : DruidTable.DEFAULT_INTERVAL.getEndMillis();
            if (range.hasLowerBound() && range.lowerBoundType() == BoundType.OPEN) {
                start++;
            }
            if (range.hasUpperBound() && range.upperBoundType() == BoundType.CLOSED) {
                end++;
            }
            return new Interval(start, end);
        }
    });
    LOG.info("Converted time ranges " + ranges + " to interval " + intervals);
    return intervals;
}

From source file:org.apache.kylin.metadata.realization.SQLDigestUtil.java

private static TupleFilter createFilterForRealtime(TupleFilter originFilter, TblColRef partitionColRef,
        Range<Long> tsRange) {
    DataType type = partitionColRef.getColumnDesc().getType();

    String startTimeStr, endTimeStr;
    CompareTupleFilter startFilter = null, endFilter = null;
    if (tsRange.hasLowerBound()) {
        startTimeStr = formatTimeStr(type, tsRange.lowerEndpoint());
        if (tsRange.lowerBoundType() == BoundType.CLOSED) {
            startFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.GTE);
        } else {/*w  w  w. java 2  s  .  c  o m*/
            startFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.GT);
        }
        ColumnTupleFilter columnTupleFilter = new ColumnTupleFilter(partitionColRef);
        ConstantTupleFilter constantTupleFilter = new ConstantTupleFilter(startTimeStr);
        startFilter.addChild(columnTupleFilter);
        startFilter.addChild(constantTupleFilter);
    }

    if (tsRange.hasUpperBound()) {
        endTimeStr = formatTimeStr(type, tsRange.upperEndpoint());
        if (tsRange.upperBoundType() == BoundType.CLOSED) {
            endFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.LTE);
        } else {
            endFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.LT);
        }
        ColumnTupleFilter columnTupleFilter = new ColumnTupleFilter(partitionColRef);
        ConstantTupleFilter constantTupleFilter = new ConstantTupleFilter(endTimeStr);
        endFilter.addChild(columnTupleFilter);
        endFilter.addChild(constantTupleFilter);
    }

    if (originFilter == null) {
        if (endFilter == null) {
            return startFilter;
        }
        if (startFilter == null) {
            return endFilter;
        }
    }

    LogicalTupleFilter logicalTupleFilter = new LogicalTupleFilter(TupleFilter.FilterOperatorEnum.AND);

    if (originFilter != null) {
        logicalTupleFilter.addChild(originFilter);
    }
    if (startFilter != null) {
        logicalTupleFilter.addChild(startFilter);
    }
    if (endFilter != null) {
        logicalTupleFilter.addChild(endFilter);
    }

    return logicalTupleFilter;
}