Revision 31217
Added by Michele Artini over 9 years ago
ResultSetServiceImpl.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.enabling.resultset; |
2 | 2 |
|
3 |
import javax.jws.WebService;
|
|
3 |
import java.util.List;
|
|
4 | 4 |
|
5 |
import org.apache.commons.logging.Log; |
|
6 |
import org.apache.commons.logging.LogFactory; |
|
7 | 5 |
import org.springframework.beans.factory.annotation.Required; |
8 | 6 |
|
7 |
import com.google.common.collect.Lists; |
|
8 |
|
|
9 |
import eu.dnetlib.enabling.resultset.listener.ResultSetListener; |
|
10 |
import eu.dnetlib.enabling.resultset.registry.ResultSetRegistry; |
|
9 | 11 |
import eu.dnetlib.enabling.resultset.rmi.ResultSetException; |
10 | 12 |
import eu.dnetlib.enabling.resultset.rmi.ResultSetResponse; |
11 | 13 |
import eu.dnetlib.enabling.resultset.rmi.ResultSetService; |
12 |
import eu.dnetlib.enabling.tools.AbstractBaseService; |
|
13 | 14 |
|
14 |
/** |
|
15 |
* This component dispatches the service method calls to stateful datastructure instances and to the singleton core. |
|
16 |
* |
|
17 |
* @author michele |
|
18 |
* |
|
19 |
*/ |
|
20 |
@WebService(targetNamespace = "http://services.dnetlib.eu/") |
|
21 |
public class ResultSetServiceImpl extends AbstractBaseService implements ResultSetService { |
|
15 |
public class ResultSetServiceImpl implements ResultSetService { |
|
22 | 16 |
|
23 |
/** |
|
24 |
* logger. |
|
25 |
*/ |
|
26 |
private static final Log log = LogFactory.getLog(ResultSetServiceImpl.class); // NOPMD by marko on 11/24/08 5:02 PM |
|
27 |
|
|
28 |
/** |
|
29 |
* Maps resultset identifiers to resultsets and manages expiration etc. |
|
30 |
*/ |
|
31 |
private ResultSetRegistry resultsetRegistry; |
|
17 |
private ResultSetRegistry resultSetRegistry; |
|
32 | 18 |
|
33 |
/** |
|
34 |
* Returns the next elements of a resultset |
|
35 |
*/ |
|
36 | 19 |
@Override |
37 |
public ResultSetResponse getNextResults(final String rsId, int n) throws ResultSetException { |
|
38 |
log.debug("Returning next " + n + " records of resultset " + rsId); |
|
39 |
final ResultSet resultSet = getResultSetById(rsId); // NOPMD |
|
40 |
return resultSet.getNextResults(n); |
|
41 |
} |
|
20 |
public <T> ResultSetResponse<T> getNextResults(final String rsId, final int n, final Class<T> clazz) throws ResultSetException { |
|
21 |
final ResultSetListener<T> rs = resultSetRegistry.getResultSetById(rsId, clazz); |
|
22 |
final int start = rs.getCount(); |
|
23 |
final List<T> elements = Lists.newArrayList(); |
|
24 |
|
|
25 |
while (rs.hasNext() && elements.size() < n) { |
|
26 |
elements.add(rs.next()); |
|
27 |
} |
|
28 |
|
|
29 |
final int from = start; |
|
30 |
final int to = rs.getCount(); |
|
31 |
final boolean end = !rs.hasNext(); |
|
32 |
final int total = rs.getTotal(); |
|
42 | 33 |
|
43 |
/** |
|
44 |
* obtain the resultset object for a given id. |
|
45 |
* |
|
46 |
* @param rsId |
|
47 |
* resultset id |
|
48 |
* @return resultset object, never null |
|
49 |
* @throws ResultSetException |
|
50 |
* thrown when the id doesn't exist; |
|
51 |
*/ |
|
52 |
private ResultSet getResultSetById(final String rsId) throws ResultSetException { |
|
53 |
final ResultSet resultSet = resultsetRegistry.getResultSetById(rsId); // NOPMD |
|
54 |
if (resultSet == null) throw new ResultSetException("resultset with id '" + rsId + "' doesn't exist"); |
|
55 |
return resultSet; |
|
34 |
return new ResultSetResponse<T>(from, to, end, total, elements); |
|
56 | 35 |
} |
57 | 36 |
|
58 |
public ResultSetRegistry getResultsetRegistry() {
|
|
59 |
return resultsetRegistry;
|
|
37 |
public ResultSetRegistry getResultSetRegistry() {
|
|
38 |
return resultSetRegistry;
|
|
60 | 39 |
} |
61 | 40 |
|
62 | 41 |
@Required |
63 |
public void setResultsetRegistry(final ResultSetRegistry resultsetRegistry) {
|
|
64 |
this.resultsetRegistry = resultsetRegistry;
|
|
42 |
public void setResultSetRegistry(ResultSetRegistry resultSetRegistry) {
|
|
43 |
this.resultSetRegistry = resultSetRegistry;
|
|
65 | 44 |
} |
66 | 45 |
|
46 |
|
|
67 | 47 |
} |
Also available in: Unified diff
partial implementation