1 package org.columba.mail.filter.plugins; 19 20 import org.columba.core.filter.AbstractFilter; 21 import org.columba.core.filter.FilterCriteria; 22 import org.columba.core.filter.IFilterCriteria; 23 import org.columba.core.folder.api.IFolder; 24 import org.columba.mail.filter.MailFilterCriteria; 25 import org.columba.mail.folder.IMailbox; 26 import org.columba.ristretto.coder.EncodedWord; 27 import org.columba.ristretto.message.Header; 28 29 38 public class HeaderfieldFilter extends AbstractFilter { 39 40 41 private String headerfield; 43 44 private String pattern; 46 47 private int condition; 48 49 54 public HeaderfieldFilter() { 55 super(); 56 } 57 58 66 public boolean process(IFolder folder, Object uid) 67 throws Exception { 68 Header header = ((IMailbox)folder).getHeaderFields(uid, 70 new String [] { headerfield }); 71 72 if (header == null) { 73 return false; 74 } 75 76 String headerItem = (String ) header.get(headerfield); 77 if (headerItem == null) 79 return false; 80 81 headerItem = EncodedWord.decode(headerItem).toString(); 83 84 boolean result = match(headerItem, condition, pattern); 86 87 return result; 88 } 89 90 103 protected boolean match(String headerItem, int condition, String pattern) { 104 boolean result = false; 105 106 if (headerItem == null) { 108 return false; 109 } 110 111 switch (condition) { 112 case FilterCriteria.CONTAINS: 113 114 if (headerItem.toLowerCase().indexOf(pattern.toLowerCase()) != -1) { 115 result = true; 116 } 117 118 break; 119 120 case FilterCriteria.CONTAINS_NOT: 121 122 if (headerItem.toLowerCase().indexOf(pattern.toLowerCase()) == -1) { 123 result = true; 124 } 125 126 break; 127 128 case FilterCriteria.IS: 129 130 if (headerItem.equalsIgnoreCase(pattern)) { 131 result = true; 132 } 133 134 break; 135 136 case FilterCriteria.IS_NOT: 137 138 if (!headerItem.equalsIgnoreCase(pattern)) { 139 result = true; 140 } 141 142 break; 143 144 case FilterCriteria.BEGINS_WITH: 145 146 if (headerItem.toLowerCase().startsWith(pattern.toLowerCase())) { 147 result = true; 148 } 149 150 break; 151 152 case FilterCriteria.ENDS_WITH: 153 154 if (headerItem.toLowerCase().endsWith(pattern.toLowerCase())) { 155 result = true; 156 } 157 158 break; 159 } 160 161 return result; 162 } 163 164 167 public void setUp(IFilterCriteria f) { 168 169 170 headerfield = new MailFilterCriteria(f).getHeaderfieldString(); 172 173 pattern = f.getPatternString(); 175 176 condition = f.getCriteria(); 179 } 180 } | Popular Tags |