1 package org.columba.mail.gui.table.action; 2 3 import java.util.Hashtable ; 4 import java.util.Iterator ; 5 import java.util.Map.Entry; 6 import java.util.logging.Logger ; 7 8 import org.columba.api.gui.frame.IFrameMediator; 9 import org.columba.api.selection.ISelectionListener; 10 import org.columba.api.selection.SelectionChangedEvent; 11 import org.columba.core.association.AssociationStore; 12 import org.columba.core.association.api.IAssociation; 13 import org.columba.core.command.CommandProcessor; 14 import org.columba.core.folder.api.IFolder; 15 import org.columba.core.gui.tagging.TaggingMenu; 16 import org.columba.core.tagging.TagManager; 17 import org.columba.core.tagging.api.ITag; 18 import org.columba.mail.command.IMailFolderCommandReference; 19 import org.columba.mail.folder.IMailbox; 20 import org.columba.mail.folder.command.TagMessageCommand; 21 import org.columba.mail.folder.virtual.VirtualFolder; 22 import org.columba.mail.folder.virtual.VirtualHeader; 23 import org.columba.mail.gui.frame.MailFrameMediator; 24 import org.columba.mail.gui.table.selection.TableSelectionChangedEvent; 25 import org.columba.mail.message.IHeaderList; 26 import org.columba.mail.util.MailResourceLoader; 27 28 public class TagMessageMenu extends TaggingMenu implements ISelectionListener { 29 30 final static private String SERVICE_ID = "tagging"; 31 32 private static final Logger LOG = Logger 33 .getLogger("org.columba.mail.gui.table.action.TagMessageMenu"); 34 35 38 public TagMessageMenu(IFrameMediator controller) { 39 super(controller, MailResourceLoader.getString("dialog", "tagging", 40 "menu_tag_message"), "menu_tag_message"); 41 42 ((MailFrameMediator) controller).registerTableSelectionListener(this); 43 } 44 45 public void selectionChanged(SelectionChangedEvent e) { 47 if (((TableSelectionChangedEvent) e).getUids().length > 0) { 48 setEnabled(true); 49 removeAll(); 50 createSubMenu(); 51 } else { 52 setEnabled(false); 53 } 54 55 } 56 57 private boolean checkOneUid(Object uid, IFolder srcFolder, ITag tag) { 58 for (IAssociation as : AssociationStore.getInstance() 59 .getAllAssociations( 60 TagMessageCommand.createURI(srcFolder.getId(), uid) 61 .toString())) { 62 if (as.getServiceId().equals(SERVICE_ID) 63 && (as.getMetaDataId() != null) 64 && (as.getMetaDataId().equals(tag.getId()))) { 65 return true; 66 } 67 } 68 return false; 69 } 70 71 @Override 72 protected void assignTag(String tagId) { 73 74 IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator()) 76 .getTableSelection(); 77 78 CommandProcessor.getInstance().addOp( 80 new TagMessageCommand(r, TagMessageCommand.ADD_TAG, tagId)); 81 } 82 83 @Override 84 protected boolean isTagged(ITag tag) { 85 IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator()) 87 .getTableSelection(); 88 89 if ((r == null) || (r.getUids().length <= 0) || (tag == null)) 90 return false; 91 92 Hashtable <Object , IFolder> mails = new Hashtable <Object , IFolder>(); 93 94 if (r.getSourceFolder() instanceof VirtualFolder) { 97 try { 99 100 IHeaderList hl = ((IMailbox) r.getSourceFolder()) 101 .getHeaderList(); 102 for (Object uid : r.getUids()) { 103 mails.put(((VirtualHeader) hl.get(uid)).getSrcUid(), 105 ((VirtualHeader) hl.get(uid)).getSrcFolder()); 106 } 107 } catch (Exception e) { 108 LOG.severe("Error getting header list from virtual folder"); 109 e.printStackTrace(); 110 return false; 111 } 112 } else { 113 for (Object uid : r.getUids()) { 114 mails.put(uid, r.getSourceFolder()); 115 } 116 } 117 118 boolean result = true; 120 for (Entry<Object , IFolder> entry : mails.entrySet()) { 121 boolean current = checkOneUid(entry.getKey(), entry.getValue(), tag); 122 if (current == false) 123 return false; 124 } 125 return result; 126 } 127 128 @Override 129 protected void removeAllTags() { 130 131 IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator()) 133 .getTableSelection(); 134 135 for (Iterator <ITag> iter = TagManager.getInstance().getAllTags(); iter 136 .hasNext();) { 137 138 ITag tag = iter.next(); 139 142 CommandProcessor.getInstance().addOp( 144 new TagMessageCommand(r, TagMessageCommand.REMOVE_TAG, tag 145 .getId())); 146 } 147 } 148 149 @Override 150 protected void removeTag(String tagId) { 151 152 IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator()) 154 .getTableSelection(); 155 156 CommandProcessor.getInstance().addOp( 157 new TagMessageCommand(r, TagMessageCommand.REMOVE_TAG, tagId)); 158 } 159 160 } 161 | Popular Tags |