This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 76906992314ad743c8afe1a24f5f97904da5295b Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Nov 15 14:13:05 2019 +0700 [Refactoring] IdRange: reorder methods --- .../org/apache/james/imap/api/message/IdRange.java | 207 ++++++++++----------- 1 file changed, 102 insertions(+), 105 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java index 4dee168..b2b4c08 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java @@ -34,6 +34,78 @@ import com.google.common.collect.ImmutableList; * Represents a range of UID or MSN values. */ public final class IdRange implements Iterable<Long>, Comparable<IdRange> { + /** + * {@link Iterator} of a range of msn/uid + */ + private final class RangeIterator implements Iterator<Long> { + + private final long to; + private long current; + + public RangeIterator(long from, long to) { + this.to = to; + this.current = from; + } + + @Override + public boolean hasNext() { + return current <= to; + } + + @Override + public Long next() { + if (hasNext()) { + return current++; + } else { + throw new NoSuchElementException("Highest id of " + to + " was reached before"); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException("Read-Only"); + } + + } + + /** + * Utility method which will copy the given {@link List} and try to merge + * the {@link IdRange} in the copy before return it. + * + * @return mergedRanges + */ + public static List<IdRange> mergeRanges(List<IdRange> ranges) { + List<IdRange> copy = new ArrayList<>(ranges); + Collections.sort(copy); + + boolean lastUid = false; + + for (int i = 0; i < copy.size() - 1; i++) { + IdRange current = copy.get(i); + IdRange next = copy.get(i + 1); + if (next.getLowVal() == Long.MAX_VALUE && next.getHighVal() == Long.MAX_VALUE) { + if (lastUid) { + copy.remove(next); + i--; + } else { + lastUid = true; + } + } else { + // Make sure we handle the "*" and "*:*" correctly and don't + // remove ranges by error. See IMAP-289 + if ((current.getLowVal() != Long.MAX_VALUE && current.getHighVal() != Long.MAX_VALUE) && (current.getHighVal() >= next.getLowVal() - 1)) { + if (next.getHighVal() > current.getHighVal()) { + current.setHighVal(next.getHighVal()); + } + // remove the merged id range and decrease the count + copy.remove(next); + i--; + } + } + + } + return copy; + } public static String toString(IdRange[] ranges) { return Optional.ofNullable(ranges) @@ -78,36 +150,6 @@ public final class IdRange implements Iterable<Long>, Comparable<IdRange> { this.highVal = highVal; } - @Override - public int hashCode() { - final int PRIME = 31; - int result = 1; - result = PRIME * result + (int) (highVal ^ (highVal >>> 32)); - result = PRIME * result + (int) (lowVal ^ (lowVal >>> 32)); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final IdRange other = (IdRange) obj; - if (highVal != other.highVal) { - return false; - } - if (lowVal != other.lowVal) { - return false; - } - return true; - } - /** * Renders text suitable for logging. * @@ -126,47 +168,6 @@ public final class IdRange implements Iterable<Long>, Comparable<IdRange> { } /** - * Utility method which will copy the given {@link List} and try to merge - * the {@link IdRange} in the copy before return it. - * - * @return mergedRanges - */ - public static List<IdRange> mergeRanges(List<IdRange> ranges) { - List<IdRange> copy = new ArrayList<>(ranges); - Collections.sort(copy); - - boolean lastUid = false; - - for (int i = 0; i < copy.size() - 1; i++) { - IdRange current = copy.get(i); - IdRange next = copy.get(i + 1); - if (next.getLowVal() == Long.MAX_VALUE && next.getHighVal() == Long.MAX_VALUE) { - if (lastUid) { - copy.remove(next); - i--; - } else { - lastUid = true; - } - } else { - // Make sure we handle the "*" and "*:*" correctly and don't - // remove ranges by error. See IMAP-289 - if ((current.getLowVal() != Long.MAX_VALUE && current.getHighVal() != Long.MAX_VALUE) && (current.getHighVal() >= next.getLowVal() - 1)) { - if (next.getHighVal() > current.getHighVal()) { - current.setHighVal(next.getHighVal()); - } - // remove the merged id range and decrease the count - copy.remove(next); - i--; - } - } - - } - return copy; - - } - - - /** * Return a read-only {@link Iterator} which contains all msn/uid which fail in the specified range. */ @Override @@ -178,40 +179,6 @@ public final class IdRange implements Iterable<Long>, Comparable<IdRange> { long to = getHighVal(); return new RangeIterator(from, to); } - - /** - * {@link Iterator} of a range of msn/uid - */ - private final class RangeIterator implements Iterator<Long> { - - private final long to; - private long current; - - public RangeIterator(long from, long to) { - this.to = to; - this.current = from; - } - - @Override - public boolean hasNext() { - return current <= to; - } - - @Override - public Long next() { - if (hasNext()) { - return current++; - } else { - throw new NoSuchElementException("Highest id of " + to + " was reached before"); - } - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Read-Only"); - } - - } @Override public int compareTo(IdRange range2) { @@ -228,4 +195,34 @@ public final class IdRange implements Iterable<Long>, Comparable<IdRange> { } } + @Override + public int hashCode() { + final int PRIME = 31; + int result = 1; + result = PRIME * result + (int) (highVal ^ (highVal >>> 32)); + result = PRIME * result + (int) (lowVal ^ (lowVal >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final IdRange other = (IdRange) obj; + if (highVal != other.highVal) { + return false; + } + if (lowVal != other.lowVal) { + return false; + } + return true; + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org