Project

General

Profile

1 31354 sandro.lab
package eu.dnetlib.msro.workflows.nodes.mdstore;
2
3
import java.util.Iterator;
4
import java.util.List;
5
6 32746 andrea.man
import javax.annotation.Resource;
7 31354 sandro.lab
import javax.xml.ws.wsaddressing.W3CEndpointReference;
8
9 33252 sandro.lab
import org.apache.commons.logging.Log;
10
import org.apache.commons.logging.LogFactory;
11 31354 sandro.lab
import org.springframework.beans.factory.annotation.Autowired;
12
13
import eu.dnetlib.data.mdstore.MDStoreService;
14
import eu.dnetlib.data.mdstore.MDStoreServiceException;
15 32639 michele.ar
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
16 31354 sandro.lab
import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
17
18
// TODO: Auto-generated Javadoc
19
/**
20
 * The Class MultipleMdStoreIterator.
21
 */
22 33252 sandro.lab
public class MultipleMdStoreIterator implements Iterator<String> {
23 31354 sandro.lab
24 33252 sandro.lab
	private static final Log log = LogFactory.getLog(MultipleMdStoreIterator.class); // NOPMD by marko on 11/24/08 5:02 PM
25
26 32639 michele.ar
	/** The service locator. */
27 32746 andrea.man
	@Resource
28 32639 michele.ar
	private UniqueServiceLocator serviceLocator;
29 31354 sandro.lab
30
	/** The md i ds. */
31
	private List<String> mdIDs;
32
33
	/** The current id. */
34
	private String currentId = null;
35
36
	/** The current iterator. */
37
	private Iterator<String> currentIterator;
38
39
	/** The result set client factory. */
40
	@Autowired
41
	private ResultSetClientFactory resultSetClientFactory;
42
43
	/**
44
	 * Instantiates a new multiple md store iterator.
45 33252 sandro.lab
	 *
46 31354 sandro.lab
	 * @param mdstoreLocator
47
	 *            the mdstore locator
48
	 * @param mdIds
49
	 *            the md ids
50
	 */
51 33252 sandro.lab
	public MultipleMdStoreIterator(final UniqueServiceLocator serviceLocator, final List<String> mdIds, final ResultSetClientFactory resultSetClientFactory) {
52 32639 michele.ar
		this.serviceLocator = serviceLocator;
53 31354 sandro.lab
		this.mdIDs = mdIds;
54
		this.resultSetClientFactory = resultSetClientFactory;
55
		getNextMDStoreRecords();
56
57
	}
58
59
	/*
60
	 * (non-Javadoc)
61 32877 michele.ar
	 *
62 31354 sandro.lab
	 * @see java.util.Iterator#hasNext()
63
	 */
64
	@Override
65
	public boolean hasNext() {
66 32639 michele.ar
		if (currentId == null || currentIterator == null) { return false; }
67 31354 sandro.lab
		return currentIterator.hasNext();
68
	}
69
70
	/*
71
	 * (non-Javadoc)
72 32877 michele.ar
	 *
73 31354 sandro.lab
	 * @see java.util.Iterator#next()
74
	 */
75
	@Override
76
	public String next() {
77 33252 sandro.lab
		String nextElement = currentIterator.next();
78
		if (!currentIterator.hasNext()) {
79
			getNextMDStoreRecords();
80
		}
81
		return nextElement;
82 31354 sandro.lab
	}
83
84
	/*
85
	 * (non-Javadoc)
86 32877 michele.ar
	 *
87 31354 sandro.lab
	 * @see java.util.Iterator#remove()
88
	 */
89
	@Override
90
	public void remove() {
91
		currentIterator.remove();
92
	}
93
94
	/**
95
	 * Gets the next md store records.
96 33252 sandro.lab
	 *
97 31354 sandro.lab
	 * @return the next md store records
98
	 */
99
	private void getNextMDStoreRecords() {
100
		if (mdIDs.size() > 0) {
101
			currentId = mdIDs.remove(0);
102
			currentIterator = getIterableResultset(currentId);
103
		}
104
	}
105
106
	/**
107
	 * Gets the iterable resultset.
108 33252 sandro.lab
	 *
109 31354 sandro.lab
	 * @param id
110
	 *            the id
111
	 * @return the iterable resultset
112
	 */
113
	private Iterator<String> getIterableResultset(final String id) {
114
		try {
115 32877 michele.ar
			W3CEndpointReference epr = serviceLocator.getService(MDStoreService.class, id).deliverMDRecords(id, "", "", "");
116 31354 sandro.lab
			Iterable<String> input = resultSetClientFactory.getClient(epr);
117
			return input.iterator();
118
		} catch (MDStoreServiceException e) {
119 33252 sandro.lab
			log.error(e);
120 31354 sandro.lab
			return null;
121
		}
122
	}
123
}