Project

General

Profile

« Previous | Next » 

Revision 31217

partial implementation

View differences:

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