Revision 61757
Added by Michele Artini over 2 years ago
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
plugin for eosc services