View Javadoc

1   package com.atlassian.bonnie.index;
2   
3   import java.util.Collection;
4   
5   /**
6    * Pops objects off an {@link ObjectQueue}, processes them (via {@link ObjectQueue.Processor},
7    * then writes them using {@link BatchOpIndexer.DocumentWritingScheme}.
8    */
9   public final class QueueProcessingRunnableImpl implements QueueProcessingRunnable
10  {
11      private ObjectQueue objectQueue;
12      private BatchOpIndexer.DocumentWritingScheme documentWritingScheme;
13      private ObjectQueue.Processor processor;
14  
15      public QueueProcessingRunnableImpl()
16      {
17      }
18  
19      public QueueProcessingRunnableImpl(ObjectQueue objectQueue, BatchOpIndexer.DocumentWritingScheme documentWritingScheme)
20      {
21          setObjectQueue(objectQueue);
22          setDocumentWritingScheme(documentWritingScheme);
23      }
24  
25      public final void run()
26      {
27          Collection collection = null;
28          while (true)
29          {
30              synchronized (objectQueue)
31              {
32                  if (objectQueue.hasMore())
33                  {
34                      collection = objectQueue.pop();
35                  }
36                  else break;
37              }
38  
39              processor.indexCollection(collection, documentWritingScheme);
40          }
41          documentWritingScheme.runComplete();
42      }
43  
44      public void setObjectQueue(ObjectQueue objectQueue)
45      {
46          this.objectQueue = objectQueue;
47          this.processor = objectQueue.getProcessor();
48      }
49  
50      public void setDocumentWritingScheme(BatchOpIndexer.DocumentWritingScheme documentWritingScheme)
51      {
52          this.documentWritingScheme = documentWritingScheme;
53      }
54  }