FileDocCategorySizeDatePackage
Utility.javaAPI DocJavaMail 1.4.35477Tue Nov 17 10:38:10 GMT 2009com.sun.mail.imap

Utility

public final class Utility extends Object
Holder for some static utility methods.
author
John Mani
author
Bill Shannon

Fields Summary
Constructors Summary
private Utility()

 
Methods Summary
public static com.sun.mail.imap.protocol.MessageSet[]toMessageSet(Message[] msgs, com.sun.mail.imap.Utility$Condition cond)
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. ASSERT: Since this method uses and returns message sequence numbers, you should use this method only when holding the messageCacheLock.

	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;
	}
    
public static com.sun.mail.imap.protocol.UIDSet[]toUIDSet(Message[] msgs)
Return UIDSets for the messages. Note that the UIDs must have already been fetched for the messages.

	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;
	}