package org.solrmarc.marc; import java.util.Collection; import java.util.Iterator; import org.apache.log4j.Logger; import org.marc4j.MarcReader; import org.marc4j.marc.Record; public class MarcMultiplexReader implements MarcReader { private final static Logger logger = Logger.getLogger(MarcMultiplexReader.class); final Collection<MarcReader> readers; final Collection<String> readerNames; final Iterator<MarcReader> readerIterator; final Iterator<String> nameIterator; int readerCnt = 0; MarcReader curReader = null; // public MarcMultiplexReader(MarcReader ... marcReaders) // { // readers = Arrays.asList(marcReaders); // iterator = readers.iterator(); // } // public MarcMultiplexReader(final Collection<MarcReader> marcReaders, final Collection<String> readerNames) { readers = marcReaders; this.readerNames = readerNames; readerIterator = readers.iterator(); nameIterator = this.readerNames.iterator(); } @Override public boolean hasNext() { while (curReader == null || !curReader.hasNext()) { if (readerIterator.hasNext()) { String readerName = (nameIterator.hasNext()) ? nameIterator.next() : ""+readerCnt; logger.info("Switching to reader: "+readerName); curReader = readerIterator.next(); readerCnt++; } else { curReader = null; return(false); } } return(curReader.hasNext()); } @Override public Record next() { return(curReader.next()); } }