Project

General

Profile

1 26600 sandro.lab
package eu.dnetlib.data.collector;
2
3
import java.util.List;
4 33215 michele.ar
import java.util.Map;
5 28819 michele.ar
import java.util.Set;
6 26600 sandro.lab
7
import javax.annotation.Resource;
8
import javax.xml.ws.wsaddressing.W3CEndpointReference;
9
10
import com.google.common.collect.Lists;
11 28819 michele.ar
import com.google.common.collect.Sets;
12 26600 sandro.lab
13
import eu.dnetlib.data.collector.plugin.CollectorPlugin;
14
import eu.dnetlib.data.collector.rmi.CollectorService;
15
import eu.dnetlib.data.collector.rmi.CollectorServiceException;
16
import eu.dnetlib.data.collector.rmi.InterfaceDescriptor;
17 28819 michele.ar
import eu.dnetlib.data.collector.rmi.ProtocolDescriptor;
18 33215 michele.ar
import eu.dnetlib.data.collector.rmi.ProtocolParameter;
19
import eu.dnetlib.data.collector.rmi.ProtocolParameterValue;
20 26600 sandro.lab
import eu.dnetlib.enabling.resultset.IterableResultSetFactory;
21
import eu.dnetlib.enabling.tools.AbstractBaseService;
22
23
public class CollectorServiceImpl extends AbstractBaseService implements CollectorService {
24
25
	@Resource
26
	private CollectorPluginEnumerator collectorPluginEnumerator;
27 33202 michele.ar
28 26600 sandro.lab
	@Resource
29
	private IterableResultSetFactory iterableResultSetFactory;
30
31
	@Override
32
	public W3CEndpointReference collect(final InterfaceDescriptor ifDescriptor) throws CollectorServiceException {
33 27311 michele.ar
		return dateRangeCollect(ifDescriptor, null, null);
34
	}
35
36
	@Override
37
	public W3CEndpointReference dateRangeCollect(
38 33202 michele.ar
			final InterfaceDescriptor ifDescriptor, final String from, final String until)
39 27311 michele.ar
			throws CollectorServiceException {
40 26600 sandro.lab
		final CollectorPlugin plugin = collectorPluginEnumerator.get(ifDescriptor.getProtocol());
41 33202 michele.ar
42
		if (!verifyParams(ifDescriptor.getParams().keySet(), Sets.newHashSet(plugin.listNameParameters()))) { throw new CollectorServiceException(
43
				"Invalid parameters, valid: " + plugin.listNameParameters() + ", current: " + ifDescriptor.getParams().keySet()); }
44
45 27311 michele.ar
		final Iterable<String> iter = plugin.collect(ifDescriptor, from, until);
46 33202 michele.ar
47 28808 sandro.lab
		return iterableResultSetFactory.createIterableResultSet(iter);
48 26600 sandro.lab
	}
49
50
	@Override
51 28819 michele.ar
	public List<ProtocolDescriptor> listProtocols() {
52
		final List<ProtocolDescriptor> list = Lists.newArrayList();
53 33202 michele.ar
		for (CollectorPlugin plugin : collectorPluginEnumerator.getAll()) {
54
			list.add(plugin.getProtocolDescriptor());
55 28819 michele.ar
		}
56
		return list;
57 26600 sandro.lab
	}
58
59 33215 michele.ar
	@Override
60
	public List<ProtocolParameterValue> listValidValuesForParam(final String protocol,
61
			final String baseUrl,
62
			final String param,
63
			final Map<String, String> otherParams) throws CollectorServiceException {
64
		final CollectorPlugin plugin = collectorPluginEnumerator.get(protocol);
65
66
		for (ProtocolParameter pp : plugin.getProtocolDescriptor().getParams()) {
67
			if (pp.getName().equals(param) && pp.isFunctionPopulated()) { return pp.getPopulateFunction().findValues(baseUrl, otherParams); }
68
		}
69
70
		return Lists.newArrayList();
71
	}
72
73 28819 michele.ar
	private boolean verifyParams(final Set<String> curr, final Set<String> valid) {
74 28885 michele.ar
		return valid.containsAll(curr);
75 28819 michele.ar
	}
76
77 26600 sandro.lab
}