package com.revolsys.collection.range;
import com.revolsys.util.number.Numbers;
public class LongPaddedRange extends AbstractRange<String> {
private byte digitCount;
private long from;
private long to;
public LongPaddedRange(final long value) {
this(value, value);
}
public LongPaddedRange(final long from, final long to) {
if (from < to) {
this.from = from;
this.to = to;
} else {
this.from = to;
this.to = from;
}
this.digitCount = Numbers.digitCount(from);
final byte toDigitCount = Numbers.digitCount(to);
if (toDigitCount > this.digitCount) {
this.digitCount = toDigitCount;
}
}
public LongPaddedRange(final long from, final long to, final byte digitCount) {
if (from < to) {
this.from = from;
this.to = to;
} else {
this.from = to;
this.to = from;
}
this.digitCount = digitCount;
final byte fromDigitCount = Numbers.digitCount(from);
if (fromDigitCount > this.digitCount) {
this.digitCount = fromDigitCount;
}
final byte toDigitCount = Numbers.digitCount(to);
if (toDigitCount > this.digitCount) {
this.digitCount = toDigitCount;
}
}
@Override
public AbstractRange<?> expand(final Object value) {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
return super.expand(longValue);
}
}
@Override
public String getFrom() {
return toString(this.from);
}
@Override
public String getTo() {
return toString(this.to);
}
@Override
protected LongPaddedRange newRange(final Object from, final Object to) {
return new LongPaddedRange((Long)from, (Long)to);
}
@Override
public String next(final Object value) {
if (value == null) {
return null;
} else {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
final long number = longValue.longValue();
if (number == Long.MAX_VALUE) {
return null;
} else {
return toString(number + 1);
}
}
}
}
@Override
public String previous(final Object value) {
if (value == null) {
return null;
} else {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
final long number = longValue.longValue();
if (number == Long.MIN_VALUE) {
return null;
} else {
return toString(number - 1);
}
}
}
}
@Override
public long size() {
return this.to - this.from + 1;
}
private String toString(final long number) {
return Numbers.toStringPadded(number, this.digitCount);
}
}