コード例 #1
0
  /**
   * Run thru the given array of messages, apply the given Condition on each message and generate
   * sets of contiguous sequence-numbers for the successful messages. If a message in the given
   * array is found to be expunged, it is ignored.
   *
   * <p>ASSERT: Since this method uses and returns message sequence numbers, you should use this
   * method only when holding the messageCacheLock.
   */
  public static MessageSet[] toMessageSet(Message[] msgs, Condition cond) {
    Vector v = new Vector(1);
    int current, next;

    IMAPMessage msg;
    for (int i = 0; i < msgs.length; i++) {
      msg = (IMAPMessage) msgs[i];
      if (msg.isExpunged()) // expunged message, skip it
      continue;

      current = msg.getSequenceNumber();
      // Apply the condition. If it fails, skip it.
      if ((cond != null) && !cond.test(msg)) continue;

      MessageSet set = new MessageSet();
      set.start = current;

      // Look for contiguous sequence numbers
      for (++i; i < msgs.length; i++) {
        // get next message
        msg = (IMAPMessage) msgs[i];

        if (msg.isExpunged()) // expunged message, skip it
        continue;
        next = msg.getSequenceNumber();

        // Does this message match our condition ?
        if ((cond != null) && !cond.test(msg)) continue;

        if (next == current + 1) current = next;
        else { // break in sequence
          // We need to reexamine this message at the top of
          // the outer loop, so decrement 'i' to cancel the
          // outer loop's autoincrement
          i--;
          break;
        }
      }
      set.end = current;
      v.addElement(set);
    }

    if (v.isEmpty()) // No valid messages
    return null;
    else {
      MessageSet[] sets = new MessageSet[v.size()];
      v.copyInto(sets);
      return sets;
    }
  }
コード例 #2
0
ファイル: IMAPNestedMessage.java プロジェクト: ePADD/mstor
 /*
  * Get the enclosing message's sequence number. Overrides
  * IMAPMessage.getSequenceNumber().
  */
 protected int getSequenceNumber() {
   return msg.getSequenceNumber();
 }