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

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

Introduction

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

Prototype

public BoundType lowerBoundType() 

Source Link

Document

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

Usage

From source file:org.immutables.mongo.repository.internal.Support.java

@SuppressWarnings("unchecked")
public static <T extends Comparable<T>> Range<Comparable<Object>> writable(TypeAdapter<T> adapter,
        Range<T> range) {
    if (range.hasLowerBound() && range.hasUpperBound()) {
        return Range.range((Comparable<Object>) writable(adapter, range.lowerEndpoint()),
                range.lowerBoundType(), (Comparable<Object>) writable(adapter, range.upperEndpoint()),
                range.upperBoundType());
    } else if (range.hasLowerBound()) {
        return Range.downTo((Comparable<Object>) writable(adapter, range.lowerEndpoint()),
                range.lowerBoundType());
    } else if (range.hasUpperBound()) {
        return Range.upTo((Comparable<Object>) writable(adapter, range.upperEndpoint()),
                range.upperBoundType());
    }/* w ww.  j a  v a2s .co  m*/
    throw new AssertionError();
}

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

/**
 * remove from self the elements that exist in other
 * @return// w  ww.j a  v  a2 s  .  co  m
 */
public static <C extends Comparable<?>> List<Range<C>> remove(Range<C> self, Range<C> other) {

    // mimic the following logic in guava 18:
    //        RangeSet<C> rangeSet = TreeRangeSet.create();
    //        rangeSet.add(self);
    //        rangeSet.remove(other);
    //        return Lists.newArrayList(rangeSet.asRanges());

    if (other == null || !self.isConnected(other)) {
        return Collections.singletonList(self);
    }

    Range<C> share = self.intersection(other);
    if (share.isEmpty()) {
        return Collections.singletonList(self);
    }

    List<Range<C>> ret = Lists.newArrayList();

    //see left part
    if (!self.hasLowerBound()) {
        if (share.hasLowerBound()) {
            if (share.lowerBoundType() == BoundType.CLOSED) {
                ret.add(Range.lessThan(share.lowerEndpoint()));
            } else {
                ret.add(Range.atMost(share.lowerEndpoint()));
            }
        }
    } else {
        if (self.lowerEndpoint() != share.lowerEndpoint()) {
            if (self.lowerBoundType() == BoundType.CLOSED) {
                if (share.lowerBoundType() == BoundType.CLOSED) {
                    ret.add(Range.closedOpen(self.lowerEndpoint(), share.lowerEndpoint()));
                } else {
                    ret.add(Range.closed(self.lowerEndpoint(), share.lowerEndpoint()));
                }
            } else {
                if (share.lowerBoundType() == BoundType.CLOSED) {
                    ret.add(Range.open(self.lowerEndpoint(), share.lowerEndpoint()));
                } else {
                    ret.add(Range.openClosed(self.lowerEndpoint(), share.lowerEndpoint()));
                }
            }
        } else {
            if (self.lowerBoundType() == BoundType.CLOSED && share.lowerBoundType() == BoundType.OPEN) {
                ret.add(Range.closed(self.lowerEndpoint(), share.lowerEndpoint()));
            }
        }
    }

    //see right part 
    if (!self.hasUpperBound()) {
        if (share.hasUpperBound()) {
            if (share.upperBoundType() == BoundType.CLOSED) {
                ret.add(Range.greaterThan(share.upperEndpoint()));
            } else {
                ret.add(Range.atLeast(share.upperEndpoint()));
            }
        }
    } else {
        if (self.upperEndpoint() != share.upperEndpoint()) {
            if (self.upperBoundType() == BoundType.CLOSED) {
                if (share.upperBoundType() == BoundType.CLOSED) {
                    ret.add(Range.openClosed(share.upperEndpoint(), self.upperEndpoint()));
                } else {
                    ret.add(Range.closed(share.upperEndpoint(), self.upperEndpoint()));
                }
            } else {
                if (share.upperBoundType() == BoundType.CLOSED) {
                    ret.add(Range.open(share.upperEndpoint(), self.upperEndpoint()));
                } else {
                    ret.add(Range.closedOpen(share.upperEndpoint(), self.upperEndpoint()));
                }
            }
        } else {
            if (self.upperBoundType() == BoundType.CLOSED && share.upperBoundType() == BoundType.OPEN) {
                ret.add(Range.closed(self.upperEndpoint(), share.upperEndpoint()));
            }
        }
    }

    return ret;

}

From source file:org.apache.druid.sql.calcite.filtration.MoveTimeFiltersToIntervals.java

private static Range<Long> toLongRange(final Range<BoundValue> range) {
    if (!range.hasUpperBound() && !range.hasLowerBound()) {
        return Range.all();
    } else if (range.hasUpperBound() && !range.hasLowerBound()) {
        return Range.upTo(Long.parseLong(range.upperEndpoint().getValue()), range.upperBoundType());
    } else if (!range.hasUpperBound() && range.hasLowerBound()) {
        return Range.downTo(Long.parseLong(range.lowerEndpoint().getValue()), range.lowerBoundType());
    } else {/*from  w  w  w.  j av a2s  . c om*/
        return Range.range(Long.parseLong(range.lowerEndpoint().getValue()), range.lowerBoundType(),
                Long.parseLong(range.upperEndpoint().getValue()), range.upperBoundType());
    }
}

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
 *///from www .j  a va 2  s.c o m
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: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;
            }/*w ww .ja v  a 2 s.  c  om*/
            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.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 va2 s  .c om*/
 * @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: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.//from w  w  w.  j  a  va 2 s .  co  m
 */
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.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: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;
            }//w w  w.j ava2s.com
            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: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/*from ww w . 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;
}