Project

General

Profile

1
package gr.uoa.di.driver.enabling.resultset;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5

    
6
import javax.xml.bind.JAXBException;
7

    
8
import org.apache.log4j.Logger;
9

    
10
import eu.dnetlib.api.enabling.ResultSetService;
11
import eu.dnetlib.api.enabling.ResultSetServiceException;
12
import eu.dnetlib.domain.EPR;
13
import eu.dnetlib.util.ObjectToXmlConverter;
14

    
15
public class ResultSetImpl<D> implements ResultSet<D> {
16
	static Logger logger = Logger.getLogger(ResultSetImpl.class);
17
	private EPR epr = null;
18

    
19
	static ObjectToXmlConverter<String> dummyConverter = new ObjectToXmlConverter<String>() {
20
		public String XmlToObject(String xml) throws JAXBException {
21
			return xml;
22
		}
23

    
24
		public String ObjectToXml(String object) throws JAXBException {
25
			return object;
26
		}
27
	};
28

    
29
	private String identifier = null;
30
	private ObjectToXmlConverter<D> converter = null;
31
	private ResultSetService rsService = null;
32

    
33
	@SuppressWarnings("unchecked")
34
	public ResultSetImpl(ResultSetService rsService, String rsIdentifier) {
35
		this(rsService, rsIdentifier, (ObjectToXmlConverter<D>) dummyConverter);
36
	}
37

    
38
	public ResultSetImpl(ResultSetService rsService, String rsIdentifier,
39
			ObjectToXmlConverter<D> converter) {
40
		this.identifier = rsIdentifier;
41
		this.converter = converter;
42
		this.rsService = rsService;
43
	}
44

    
45
	public boolean isOpen() {
46
		boolean open = false;
47

    
48
		try {
49
			String status = rsService.getRSStatus(identifier);
50
			open = status.toLowerCase().equals("open");
51
		} catch (ResultSetServiceException e) {
52
			logger.warn("Result Set Error.", e);
53
		}
54
		return open;
55
	}
56

    
57
	public boolean isAlive() {
58
		try {
59
			rsService.getNumberOfElements(identifier);
60
		} catch (ResultSetServiceException rsse) {
61
			// TODO: something??? nothing
62

    
63
			return false;
64
		}
65

    
66
		return true;
67
	}
68

    
69
	public void close() {
70
		rsService.closeRS(identifier);
71
	}
72

    
73
	public int size() {
74
		int size = 0;
75

    
76
		try {
77
			size = rsService.getNumberOfElements(identifier);
78
		} catch (ResultSetServiceException e) {
79
			logger.warn("Result Set Error.", e);
80
		}
81

    
82
		return size;
83
	}
84

    
85
	public List<String> getElements(int from, int to) {
86
		List<String> elements = null;
87

    
88
		try {
89
			elements = rsService.getResult(identifier, from, to, "waiting");
90
		} catch (ResultSetServiceException e) {
91
			logger.warn("Result Set Error.", e);
92
		}
93

    
94
		return elements;
95
	}
96

    
97
	public List<D> get(int from, int to) {
98
		List<String> elements = getElements(from, to);
99
		List<D> list = null;
100
		if (elements != null) {
101
			list = new ArrayList<D>(elements.size());
102
			for (String element : elements) {
103
				try {
104
					D d = converter.XmlToObject(element);
105
					list.add(d);
106
				} catch (JAXBException e) {
107
					logger.warn("Error converting element: " + element);
108
				}
109
			}
110
		}
111
		return list;
112
	}
113

    
114
	public EPR getEpr() {
115
		return epr;
116
	}
117

    
118
	public void setEpr(EPR epr) {
119
		this.epr = epr;
120
	}
121
}
(4-4/5)