FileDocCategorySizeDatePackage
UIDSet.javaAPI DocJavaMail 1.4.33983Tue Nov 17 10:38:10 GMT 2009com.sun.mail.imap.protocol

UIDSet

public class UIDSet extends Object
This class holds the 'start' and 'end' for a range of UIDs. Just like MessageSet except using long instead of int.

Fields Summary
public long
start
public long
end
Constructors Summary
public UIDSet()

 
public UIDSet(long start, long end)

	this.start = start;
	this.end = end;
    
Methods Summary
public static com.sun.mail.imap.protocol.UIDSet[]createUIDSets(long[] msgs)

	Vector v = new Vector();
	int i,j;

	for (i=0; i < msgs.length; i++) {
	    UIDSet ms = new UIDSet();
	    ms.start = msgs[i];

	    // Look for contiguous elements
	    for (j=i+1; j < msgs.length; j++) {
		if (msgs[j] != msgs[j-1] +1)
		    break;
	    }
	    ms.end = msgs[j-1];
	    v.addElement(ms);
	    i = j-1; // i gets incremented @ top of the loop
	}
	UIDSet[] msgsets = new UIDSet[v.size()];	
	v.copyInto(msgsets);
	return msgsets;
    
public longsize()
Count the total number of elements in a UIDSet

	return end - start + 1;
    
public static longsize(com.sun.mail.imap.protocol.UIDSet[] msgsets)

	long count = 0;

	if (msgsets == null) // Null msgset
	    return 0; 

	for (int i=0; i < msgsets.length; i++)
	    count += msgsets[i].size();
	
	return count;
    
public static java.lang.StringtoString(com.sun.mail.imap.protocol.UIDSet[] msgsets)
Convert an array of UIDSets into an IMAP sequence range

	if (msgsets == null || msgsets.length == 0) // Empty msgset
	    return null; 

	int i = 0;  // msgset index
	StringBuffer s = new StringBuffer();
	int size = msgsets.length;
	long start, end;

	for (;;) {
	    start = msgsets[i].start;
	    end = msgsets[i].end;

	    if (end > start)
		s.append(start).append(':").append(end);
	    else // end == start means only one element
		s.append(start);
	
	    i++; // Next UIDSet
	    if (i >= size) // No more UIDSets
		break;
	    else
		s.append(',");
	}
	return s.toString();