1 package org.columba.mail.folder.command; 17 18 import java.util.logging.Logger ; 19 20 import org.columba.api.command.ICommandReference; 21 import org.columba.api.command.IWorkerStatusController; 22 import org.columba.api.gui.frame.IFrameMediator; 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.core.filter.Filter; 27 import org.columba.core.filter.FilterFactory; 28 import org.columba.mail.command.IMailFolderCommandReference; 29 import org.columba.mail.filter.MailFilterFactory; 30 import org.columba.mail.folder.IMailbox; 31 import org.columba.mail.gui.config.filter.FilterDialog; 32 import org.columba.ristretto.message.Header; 33 34 41 public class CreateFilterOnMessageCommand extends Command { 42 43 44 private static final Logger LOG = Logger 45 .getLogger("org.columba.mail.folder.command"); 46 47 48 public static final String FILTER_ON_SUBJECT = "Subject"; 49 50 51 public static final String FILTER_ON_FROM = "From"; 52 53 54 public static final String FILTER_ON_TO = "To"; 55 56 57 private String filterType; 58 59 60 private Filter filter = null; 61 62 private IFrameMediator mediator; 63 64 65 private IMailbox srcFolder; 66 67 76 public CreateFilterOnMessageCommand(IFrameMediator mediator, 77 ICommandReference reference, String filterType) { 78 super(reference); 79 this.filterType = filterType; 80 81 this.mediator = mediator; 82 } 83 84 91 public void updateGUI() throws Exception { 92 if ((filter != null) && (srcFolder != null)) { 93 FilterDialog dialog = new FilterDialog(mediator, filter); 94 95 if (!dialog.wasCancelled()) { 96 srcFolder.getFilterList().add(filter); 97 } 98 } 99 } 100 101 108 public void execute(IWorkerStatusController worker) throws Exception { 109 IMailFolderCommandReference r = (IMailFolderCommandReference) getReference(); 111 Object [] uids = r.getUids(); 113 if (uids.length == 0) { 114 LOG.fine("No filter created since no message was selected"); 115 116 return; } 118 119 Object uid = uids[0]; 120 srcFolder = (IMailbox) r.getSourceFolder(); 121 122 ((StatusObservableImpl) srcFolder.getObservable()).setWorker(worker); 124 125 Header header = srcFolder.getHeaderFields(uid, new String [] { 127 "Subject", "From", "To" }); 128 String headerValue = (String ) header.get(filterType); 129 130 if (headerValue == null) { 131 LOG.warning("Error getting " + filterType 132 + " header. No filter created"); 133 134 return; 135 } 136 137 String descr = filterType + " contains [" + headerValue + "]"; 139 filter = createFilter(descr, filterType, headerValue); 140 } 141 142 154 public Filter createFilter(String filterDescr, String headerField, 155 String pattern) { 156 157 Filter filter = FilterFactory.createEmptyFilter(); 158 filter.setName(filterDescr); 159 160 if (headerField.equals(FILTER_ON_SUBJECT)) { 161 filter.getFilterRule().add( 162 MailFilterFactory.createSubjectContains(pattern)); 163 } else if (headerField.equals(FILTER_ON_FROM)) { 164 filter.getFilterRule().add( 165 MailFilterFactory.createFromContains(pattern)); 166 } else if (headerField.equals(FILTER_ON_TO)) { 167 filter.getFilterRule().add( 168 MailFilterFactory.createToContains(pattern)); 169 } else 170 throw new IllegalArgumentException ("unsupported operation"); 171 172 filter.getFilterActionList().addEmptyAction(); 173 174 return filter; 175 } 176 } 177 | Popular Tags |