* This does the real work when messages are removed.
*/
protected void runMessagesRemoved(MessageCountEvent mce) {
getLogger().log(Level.FINE, "running MessagesRemoved on " + getFolderID());
MessageCountEvent newMce = null;
if (folderTableModel != null) {
Message[] removedMessages = mce.getMessages();
Message[] uidRemovedMessages = new Message[removedMessages.length];
getLogger().log(Level.FINE, "removedMessages was of size " + removedMessages.length);
MessageInfo mi;
Vector removedProxies=new Vector();
for (int i = 0; i < removedMessages.length; i++) {
getLogger().log(Level.FINE, "checking for existence of message " + removedMessages[i]);
try {
UIDMimeMessage removedMsg = getUIDMimeMessage(removedMessages[i]);
if (removedMsg != null)
uidRemovedMessages[i] = removedMsg;
else
uidRemovedMessages[i] = removedMessages[i];
mi = getMessageInfo(removedMsg);
if (mi != null) {
if (mi.getMessageProxy() != null)
mi.getMessageProxy().close();
getLogger().log(Level.FINE, "message exists--removing");
removedProxies.add(mi.getMessageProxy());
messageToInfoTable.remove(mi);
uidToInfoTable.remove(new Long(removedMsg.getUID()));
} else {
getLogger().log(Level.FINE, "message with uid " + removedMessages[i] + " not found; not removing.");
}
} catch (MessagingException me) {
getLogger().log(Level.FINE, "caught exception running messagesRemoved on " + removedMessages[i] + ": " + me.getMessage());
}
}
newMce = new MessageCountEvent(getFolder(), mce.getType(), mce.isRemoved(), uidRemovedMessages);
if (getFolderDisplayUI() != null) {
if (removedProxies.size() > 0)
getFolderDisplayUI().removeRows(removedProxies);
resetMessageCounts();
fireMessageCountEvent(newMce);