Coverage Report - org.galagosearch.tupleflow.SequentialCombiner
 
Classes in this File Line Coverage Branch Coverage Complexity
SequentialCombiner
0%
0/37
0%
0/14
0
 
 1  
 // BSD License (http://www.galagosearch.org/license)
 2  
 package org.galagosearch.tupleflow;
 3  
 
 4  
 import java.io.IOException;
 5  
 import java.util.ArrayList;
 6  
 import java.util.List;
 7  
 import java.util.logging.Logger;
 8  
 
 9  
 /**
 10  
  *
 11  
  * @author trevor
 12  
  */
 13  
 public class SequentialCombiner<T> implements ExNihiloSource<T>, TypeReader<T> {
 14  
     ArrayList<String> filenames;
 15  
     Order<T> order;
 16  
     FileOrderedReader<T> active;
 17  
     public Processor<T> processor;
 18  0
     boolean closeOnExit = true;
 19  
     Logger logger;
 20  
 
 21  
     /** Creates a new instance of SequentialCombiner */
 22  0
     public SequentialCombiner(List<String> filenames, Order<T> order) {
 23  0
         this.filenames = new ArrayList<String>(filenames);
 24  0
         this.order = order;
 25  0
         this.logger = Logger.getLogger(SequentialCombiner.class.toString());
 26  0
     }
 27  
 
 28  
     public Class<T> getOutputClass() {
 29  0
         return order.getOrderedClass();
 30  
     }
 31  
 
 32  
     public void setProcessor(Step processor) throws IncompatibleProcessorException {
 33  0
         Linkage.link(this, processor);
 34  0
     }
 35  
 
 36  
     public void run() throws IOException {
 37  0
         logger.info("Starting");
 38  
 
 39  0
         for (String filename : filenames) {
 40  0
             logger.info("Opening: " + filename);
 41  0
             FileOrderedReader<T> reader = new FileOrderedReader<T>(filename, order);
 42  
             T object;
 43  
 
 44  0
             while ((object = reader.read()) != null) {
 45  0
                 processor.process(object);
 46  
             }
 47  
 
 48  0
             reader.close();
 49  0
             logger.info("Closing: " + filename);
 50  0
         }
 51  
 
 52  0
         logger.info("Finished");
 53  0
         if (closeOnExit) {
 54  0
             processor.close();
 55  
         }
 56  0
     }
 57  
 
 58  
     public static <S> SequentialCombiner<S> combineFromFiles(
 59  
             List<String> filenames,
 60  
             Order<S> order) throws IOException {
 61  0
         return new SequentialCombiner<S>(filenames, order);
 62  
     }
 63  
 
 64  
     public T read() throws IOException {
 65  0
         if (active == null) {
 66  0
             if (filenames.size() == 0) {
 67  0
                 logger.info("Complete");
 68  0
                 return null;
 69  
             } else {
 70  0
                 logger.info("Opening: " + filenames.get(0));
 71  0
                 active = new FileOrderedReader<T>(filenames.get(0), order);
 72  0
                 filenames.remove(0);
 73  
             }
 74  
         }
 75  
 
 76  0
         T object = active.read();
 77  
 
 78  0
         while (object == null && filenames.size() > 0) {
 79  0
             logger.info("Opening: " + filenames.get(0));
 80  0
             active = new FileOrderedReader<T>(filenames.get(0), order);
 81  0
             filenames.remove(0);
 82  0
             object = active.read();
 83  
         }
 84  
 
 85  0
         return object;
 86  
     }
 87  
 }