package eu.dnetlib.data.collector.plugins.datasets; import java.io.IOException; import java.util.Iterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * The Class DatasetsByProjectIterator. */ public class DatasetsByJournalIterator implements Iterable, Iterator { /** The current iterator. */ private Iterator currentIterator; /** The current project. */ private PangaeaJournalInfo currentJournal; private Iterator inputIterator; /** The logger. */ private static final Log log = LogFactory.getLog(DatasetsByProjectIterator.class); public DatasetsByJournalIterator(final Iterator iterator) { this.inputIterator = iterator; this.currentJournal = extractNextLine(); } /* * (non-Javadoc) * * @see java.util.Iterator#hasNext() */ @Override public boolean hasNext() { // CASE WHEN WE REACH THE LAST ITEM ON CSV // OR WE HAD SOME PROBLEM ON GET NEXT CSV ITEM if (this.currentJournal == null) { return false; } // IN THIS CASE WE HAVE ANOTHER DATASETS // FOR THE CURRENT PROJECT AND RETURN TRUE if (currentIterator != null && currentIterator.hasNext()) { return true; } // OTHERWISE WE FINISHED TO ITERATE THE CURRENT // SETS OF DATASETS FOR A PARTICULAR PROJECT // SO WE HAVE TO RETRIEVE THE NEXT ITERATOR WITH // ITEMS this.currentJournal = extractNextLine(); while (this.currentJournal != null) { currentIterator = getNextIterator(); // IF THE NEXT ITERATOR HAS ITEMS RETURN YES // OTHERWISE THE CICLE CONTINUE if (currentIterator.hasNext()) { return true; } this.currentJournal = extractNextLine(); } return false; } /* * (non-Javadoc) * * @see java.util.Iterator#next() */ @Override public String next() { return this.currentIterator.next(); } /* * (non-Javadoc) * * @see java.util.Iterator#remove() */ @Override public void remove() {} /* * (non-Javadoc) * * @see java.lang.Iterable#iterator() */ @Override public Iterator iterator() { if (this.currentJournal != null) { currentIterator = getNextIterator(); return this; } return null; } private Iterator getNextIterator() { QueryField q = new QueryField(); RequestField r = new RequestField(); r.setQuery(q); q.getTerm().put("ft-techkeyword", this.currentJournal.getJournalId()); return new DatasetsIterator(r, "", this.currentJournal).iterator(); } /** * Extract next line. * * @return the map * @throws IOException * Signals that an I/O exception has occurred. */ private PangaeaJournalInfo extractNextLine() { if (this.inputIterator.hasNext() == false) { return null; } return this.inputIterator.next(); } }