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.FilterRule; 27 import org.columba.core.filter.IFilterRule; 28 import org.columba.mail.command.IMailFolderCommandReference; 29 import org.columba.mail.filter.MailFilterCriteria; 30 import org.columba.mail.folder.FolderFactory; 31 import org.columba.mail.folder.IMailbox; 32 import org.columba.mail.folder.virtual.VirtualFolder; 33 import org.columba.mail.gui.config.filter.ConfigFrame; 34 import org.columba.mail.gui.tree.FolderTreeModel; 35 import org.columba.ristretto.message.Header; 36 37 38 45 public class CreateVFolderOnMessageCommand extends Command { 46 47 48 private static final Logger LOG = Logger.getLogger("org.columba.mail.folder.command"); 49 50 51 public static final String VFOLDER_ON_SUBJECT = "Subject"; 52 53 54 public static final String VFOLDER_ON_FROM = "From"; 55 56 57 public static final String VFOLDER_ON_TO = "To"; 58 59 60 private String vfolderType; 61 62 63 private IMailbox parentFolder = null; 64 65 66 private VirtualFolder vfolder = null; 67 68 private IFrameMediator mediator; 69 70 80 public CreateVFolderOnMessageCommand(IFrameMediator frameController, 81 ICommandReference reference, String vfolderType) { 82 super(reference); 83 this.vfolderType = vfolderType; 84 this.mediator = frameController; 85 } 86 87 93 public void updateGUI() throws Exception { 94 FolderTreeModel.getInstance().nodeStructureChanged(parentFolder); 95 96 if (vfolder != null) { 97 new ConfigFrame(mediator, vfolder); 99 } 100 } 101 102 110 public void execute(IWorkerStatusController worker) 111 throws Exception { 112 IMailFolderCommandReference r = (IMailFolderCommandReference) getReference(); 114 Object [] uids = r.getUids(); 116 if (uids.length == 0) { 117 LOG.fine( 118 "No virtual folder created since no message was selected"); 119 120 return; } 122 123 Object uid = uids[0]; 124 parentFolder = (IMailbox) r.getSourceFolder(); 125 126 ((StatusObservableImpl) parentFolder.getObservable()).setWorker(worker); 128 129 Header header = parentFolder.getHeaderFields(uid, 131 new String [] {"Subject", "From", "To"}); 132 String headerValue = (String ) header.get(vfolderType); 133 134 if (headerValue == null) { 135 LOG.warning("Error getting " + vfolderType 136 + " header. No virtual folder created"); 137 138 return; 139 } 140 141 String name = vfolderType + " contains [" + headerValue + "]"; 143 vfolder = createVirtualFolder(name, vfolderType, headerValue, 144 parentFolder); 145 } 146 147 161 public VirtualFolder createVirtualFolder(String folderName, 162 String headerField, String pattern, IMailbox parent) { 163 VirtualFolder vfolder; 165 166 try { 167 vfolder = (VirtualFolder) FolderFactory.getInstance().createChild(parent, 168 folderName, "VirtualFolder"); 169 } catch (Exception e) { 170 LOG.warning("Error creating new virtual folder: " 171 + e.getMessage()); 172 173 return null; 174 } 175 176 String parentUid = "101"; 179 if (parent != null) { 180 parentUid = parent.getId(); 181 } 182 183 vfolder.getConfiguration().setString("property", "source_uid", parentUid); 184 vfolder.getConfiguration().setBoolean("property", "include_subfolders", false); 185 186 IFilterRule rule = vfolder.getFilter().getFilterRule(); 188 rule.setCondition("matchall"); 189 rule.removeAll(); 190 rule.addEmptyCriteria(); 191 192 MailFilterCriteria c = new MailFilterCriteria(rule.get(0)); 194 c.setCriteriaString("contains"); 195 c.setHeaderfieldString(headerField); 196 c.setTypeString(headerField); 197 c.setPatternString(pattern); 198 199 return vfolder; 200 } 201 } 202 | Popular Tags |