Project

General

Profile

1 52614 miriam.bag
package eu.dnetlib.data.collector.plugins.httpfilename;
2
3
import org.apache.commons.logging.Log;
4
import org.apache.commons.logging.LogFactory;
5
6
import java.util.Iterator;
7
import java.util.NoSuchElementException;
8
import java.util.Objects;
9
import java.util.concurrent.ArrayBlockingQueue;
10
import java.util.concurrent.TimeUnit;
11
12
/**
13
 * Created by miriam on 25/06/2018.
14
 */
15
public class HttpWithFileNameCollectorIterator implements Iterator<String> {
16
    public static final String TERMINATOR = "FINITO";
17
    private static final Log log = LogFactory.getLog(HttpWithFileNameCollectorIterator.class);
18
19
     private final ArrayBlockingQueue<String> queue;
20
21
    public static final long waitTime = 60L;
22
23 52618 miriam.bag
    private String last = "<resource><DOI>JUNK</DOI></resource>";
24 52614 miriam.bag
25
    public HttpWithFileNameCollectorIterator(ArrayBlockingQueue<String> queue) {
26
        this.queue = queue;
27
        extractFromQueue();
28
    }
29
30
    @Override
31
        public boolean hasNext() {
32
33
34 53652 miriam.bag
            //return !(Objects.equals(last, TERMINATOR) || Objects.equals(last,null));
35
            return !(Objects.equals(last, TERMINATOR));
36 52614 miriam.bag
        }
37
38
        @Override
39
        public String next() {
40
            try{
41
42
                return last;
43
44
            }finally{
45
                extractFromQueue();
46
            }
47
48
        }
49
50
    private void extractFromQueue() {
51 53654 miriam.bag
52
53
        try {
54
            last = queue.take();
55 53652 miriam.bag
            //last = queue.poll(waitTime, TimeUnit.SECONDS);
56 53654 miriam.bag
        }catch(InterruptedException e){
57
            log.warn("Interrupted while waiting for element to consume");
58 52614 miriam.bag
            throw new NoSuchElementException(e.getMessage());
59 53654 miriam.bag
        }
60 52614 miriam.bag
    }
61
62
63
}