Project

General

Profile

1
package eu.dnetlib.data.collector;
2

    
3
import java.util.List;
4
import java.util.Map;
5
import java.util.Set;
6

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

    
10
import com.google.common.collect.Lists;
11
import com.google.common.collect.Sets;
12

    
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
import eu.dnetlib.data.collector.rmi.ProtocolDescriptor;
18
import eu.dnetlib.data.collector.rmi.ProtocolParameter;
19
import eu.dnetlib.data.collector.rmi.ProtocolParameterValue;
20
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

    
28
	@Resource
29
	private IterableResultSetFactory iterableResultSetFactory;
30

    
31
	@Override
32
	public W3CEndpointReference collect(final InterfaceDescriptor ifDescriptor) throws CollectorServiceException {
33
		return dateRangeCollect(ifDescriptor, null, null);
34
	}
35

    
36
	@Override
37
	public W3CEndpointReference dateRangeCollect(
38
			final InterfaceDescriptor ifDescriptor, final String from, final String until)
39
			throws CollectorServiceException {
40
		final CollectorPlugin plugin = collectorPluginEnumerator.get(ifDescriptor.getProtocol());
41

    
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
		final Iterable<String> iter = plugin.collect(ifDescriptor, from, until);
46

    
47
		return iterableResultSetFactory.createIterableResultSet(iter);
48
	}
49

    
50
	@Override
51
	public List<ProtocolDescriptor> listProtocols() {
52
		final List<ProtocolDescriptor> list = Lists.newArrayList();
53
		for (CollectorPlugin plugin : collectorPluginEnumerator.getAll()) {
54
			list.add(plugin.getProtocolDescriptor());
55
		}
56
		return list;
57
	}
58

    
59
	@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
	private boolean verifyParams(final Set<String> curr, final Set<String> valid) {
74
		return valid.containsAll(curr);
75
	}
76

    
77
}
(2-2/2)