/** * Package private constructor. * * <p>Note that nested messages have no containing folder, nor a message number. */ IMAPNestedMessage(IMAPMessage m, BODYSTRUCTURE b, ENVELOPE e, String sid) { super(m._getSession()); msg = m; bs = b; envelope = e; sectionId = sid; setPeek(m.getPeek()); }
/** * 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; } }
/** * Return UIDSets for the messages. Note that the UIDs must have already been fetched for the * messages. */ public static UIDSet[] toUIDSet(Message[] msgs) { Vector v = new Vector(1); long 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.getUID(); UIDSet set = new UIDSet(); set.start = current; // Look for contiguous UIDs for (++i; i < msgs.length; i++) { // get next message msg = (IMAPMessage) msgs[i]; if (msg.isExpunged()) // expunged message, skip it continue; next = msg.getUID(); 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 { UIDSet[] sets = new UIDSet[v.size()]; v.copyInto(sets); return sets; } }
/* * Get the enclosing message's sequence number. Overrides * IMAPMessage.getSequenceNumber(). */ protected int getSequenceNumber() { return msg.getSequenceNumber(); }
/* * Get the enclosing message's messageCacheLock. Overrides * IMAPMessage.getMessageCacheLock(). */ protected Object getMessageCacheLock() { return msg.getMessageCacheLock(); }
/* * Is this an IMAP4 REV1 server? */ protected boolean isREV1() throws FolderClosedException { return msg.isREV1(); }
/* * Get the enclosing message's Protocol object. Overrides * IMAPMessage.getProtocol(). */ protected IMAPProtocol getProtocol() throws ProtocolException, FolderClosedException { return msg.getProtocol(); }
/* * Get the enclosing message's fetchBlockSize. */ protected int getFetchBlockSize() { return msg.getFetchBlockSize(); }
/* * Check whether the enclosing message is expunged. Overrides * Message.isExpunged(). */ public boolean isExpunged() { return msg.isExpunged(); }
/* * Check whether the enclosing message is expunged. Overrides * IMAPMessage.checkExpunged(). */ protected void checkExpunged() throws MessageRemovedException { msg.checkExpunged(); }