@Override public int compareTo(IdRange range2) { // Correctly sort and respect "*" and "*:*" ranges. See IMAP-289 if (getLowVal() == Long.MAX_VALUE && getHighVal() == Long.MAX_VALUE && range2.getLowVal() == Long.MAX_VALUE && range2.getHighVal() == Long.MAX_VALUE) { return 0; } if (getLowVal() == Long.MAX_VALUE && getHighVal() == Long.MAX_VALUE) { return 1; } else if (range2.getLowVal() == Long.MAX_VALUE && range2.getHighVal() == Long.MAX_VALUE) { return -1; } else { return (int) (getLowVal() - range2.getLowVal()); } }
@Test public void testAllNumbersSequence() throws Exception { IdRange[] range = { new IdRange(2), new IdRange(4), new IdRange(9), new IdRange(16), new IdRange(25), new IdRange(36), new IdRange(49), new IdRange(64), new IdRange(81), new IdRange(100) }; checkSequence("2,4,9,16,25,36,49,64,81,100", IdRange.mergeRanges(Arrays.asList(range)).toArray(new IdRange[0])); }
private static String formatRanges(IdRange[] ranges) { if (ranges == null || ranges.length == 0) return "*"; StringBuilder rangeBuilder = new StringBuilder(); for (int i = 0; i < ranges.length; i++) { rangeBuilder.append(ranges[i].getFormattedString()); if (i + 1 < ranges.length) { rangeBuilder.append(","); } } return rangeBuilder.toString(); }
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); 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());
if ( uidNext != 1) { uidSet = new IdRange[] {new IdRange(1, uidNext -1)}; Iterator<Long> it = knownUids[a].iterator(); for (int a = 0; a < knownSequences.length; a++) { boolean done = false; Iterator<Long> it = knownSequences[a].iterator(); while(it.hasNext()) { for ( int i = 0; i < uidSet.length; i++) { IdRange r = uidSet[i]; if (r.getLowVal() < firstUid) { if (r.getHighVal() > firstUid) { r.setLowVal(firstUid); filteredUidSet.add(r);
return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE); } else { long value = parseUnsignedInteger(range); return new IdRange(value); return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE); } else if (val1 <= val2) { return new IdRange(val1, val2); } else if (val1 == Long.MAX_VALUE) { return new IdRange(val2, Long.MAX_VALUE); } else { return new IdRange(val2, val1);
/** * Save the given sequence-set which you can refer to later with $. * * @param session * @param ranges */ public static void saveSequenceSet(ImapSession session, IdRange[] ranges) { session.setAttribute(SEARCHRES_SAVED_SET, IdRange.mergeRanges(Arrays.asList(ranges)).toArray(new IdRange[0])); }
return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE); } else { long value = parseUnsignedInteger(range); return new IdRange(value); return new IdRange(Long.MAX_VALUE, Long.MAX_VALUE); } else if (val1 <= val2) { return new IdRange(val1, val2); } else if (val1 == Long.MAX_VALUE) { return new IdRange(val2, Long.MAX_VALUE); } else { return new IdRange(val2, val1);
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); 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());
/** * Save the given sequence-set which you can refer to later with $. * * @param session * @param ranges */ public static void saveSequenceSet(ImapSession session, IdRange[] ranges) { session.setAttribute(SEARCHRES_SAVED_SET, IdRange.mergeRanges(Arrays.asList(ranges)).toArray(new IdRange[0])); }
@Override public int compareTo(IdRange range2) { // Correctly sort and respect "*" and "*:*" ranges. See IMAP-289 if (getLowVal() == Long.MAX_VALUE && getHighVal() == Long.MAX_VALUE && range2.getLowVal() == Long.MAX_VALUE && range2.getHighVal() == Long.MAX_VALUE) { return 0; } if (getLowVal() == Long.MAX_VALUE && getHighVal() == Long.MAX_VALUE) { return 1; } else if (range2.getLowVal() == Long.MAX_VALUE && range2.getHighVal() == Long.MAX_VALUE) { return -1; } else { return (int) (getLowVal() - range2.getLowVal()); } }
public static Input sequence() { IdRange[] range = { new IdRange(100, Long.MAX_VALUE), new IdRange(110), new IdRange(200, 201), new IdRange(400, Long.MAX_VALUE) }; SearchKey key = SearchKey.buildSequenceSet(IdRange.mergeRanges(Arrays.asList(range)).toArray(new IdRange[0])); return new Input("*:100,110,200:201,400:*", key); }
protected IdRange[] idRanges(Collection<MessageRange> mRanges) { IdRange[] idRanges = new IdRange[mRanges.size()]; Iterator<MessageRange> mIt = mRanges.iterator(); int i = 0; while(mIt.hasNext()) { MessageRange mr = mIt.next(); IdRange ir; if (mr.getType() == Type.ONE) { ir = new IdRange(mr.getUidFrom()); } else { ir = new IdRange(mr.getUidFrom(), mr.getUidTo()); } idRanges[i++] = ir; } return idRanges; }
List<IdRange> merged = IdRange.mergeRanges(rangeList); return (IdRange[]) merged.toArray(new IdRange[merged.size()]);
private static String formatRanges(IdRange[] ranges) { if (ranges == null || ranges.length == 0) { return "*"; } StringBuilder rangeBuilder = new StringBuilder(); for (int i = 0; i < ranges.length; i++) { rangeBuilder.append(ranges[i].getFormattedString()); if (i + 1 < ranges.length) { rangeBuilder.append(","); } } return rangeBuilder.toString(); }
/** * Return a read-only {@link Iterator} which contains all msn/uid which fail in the specified range. * * @return rangeIt */ @Override public Iterator<Long> iterator() { long from = getLowVal(); if (from == Long.MAX_VALUE) { from = 1; } long to = getHighVal(); return new RangeIterator(from, to); }
public static Input sequence() { IdRange[] range = { new IdRange(100, Long.MAX_VALUE), new IdRange(110), new IdRange(200, 201), new IdRange(400, Long.MAX_VALUE) }; SearchKey key = SearchKey.buildSequenceSet(IdRange.mergeRanges(Arrays.asList(range)).toArray(new IdRange[0])); return new Input("*:100,110,200:201,400:*", key); }
@Test public void testQuotaParsing() throws DecodingException { CopyCommandParser parser = new CopyCommandParser(); ImapCommand command = ImapCommand.anyStateCommand("Command"); String commandString = " 42:69 foo \n"; InputStream inputStream = new ByteArrayInputStream(commandString.getBytes()); ImapRequestStreamLineReader lineReader = new ImapRequestStreamLineReader(inputStream, null); CopyRequest request = (CopyRequest) parser.decode(command, lineReader, "A003", null); CopyRequest expected = new CopyRequest(command, new IdRange[] {new IdRange(42, 69)}, "foo", false, "A003"); assertThat(request).isEqualTo(expected); } }
List<IdRange> merged = IdRange.mergeRanges(rangeList); return (IdRange[]) merged.toArray(new IdRange[merged.size()]);
@Override public ImapResponseComposer sequenceSet(IdRange[] ranges) throws IOException { StringBuilder sb = new StringBuilder(); for (int i = 0; i < ranges.length; i++) { IdRange range = ranges[i]; sb.append(range.getFormattedString()); if (i + 1 < ranges.length) { sb.append(","); } } return message(sb.toString()); }