1 package org.columba.mail.gui.table.command; 17 18 import org.columba.api.command.ICommandReference; 19 import org.columba.api.command.IWorkerStatusController; 20 import org.columba.api.gui.frame.IFrameMediator; 21 import org.columba.api.selection.ISelectionListener; 22 import org.columba.api.selection.SelectionChangedEvent; 23 import org.columba.core.command.Command; 24 import org.columba.core.command.StatusObservableImpl; 25 import org.columba.core.command.Worker; 26 import org.columba.mail.command.IMailFolderCommandReference; 27 import org.columba.mail.folder.IMailFolder; 28 import org.columba.mail.folder.IMailbox; 29 import org.columba.mail.gui.frame.MailFrameMediator; 30 import org.columba.mail.gui.frame.TableViewOwner; 31 import org.columba.mail.gui.table.action.ClearHeaderlistAction; 32 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent; 33 import org.columba.mail.message.IHeaderList; 34 35 43 public class ViewHeaderListCommand extends Command implements 44 ISelectionListener { 45 46 private IHeaderList headerList; 47 48 private IMailbox folder; 49 50 private boolean updateGui; 51 52 private IFrameMediator mediator; 53 54 public ViewHeaderListCommand(IFrameMediator mediator, 55 ICommandReference reference) { 56 super(reference); 57 58 this.mediator = mediator; 59 60 updateGui = true; 63 64 ((MailFrameMediator) mediator).registerTreeSelectionListener(this); 65 66 priority = Command.REALTIME_PRIORITY; 67 } 68 69 72 public void updateGUI() throws Exception { 73 ((MailFrameMediator) mediator).removeTreeSelectionListener(this); 74 75 if (updateGui) { 77 ((TableViewOwner) mediator).getTableController().showHeaderList( 78 folder, headerList); 79 } 80 81 } 82 83 86 public void execute(IWorkerStatusController worker) throws Exception { 87 if (!updateGui) 90 return; 91 92 IMailFolderCommandReference r = (IMailFolderCommandReference) getReference(); 93 94 folder = (IMailbox) r.getSourceFolder(); 95 96 ((StatusObservableImpl) folder.getObservable()).setWorker(worker); 98 99 try { 101 headerList = (folder).getHeaderList(); 102 } catch (Exception e) { 103 updateGui = false; 104 105 ((MailFrameMediator) mediator).setTreeSelection(null); 107 new ClearHeaderlistAction(mediator).actionPerformed(null); 108 109 throw e; 110 } 111 112 updateGui &= !worker.cancelled(); 113 } 114 115 118 public void selectionChanged(SelectionChangedEvent e) { 119 120 IMailFolderCommandReference r = (IMailFolderCommandReference) getReference(); 122 123 IMailFolder[] folders = ((TreeSelectionChangedEvent) e).getSelected(); 125 if (folders.length == 0) 127 return; 128 129 if (r.getSourceFolder().getId() != folders[0].getId()) 132 updateGui = false; 133 } 134 } | Popular Tags |