Author: norman
Date: Sun Jun 12 07:13:21 2011
New Revision: 1134875

URL: http://svn.apache.org/viewvc?rev=1134875&view=rev
Log:
Now search for recent also work. So its complete. See MAILBOX-10

Modified:
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java?rev=1134875&r1=1134874&r2=1134875&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/lucene/LuceneMessageSearchIndex.java
 Sun Jun 12 07:13:21 2011
@@ -26,6 +26,7 @@ import java.io.StringReader;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -410,7 +411,7 @@ public class LuceneMessageSearchIndex<Id
             query.add(new PrefixQuery(new Term(FLAGS_FIELD, "")), 
BooleanClause.Occur.MUST_NOT);
             List<Criterion> crits = searchQuery.getCriterias();
             for (int i = 0; i < crits.size(); i++) {
-                query.add(createQuery(crits.get(i), mailbox), 
BooleanClause.Occur.MUST);
+                query.add(createQuery(crits.get(i), mailbox, 
searchQuery.getRecentMessageUids()), BooleanClause.Occur.MUST);
             }
              
             System.err.println(query.toString());
@@ -879,7 +880,7 @@ public class LuceneMessageSearchIndex<Id
      * @return query
      * @throws UnsupportedSearchException
      */
-    private Query createFlagQuery(String flag, boolean isSet, Mailbox<?> 
mailbox) throws MailboxException, UnsupportedSearchException {
+    private Query createFlagQuery(String flag, boolean isSet, Mailbox<?> 
mailbox, Collection<Long> recentUids) throws MailboxException, 
UnsupportedSearchException {
         BooleanQuery query = new BooleanQuery();
         
         if (isSet) {   
@@ -898,7 +899,7 @@ public class LuceneMessageSearchIndex<Id
         IndexSearcher searcher = null;
 
         try {
-            List<Long> uids = new ArrayList<Long>();
+            Set<Long> uids = new HashSet<Long>();
             searcher = new IndexSearcher(IndexReader.open(writer, true));
             
             // query for all the documents sorted by uid
@@ -909,7 +910,16 @@ public class LuceneMessageSearchIndex<Id
                 uids.add(uid);
             }
             
-            List<MessageRange> ranges = MessageRange.toRanges(uids);
+            // add or remove recent uids
+            if (flag.equalsIgnoreCase("\\RECENT")){
+                if (isSet) {
+                    uids.addAll(recentUids);
+                } else {
+                    uids.removeAll(recentUids);
+                }
+            }
+            
+            List<MessageRange> ranges = MessageRange.toRanges(new 
ArrayList<Long>(uids));
             NumericRange[] nRanges = new NumericRange[ranges.size()];
             for (int i = 0; i < ranges.size(); i++) {
                 MessageRange range = ranges.get(i);
@@ -1098,24 +1108,24 @@ public class LuceneMessageSearchIndex<Id
      * @return query
      * @throws UnsupportedSearchException
      */
-    private Query createConjunctionQuery(SearchQuery.ConjunctionCriterion 
crit, Mailbox<?> mailbox) throws UnsupportedSearchException, MailboxException {
+    private Query createConjunctionQuery(SearchQuery.ConjunctionCriterion 
crit, Mailbox<?> mailbox, Collection<Long> recentUids) throws 
UnsupportedSearchException, MailboxException {
         List<Criterion> crits = crit.getCriteria();
         BooleanQuery conQuery = new BooleanQuery();
         switch (crit.getType()) {
         case AND:
             for (int i = 0; i < crits.size(); i++) {
-                conQuery.add(createQuery(crits.get(i), mailbox), 
BooleanClause.Occur.MUST);
+                conQuery.add(createQuery(crits.get(i), mailbox, recentUids), 
BooleanClause.Occur.MUST);
             }
             return conQuery;
         case OR:
             for (int i = 0; i < crits.size(); i++) {
-                conQuery.add(createQuery(crits.get(i), mailbox), 
BooleanClause.Occur.SHOULD);
+                conQuery.add(createQuery(crits.get(i), mailbox, recentUids), 
BooleanClause.Occur.SHOULD);
             }
             return conQuery;
         case NOR:
             BooleanQuery nor = new BooleanQuery();
             for (int i = 0; i < crits.size(); i++) {
-                conQuery.add(createQuery(crits.get(i), mailbox), 
BooleanClause.Occur.SHOULD);
+                conQuery.add(createQuery(crits.get(i), mailbox, recentUids), 
BooleanClause.Occur.SHOULD);
             }
             nor.add(new TermQuery(new Term(MAILBOX_ID_FIELD, 
mailbox.getMailboxId().toString())), BooleanClause.Occur.MUST);
 
@@ -1134,7 +1144,7 @@ public class LuceneMessageSearchIndex<Id
      * @return query
      * @throws UnsupportedSearchException
      */
-    private Query createQuery(Criterion criterion, Mailbox<?> mailbox) throws 
UnsupportedSearchException, MailboxException {
+    private Query createQuery(Criterion criterion, Mailbox<?> mailbox, 
Collection<Long> recentUids) throws UnsupportedSearchException, 
MailboxException {
         if (criterion instanceof SearchQuery.InternalDateCriterion) {
             SearchQuery.InternalDateCriterion crit = 
(SearchQuery.InternalDateCriterion) criterion;
             return createInternalDateQuery(crit);
@@ -1149,10 +1159,10 @@ public class LuceneMessageSearchIndex<Id
             return createUidQuery(crit);
         } else if (criterion instanceof SearchQuery.FlagCriterion) {
             FlagCriterion crit = (FlagCriterion) criterion;
-            return createFlagQuery(toString(crit.getFlag()), 
crit.getOperator().isSet(), mailbox);
+            return createFlagQuery(toString(crit.getFlag()), 
crit.getOperator().isSet(), mailbox, recentUids);
         } else if (criterion instanceof SearchQuery.CustomFlagCriterion) {
             CustomFlagCriterion crit = (CustomFlagCriterion) criterion;
-            return createFlagQuery(crit.getFlag(), crit.getOperator().isSet(), 
mailbox);
+            return createFlagQuery(crit.getFlag(), crit.getOperator().isSet(), 
mailbox, recentUids);
         } else if (criterion instanceof SearchQuery.TextCriterion) {
             SearchQuery.TextCriterion crit = (SearchQuery.TextCriterion) 
criterion;
             return createTextQuery(crit);
@@ -1160,7 +1170,7 @@ public class LuceneMessageSearchIndex<Id
             return createAllQuery((AllCriterion) criterion);
         } else if (criterion instanceof SearchQuery.ConjunctionCriterion) {
             SearchQuery.ConjunctionCriterion crit = 
(SearchQuery.ConjunctionCriterion) criterion;
-            return createConjunctionQuery(crit, mailbox);
+            return createConjunctionQuery(crit, mailbox, recentUids);
         } else if (criterion instanceof SearchQuery.ModSeqCriterion) {
             return createModSeqQuery((SearchQuery.ModSeqCriterion) criterion);
         }
@@ -1243,8 +1253,10 @@ public class LuceneMessageSearchIndex<Id
      * @param f
      */
     private void indexFlags(Document doc, Flags f) {
+        List<String> fString = new ArrayList<String>();
         Flag[] flags = f.getSystemFlags();
         for (int a = 0; a < flags.length; a++) {
+            fString.add(toString(flags[a]));
             doc.add(new Field(FLAGS_FIELD, toString(flags[a]),Store.NO, 
Index.NOT_ANALYZED));
         }
         
@@ -1257,6 +1269,8 @@ public class LuceneMessageSearchIndex<Id
         if (flags.length == 0 && userFlags.length == 0) {
             doc.add(new Field(FLAGS_FIELD, "",Store.NO, Index.NOT_ANALYZED));
         }
+        
+        System.out.println(fString.toString());
     }
     
     private Query createQuery(MessageRange range) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to