Project

General

Profile

« Previous | Next » 

Revision 61757

plugin for eosc services

View differences:

modules/dnet-collector-plugins/trunk/src/main/java/eu/dnetlib/data/collector/plugins/eosc/EoscServicesPlugin.java
1
package eu.dnetlib.data.collector.plugins.eosc;
2

  
3
import org.apache.commons.lang3.math.NumberUtils;
4
import org.apache.http.client.methods.CloseableHttpResponse;
5
import org.apache.http.client.methods.HttpGet;
6
import org.apache.http.impl.client.CloseableHttpClient;
7
import org.apache.http.impl.client.HttpClients;
8
import org.dom4j.Document;
9
import org.dom4j.DocumentHelper;
10
import org.dom4j.Element;
11
import org.dom4j.Node;
12
import org.dom4j.io.SAXReader;
13

  
14
import eu.dnetlib.data.collector.plugin.AbstractCollectorPlugin;
15
import eu.dnetlib.data.collector.rmi.CollectorServiceException;
16
import eu.dnetlib.data.collector.rmi.InterfaceDescriptor;
17

  
18
public class EoscServicesPlugin extends AbstractCollectorPlugin {
19

  
20
	@SuppressWarnings("unchecked")
21
	@Override
22
	public Iterable<String> collect(final InterfaceDescriptor interfaceDescriptor, final String fromDate, final String untilDate)
23
		throws CollectorServiceException {
24

  
25
		final String baseUrl = interfaceDescriptor.getBaseUrl();
26
		final long maxProviders = NumberUtils.toLong(interfaceDescriptor.getParams().get("maxProviders"), 10000);
27

  
28
		return () -> httpCall(baseUrl + "/provider/all?quantity=" + maxProviders)
29
			.selectNodes("/Paging/results/results")
30
			.stream()
31
			.map(o -> processProvider(baseUrl, (Node) o))
32
			.iterator();
33
	}
34

  
35
	private String processProvider(final String baseUrl, final Node nodeProv) {
36
		final String orgId = nodeProv.valueOf("./id");
37

  
38
		final Document newDoc = DocumentHelper.createDocument();
39
		final Element newRoot = DocumentHelper.createElement("record");
40

  
41
		newDoc.setRootElement(newRoot);
42

  
43
		nodeProv.setName("organization");
44
		newRoot.add(nodeProv.detach());
45

  
46
		final Document docSrvs = httpCall(baseUrl + "/provider/services/" + orgId);
47
		for (final Object o : docSrvs.selectNodes("/List/item")) {
48
			final Node nodeSrv = (Node) o;
49
			nodeSrv.setName("service");
50
			newRoot.add(nodeSrv.detach());
51
		}
52

  
53
		return newDoc.asXML();
54
	}
55

  
56
	private Document httpCall(final String url) {
57
		final SAXReader reader = new SAXReader();
58

  
59
		final HttpGet req = new HttpGet(url);
60
		req.addHeader("Accept", "application/xml");
61

  
62
		try (final CloseableHttpClient client = HttpClients.createDefault()) {
63
			try (final CloseableHttpResponse response = client.execute(req)) {
64
				return reader.read(response.getEntity().getContent());
65
			}
66
		} catch (final Exception e) {
67
			throw new RuntimeException(e);
68
		}
69
	}
70

  
71
}
modules/dnet-collector-plugins/trunk/src/main/resources/eu/dnetlib/data/collector/plugins/applicationContext-dnet-modular-collector-plugins.xml
216 216

  
217 217
	<bean id="crossrefResolver" class="eu.dnetlib.data.collector.plugins.doiresolver.CrossrefResolver"/>
218 218

  
219
	<bean id="eoscServicesCollectorPlugin" class="eu.dnetlib.data.collector.plugins.eosc.EoscServicesPlugin">
220
		<property name="protocolDescriptor">
221
			<bean class="eu.dnetlib.data.collector.rmi.ProtocolDescriptor" p:name="eosc_services">
222
				<property name="params">
223
					<list>
224
						<bean class="eu.dnetlib.data.collector.rmi.ProtocolParameter" 
225
							p:name="maxProviders"
226
							p:optional="true" 
227
							p:type="NUMBER" />
228
					</list>
229
				</property>
230
			</bean>
231
		</property>
232
	</bean>
233

  
234

  
219 235
</beans>
modules/dnet-collector-plugins/trunk/src/test/java/eu/dnetlib/data/collector/plugins/eosc/EoscServicesPluginTest.java
1
package eu.dnetlib.data.collector.plugins.eosc;
2

  
3
import org.junit.Ignore;
4
import org.junit.Test;
5

  
6
import eu.dnetlib.data.collector.rmi.CollectorServiceException;
7
import eu.dnetlib.data.collector.rmi.InterfaceDescriptor;
8

  
9
public class EoscServicesPluginTest {
10

  
11
	public static final String BASE_URL = "https://api.eosc-portal.eu";
12
	public static final long MAX_PROVIDERS = 1;
13

  
14
	@Test
15
	@Ignore
16
	public void testCollect() throws CollectorServiceException {
17
		final EoscServicesPlugin plugin = new EoscServicesPlugin();
18

  
19
		final InterfaceDescriptor desc = new InterfaceDescriptor();
20
		desc.setBaseUrl(BASE_URL);
21
		desc.getParams().put("maxProviders", Long.toString(MAX_PROVIDERS));
22

  
23
		int i = 1;
24
		for (final String s : plugin.collect(desc, null, null)) {
25
			System.out.println("************************");
26
			System.out.println("Record " + i++);
27
			System.out.println(s);
28
		}
29

  
30
	}
31

  
32
}

Also available in: Unified diff