Methods Summary |
---|
public com.sun.mail.imap.protocol.Item | getItem(int index)
return items[index];
|
public com.sun.mail.imap.protocol.Item | getItem(java.lang.Class c)
for (int i = 0; i < items.length; i++) {
if (c.isInstance(items[i]))
return items[i];
}
return null;
|
public static com.sun.mail.imap.protocol.Item | getItem(com.sun.mail.iap.Response[] r, int msgno, java.lang.Class c)
if (r == null)
return null;
for (int i = 0; i < r.length; i++) {
if (r[i] == null ||
!(r[i] instanceof FetchResponse) ||
((FetchResponse)r[i]).getNumber() != msgno)
continue;
FetchResponse f = (FetchResponse)r[i];
for (int j = 0; j < f.items.length; j++) {
if (c.isInstance(f.items[j]))
return f.items[j];
}
}
return null;
|
public int | getItemCount()
return items.length;
|
private boolean | match(char[] itemName)
int len = itemName.length;
for (int i = 0, j = index; i < len;)
// IMAP tokens are case-insensitive. We store itemNames in
// uppercase, so convert operand to uppercase before comparing.
if (Character.toUpperCase((char)buffer[j++]) != itemName[i++])
return false;
return true;
|
private void | parse()
skipSpaces();
if (buffer[index] != '(")
throw new ParsingException(
"error in FETCH parsing, missing '(' at index " + index);
Vector v = new Vector();
Item i = null;
do {
index++; // skip '(', or SPACE
if (index >= size)
throw new ParsingException(
"error in FETCH parsing, ran off end of buffer, size " + size);
switch(buffer[index]) {
case 'E":
if (match(ENVELOPE.name)) {
index += ENVELOPE.name.length; // skip "ENVELOPE"
i = new ENVELOPE(this);
}
break;
case 'F":
if (match(FLAGS.name)) {
index += FLAGS.name.length; // skip "FLAGS"
i = new FLAGS((IMAPResponse)this);
}
break;
case 'I":
if (match(INTERNALDATE.name)) {
index += INTERNALDATE.name.length; // skip "INTERNALDATE"
i = new INTERNALDATE(this);
}
break;
case 'B":
if (match(BODY.name)) {
if (buffer[index+4] == '[") {
index += BODY.name.length; // skip "BODY"
i = new BODY(this);
}
else {
if (match(BODYSTRUCTURE.name))
index += BODYSTRUCTURE.name.length;
// skip "BODYSTRUCTURE"
else
index += BODY.name.length; // skip "BODY"
i = new BODYSTRUCTURE(this);
}
}
break;
case 'R":
if (match(RFC822SIZE.name)) {
index += RFC822SIZE.name.length; // skip "RFC822.SIZE"
i = new RFC822SIZE(this);
}
else {
if (match(RFC822DATA.name)) {
index += RFC822DATA.name.length;
if (match(HEADER))
index += HEADER.length; // skip ".HEADER"
else if (match(TEXT))
index += TEXT.length; // skip ".TEXT"
i = new RFC822DATA(this);
}
}
break;
case 'U":
if (match(UID.name)) {
index += UID.name.length;
i = new UID(this);
}
break;
default:
}
if (i != null)
v.addElement(i);
} while (buffer[index] != ')");
index++; // skip ')'
items = new Item[v.size()];
v.copyInto(items);
|