Project

General

Profile

1
package eu.dnetlib.enabling.resultset.factory;
2

    
3
import java.util.Map;
4
import java.util.function.Function;
5
import java.util.stream.StreamSupport;
6

    
7
import javax.xml.transform.dom.DOMSource;
8

    
9
import org.springframework.beans.factory.annotation.Required;
10
import org.springframework.core.io.Resource;
11

    
12
import eu.dnetlib.enabling.resultset.client.ResultSetClient;
13
import eu.dnetlib.enabling.resultset.listener.IterableResultSetListener;
14
import eu.dnetlib.enabling.resultset.listener.ResultSetListener;
15
import eu.dnetlib.enabling.resultset.registry.ResultSetRegistry;
16
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
17
import eu.dnetlib.rmi.common.ResultSet;
18

    
19
public class ResultSetFactory {
20

    
21
	private ResultSetRegistry resultSetRegistry;
22
	private ResultSetClient resultSetClient;
23
	private String baseUrl;
24

    
25
	public <T> ResultSet<T> registerResultSet(final ResultSetListener<T> rs) {
26
		final String rsId = this.resultSetRegistry.registerResultSet(rs);
27
		return new ResultSet<T>(rsId, this.baseUrl);
28
	}
29

    
30
	public <T> ResultSet<T> createResultSet(final ResultSetListener<T> listener) {
31
		return registerResultSet(listener);
32
	}
33

    
34
	public <T> ResultSet<T> createResultSet(final Iterable<T> iter) {
35
		return registerResultSet(new IterableResultSetListener<T>(iter));
36
	}
37

    
38
	public <T, K> ResultSet<K> map(final ResultSet<?> rsIn, final Class<T> clazzIn, final Function<T, K> mapper) {
39
		final Iterable<T> iterIn = this.resultSetClient.iter(rsIn, clazzIn);
40
		return createResultSet(() -> StreamSupport.stream(iterIn.spliterator(), false).map(mapper).iterator());
41
	}
42

    
43
	public ResultSet<String> xsltMap(final ResultSet<?> rsIn, final String xslt) {
44
		return map(rsIn, String.class, new ApplyXslt(xslt));
45
	}
46

    
47
	public ResultSet<String> xsltMap(final ResultSet<?> rsIn, final String xslt, final Map<String, String> params) {
48
		return map(rsIn, String.class, new ApplyXslt(xslt, null, params));
49
	}
50

    
51
	public ResultSet<String> xsltMap(final ResultSet<?> rsIn, final Resource xsltResource) {
52
		return map(rsIn, String.class, new ApplyXslt(xsltResource));
53
	}
54

    
55
	public ResultSet<String> xsltMap(final ResultSet<?> rsIn, final Resource xsltResource, final Map<String, String> params) {
56
		return map(rsIn, String.class, new ApplyXslt(xsltResource, params));
57
	}
58

    
59
	public ResultSet<String> xsltMap(final ResultSet<?> rsIn, final DOMSource domSource) {
60
		return map(rsIn, String.class, new ApplyXslt(domSource));
61
	}
62

    
63
	public ResultSetRegistry getResultSetRegistry() {
64
		return this.resultSetRegistry;
65
	}
66

    
67
	@Required
68
	public void setResultSetRegistry(final ResultSetRegistry resultSetRegistry) {
69
		this.resultSetRegistry = resultSetRegistry;
70
	}
71

    
72
	public String getBaseUrl() {
73
		return this.baseUrl;
74
	}
75

    
76
	@Required
77
	public void setBaseUrl(final String baseUrl) {
78
		this.baseUrl = baseUrl;
79
	}
80

    
81
	public ResultSetClient getResultSetClient() {
82
		return this.resultSetClient;
83
	}
84

    
85
	@Required
86
	public void setResultSetClient(final ResultSetClient resultSetClient) {
87
		this.resultSetClient = resultSetClient;
88
	}
89

    
90
}
    (1-1/1)