Project

General

Profile

1
package eu.dnetlib.msro.workflows.nodes.mdstore;
2

    
3
import java.util.Iterator;
4
import java.util.List;
5

    
6
import javax.annotation.Resource;
7
import javax.xml.ws.wsaddressing.W3CEndpointReference;
8

    
9
import org.apache.commons.logging.Log;
10
import org.apache.commons.logging.LogFactory;
11
import org.springframework.beans.factory.annotation.Autowired;
12

    
13
import eu.dnetlib.data.mdstore.MDStoreService;
14
import eu.dnetlib.data.mdstore.MDStoreServiceException;
15
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
16
import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
17

    
18
// TODO: Auto-generated Javadoc
19
/**
20
 * The Class MultipleMdStoreIterator.
21
 */
22
public class MultipleMdStoreIterator implements Iterator<String> {
23

    
24
	private static final Log log = LogFactory.getLog(MultipleMdStoreIterator.class); // NOPMD by marko on 11/24/08 5:02 PM
25

    
26
	/** The service locator. */
27
	@Resource
28
	private UniqueServiceLocator serviceLocator;
29

    
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
	 *
46
	 * @param mdstoreLocator
47
	 *            the mdstore locator
48
	 * @param mdIds
49
	 *            the md ids
50
	 */
51
	public MultipleMdStoreIterator(final UniqueServiceLocator serviceLocator, final List<String> mdIds, final ResultSetClientFactory resultSetClientFactory) {
52
		this.serviceLocator = serviceLocator;
53
		this.mdIDs = mdIds;
54
		this.resultSetClientFactory = resultSetClientFactory;
55
		getNextMDStoreRecords();
56

    
57
	}
58

    
59
	/*
60
	 * (non-Javadoc)
61
	 * 
62
	 * @see java.util.Iterator#hasNext()
63
	 */
64
	@Override
65
	public boolean hasNext() {
66
		if (currentId == null || currentIterator == null) { return false; }
67
		return currentIterator.hasNext();
68
	}
69

    
70
	/*
71
	 * (non-Javadoc)
72
	 * 
73
	 * @see java.util.Iterator#next()
74
	 */
75
	@Override
76
	public String next() {
77
		String nextElement = currentIterator.next();
78
		if (!currentIterator.hasNext()) {
79
			getNextMDStoreRecords();
80
		}
81
		return nextElement;
82
	}
83

    
84
	/*
85
	 * (non-Javadoc)
86
	 * 
87
	 * @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
	 *
97
	 * @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
	 *
109
	 * @param id
110
	 *            the id
111
	 * @return the iterable resultset
112
	 */
113
	private Iterator<String> getIterableResultset(final String id) {
114
		try {
115
			W3CEndpointReference epr = serviceLocator.getService(MDStoreService.class, id).deliverMDRecords(id, "", "", "");
116
			Iterable<String> input = resultSetClientFactory.getClient(epr);
117
			return input.iterator();
118
		} catch (MDStoreServiceException e) {
119
			log.error(e);
120
			return null;
121
		}
122
	}
123
}
(4-4/5)