From: Sandy M. <san...@us...> - 2004-04-20 18:35:06
|
Update of /cvsroot/gatormail/GatorMail/src/java/edu/ufl/osg/webmail/actions In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24593/src/java/edu/ufl/osg/webmail/actions Modified Files: FolderAction.java Log Message: Implements the junk flag filters Index: FolderAction.java =================================================================== RCS file: /cvsroot/gatormail/GatorMail/src/java/edu/ufl/osg/webmail/actions/FolderAction.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FolderAction.java 19 Apr 2004 22:29:42 -0000 1.4 --- FolderAction.java 20 Apr 2004 18:34:57 -0000 1.5 *************** *** 42,53 **** import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMultipart; ! import javax.mail.search.AddressTerm; ! import javax.mail.search.FlagTerm; ! import javax.mail.search.FromStringTerm; ! import javax.mail.search.NotTerm; ! import javax.mail.search.OrTerm; ! import javax.mail.search.SearchTerm; ! import javax.mail.search.SubjectTerm; ! import javax.mail.search.RecipientStringTerm; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; --- 42,46 ---- import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMultipart; ! import javax.mail.search.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; *************** *** 75,79 **** static { ! List list = new ArrayList(); list.add("none"); list.add("subjectAndSender"); --- 68,72 ---- static { ! final List list = new ArrayList(); list.add("none"); list.add("subjectAndSender"); *************** *** 89,92 **** --- 82,87 ---- list.add("addressBook"); list.add("notAddressBook"); + list.add("flaggedJunk"); + list.add("notFlaggedJunk"); filterChoices = Collections.unmodifiableList(list); } *************** *** 97,110 **** * folder parameter of the request URL forward the user to their INBOX. * ! * @param mapping The ActionMapping used to select this ! * instance ! * @param form The optional ActionForm bean for this request ! * (if any) ! * @param request The HTTP request we are processing ! * @param response The HTTP response we are creating ! * @return An ActionForward instance to either their ! * inbox or the view. ! * @throws Exception if the application business logic throws an ! * exception */ public ActionForward execute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception { --- 92,105 ---- * folder parameter of the request URL forward the user to their INBOX. * ! * @param mapping The ActionMapping used to select this ! * instance ! * @param form The optional ActionForm bean for this request ! * (if any) ! * @param request The HTTP request we are processing ! * @param response The HTTP response we are creating ! * @return An ActionForward instance to either their ! * inbox or the view. ! * @throws Exception if the application business logic throws an ! * exception */ public ActionForward execute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception { *************** *** 112,116 **** ActionsUtil.checkSession(request); ! final FolderForm folderForm = (FolderForm)form; // Get the current Folder --- 107,111 ---- ActionsUtil.checkSession(request); ! final FolderForm folderForm = (FolderForm) form; // Get the current Folder *************** *** 123,126 **** --- 118,126 ---- } + final HttpSession session = request.getSession(); + final User user = Util.getUser(session); + final PreferencesProvider pp = (PreferencesProvider) getServlet().getServletContext().getAttribute(Constants.PREFERENCES_PROVIDER); + final Properties prefs = pp.getPreferences(user, session); + // Get valid Messages in the folder final List messageList; *************** *** 128,132 **** final Message[] messages; ! final SearchTerm searchTerms = buildSearchFilter(folderForm.getFilterType(), folderForm.getFilter(), addressBookList); if (searchTerms != null) { messages = folder.search(searchTerms); --- 128,132 ---- final Message[] messages; ! final SearchTerm searchTerms = buildSearchFilter(folderForm.getFilterType(), folderForm.getFilter(), addressBookList, prefs); if (searchTerms != null) { messages = folder.search(searchTerms); *************** *** 148,155 **** prefetchMessageEnvelopeUID(messageList, folder); - final HttpSession session = request.getSession(); - final User user = Util.getUser(session); - final PreferencesProvider pp = (PreferencesProvider)getServlet().getServletContext().getAttribute(Constants.PREFERENCES_PROVIDER); - final Properties prefs = pp.getPreferences(user, session); if (Boolean.valueOf(prefs.getProperty("folder.list.threading", "false")).booleanValue()) { prefetchThreadingMessageHeaders(messageList, folder); --- 148,151 ---- *************** *** 193,198 **** * <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. --- 189,194 ---- * <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. *************** *** 206,210 **** fp.add(FetchProfile.Item.ENVELOPE); fp.add(UIDFolder.FetchProfileItem.UID); ! final Message[] msgs = (Message[])messageList.toArray(new Message[] {}); folder.fetch(msgs, fp); } --- 202,206 ---- fp.add(FetchProfile.Item.ENVELOPE); fp.add(UIDFolder.FetchProfileItem.UID); ! final Message[] msgs = (Message[]) messageList.toArray(new Message[]{}); folder.fetch(msgs, fp); } *************** *** 214,219 **** * for each {@link Message}. All messages in <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. --- 210,215 ---- * for each {@link Message}. All messages in <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. *************** *** 228,232 **** fp.add("References"); fp.add("In-Reply-To"); ! final Message[] msgs = (Message[])messageList.toArray(new Message[] {}); folder.fetch(msgs, fp); } --- 224,228 ---- fp.add("References"); fp.add("In-Reply-To"); ! final Message[] msgs = (Message[]) messageList.toArray(new Message[]{}); folder.fetch(msgs, fp); } *************** *** 236,241 **** * {@link Message}. All messages in <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. --- 232,237 ---- * {@link Message}. All messages in <code>messageList</code> must be from <code>folder</code>. * ! * @param messageList the list of {@link Message} objects. ! * @param folder the folder for which to prefetch from. * @throws MessagingException if there is a problem with {@link * Folder#fetch}. *************** *** 250,254 **** fp.add("X-Spam-Level"); //fp.add("X-Spam-Status"); ! final Message[] msgs = (Message[])messageList.toArray(new Message[] {}); folder.fetch(msgs, fp); } --- 246,250 ---- fp.add("X-Spam-Level"); //fp.add("X-Spam-Status"); ! final Message[] msgs = (Message[]) messageList.toArray(new Message[]{}); folder.fetch(msgs, fp); } *************** *** 259,263 **** while (iter.hasNext()) { try { ! if (flagMessageWithAttachments((Message)iter.next())) { msgsFlagged++; } --- 255,259 ---- while (iter.hasNext()) { try { ! if (flagMessageWithAttachments((Message) iter.next())) { msgsFlagged++; } *************** *** 274,278 **** /** - * * @param message The message to look for atachments in. * @return true if the message was flagged. --- 270,273 ---- *************** *** 295,299 **** } else if (message.isMimeType("multipart/*")) { try { ! final MimeMultipart mmp = (MimeMultipart)message.getContent(); hasAttachment = Util.hasAttachment(mmp); } catch (Exception e) { --- 290,294 ---- } else if (message.isMimeType("multipart/*")) { try { ! final MimeMultipart mmp = (MimeMultipart) message.getContent(); hasAttachment = Util.hasAttachment(mmp); } catch (Exception e) { *************** *** 318,322 **** } ! private static SearchTerm buildSearchFilter(final String type, final String filter, final List addressBookList) { SearchTerm searchTerm = null; if (filter == null || type == null) { --- 313,317 ---- } ! private static SearchTerm buildSearchFilter(final String type, final String filter, final List addressBookList, final Properties prefs) { SearchTerm searchTerm = null; if (filter == null || type == null) { *************** *** 374,378 **** final FromEmailTerm[] fromAddresses = new FromEmailTerm[addressBookList.size()]; for (int i = 0; i < fromAddresses.length; i++) { ! fromAddresses[i] = new FromEmailTerm((InternetAddress)addressBookList.get(i)); } searchTerm = new OrTerm(fromAddresses); --- 369,373 ---- final FromEmailTerm[] fromAddresses = new FromEmailTerm[addressBookList.size()]; for (int i = 0; i < fromAddresses.length; i++) { ! fromAddresses[i] = new FromEmailTerm((InternetAddress) addressBookList.get(i)); } searchTerm = new OrTerm(fromAddresses); *************** *** 384,395 **** final FromEmailTerm[] fromAddresses = new FromEmailTerm[addressBookList.size()]; for (int i = 0; i < fromAddresses.length; i++) { ! fromAddresses[i] = new FromEmailTerm((InternetAddress)addressBookList.get(i)); } searchTerm = new NotTerm(new OrTerm(fromAddresses)); } } return searchTerm; } private static class AttachmentTerm extends SearchTerm { public boolean match(final Message message) { --- 379,415 ---- final FromEmailTerm[] fromAddresses = new FromEmailTerm[addressBookList.size()]; for (int i = 0; i < fromAddresses.length; i++) { ! fromAddresses[i] = new FromEmailTerm((InternetAddress) addressBookList.get(i)); } searchTerm = new NotTerm(new OrTerm(fromAddresses)); } + + } else if (type.equals("flaggedJunk")) { + final String junkPattern = buildJunkPattern(prefs); + if (junkPattern != null) { + searchTerm = new HeaderTerm("X-Spam-Level", junkPattern); + } + + + } else if (type.equals("notFlaggedJunk")) { + final String junkPattern = buildJunkPattern(prefs); + if (junkPattern != null) { + searchTerm = new NotTerm(new HeaderTerm("X-Spam-Level", junkPattern)); + } + } return searchTerm; } + private static String buildJunkPattern(final Properties prefs) { + final int junkThreashold = Integer.valueOf(prefs.getProperty("message.junk.threashold", "8")).intValue(); + final String junkPattern; + if (junkThreashold > 0) { + junkPattern = "***************************************".substring(0, junkThreashold); + } else { + junkPattern = null; + } + return junkPattern; + } + private static class AttachmentTerm extends SearchTerm { public boolean match(final Message message) { *************** *** 423,428 **** for (int i = 0; i < address.length; i++) { if (address[i] instanceof InternetAddress) { ! final InternetAddress iAddr = (InternetAddress)address[i]; ! if (iAddr.getAddress().toLowerCase().equals(((InternetAddress)getAddress()).getAddress().toLowerCase())) { return true; } --- 443,448 ---- for (int i = 0; i < address.length; i++) { if (address[i] instanceof InternetAddress) { ! final InternetAddress iAddr = (InternetAddress) address[i]; ! if (iAddr.getAddress().toLowerCase().equals(((InternetAddress) getAddress()).getAddress().toLowerCase())) { return true; } |