1 package org.columba.mail.gui.tagging; 2 3 import java.awt.event.MouseEvent ; 4 import java.util.Collection ; 5 import java.util.Iterator ; 6 7 import javax.swing.event.ListSelectionEvent ; 8 import javax.swing.event.ListSelectionListener ; 9 import javax.swing.tree.MutableTreeNode ; 10 11 import org.columba.api.gui.frame.IFrameMediator; 12 import org.columba.api.plugin.PluginLoadingFailedException; 13 import org.columba.core.association.AssociationStore; 14 import org.columba.core.base.UUIDGenerator; 15 import org.columba.core.command.CommandProcessor; 16 import org.columba.core.gui.base.DoubleClickListener; 17 import org.columba.core.gui.frame.FrameManager; 18 import org.columba.core.gui.tagging.TagList; 19 import org.columba.core.tagging.api.ITag; 20 import org.columba.mail.command.IMailFolderCommandReference; 21 import org.columba.mail.command.MailFolderCommandReference; 22 import org.columba.mail.folder.IMailbox; 23 import org.columba.mail.folder.headercache.CachedHeaderfields; 24 import org.columba.mail.folder.virtual.VirtualFolder; 25 import org.columba.mail.gui.frame.TreeViewOwner; 26 import org.columba.mail.gui.table.command.ViewHeaderListCommand; 27 import org.columba.mail.gui.tree.FolderTreeModel; 28 import org.columba.mail.message.ColumbaHeader; 29 import org.columba.ristretto.message.Header; 30 31 public class MailTagList extends TagList { 32 33 private IFrameMediator frameMediator; 34 35 public MailTagList(IFrameMediator frameMediator) { 36 super(); 37 38 this.frameMediator = frameMediator; 39 40 final MyListSelectionListener sl = new MyListSelectionListener(); 41 addListSelectionListener(sl); 42 43 addMouseListener(new DoubleClickListener() { 46 47 @Override 48 public void doubleClick(MouseEvent event) { 49 sl.valueChanged(new ListSelectionEvent (event.getSource(), 0, 0, 50 false)); 51 } 52 53 }); 54 } 55 56 private IMailFolderCommandReference getMessageFromURI(String uri) { 57 String s = uri; 59 60 int index = s.lastIndexOf('/'); 62 String messageId = s.substring(index + 1, s.length()); 63 String folderId = s.substring(s.lastIndexOf('/', index - 1) + 1, index); 64 65 IMailbox folder = (IMailbox) FolderTreeModel.getInstance().getFolder( 66 folderId); 67 IMailFolderCommandReference r = new MailFolderCommandReference(folder, 68 new Object [] { Integer.parseInt(messageId) }); 69 70 return r; 71 } 72 73 class MyListSelectionListener implements ListSelectionListener { 74 MyListSelectionListener() { 75 } 76 77 public void valueChanged(ListSelectionEvent event) { 78 if (event.getValueIsAdjusting()) { 80 return; 81 } 82 83 ITag result = (ITag) getSelectedValue(); 84 85 if (result == null) { 87 return; 88 } 89 90 Collection <String > uriList = AssociationStore.getInstance() 92 .getAssociatedItems("tagging", result.getId()); 93 94 String uuid = new UUIDGenerator().newUUID(); 97 98 VirtualFolder taggedMessageFolder = new VirtualFolder( 100 "Tag Search Result"); 101 102 Object root = ((TreeViewOwner) frameMediator).getTreeController() 104 .getModel().getRoot(); 105 if (root instanceof MutableTreeNode ) 106 taggedMessageFolder.setParent((MutableTreeNode ) root); 107 108 for (Iterator <String > it = uriList.iterator(); it.hasNext();) { 109 String uri = it.next(); 110 if (!uri.startsWith("columba://org.columba.mail")) 112 continue; 113 114 IMailFolderCommandReference r = getMessageFromURI(uri); 115 try { 116 Header header = ((IMailbox) r.getSourceFolder()) 117 .getHeaderFields(r.getUids()[0], CachedHeaderfields 118 .getDefaultHeaderfields()); 119 ColumbaHeader pHeader = new ColumbaHeader(header); 120 taggedMessageFolder.add(pHeader, (IMailbox) r 121 .getSourceFolder(), r.getUids()[0]); 122 } catch (Exception e) { 123 e.printStackTrace(); 125 } 126 } 127 128 135 IFrameMediator newMediator = null; 137 try { 138 newMediator = FrameManager.getInstance().switchView( 139 frameMediator.getContainer(), "ThreePaneMail"); 140 } catch (PluginLoadingFailedException e) { 141 e.printStackTrace(); 142 } 143 144 ((TreeViewOwner) newMediator).getTreeController().setSelected( 146 taggedMessageFolder); 147 148 CommandProcessor.getInstance() 150 .addOp( 151 new ViewHeaderListCommand(newMediator, 152 new MailFolderCommandReference( 153 taggedMessageFolder))); 154 } 155 } 156 } 157 | Popular Tags |