Project

General

Profile

1
package eu.dnetlib.enabling.resultset;
2

    
3
import java.util.List;
4

    
5
import javax.jws.WebService;
6
import javax.xml.ws.Endpoint;
7
import javax.xml.ws.wsaddressing.W3CEndpointReference;
8

    
9
import org.apache.commons.logging.Log;
10
import org.apache.commons.logging.LogFactory;
11
import org.springframework.beans.factory.annotation.Required;
12

    
13
import eu.dnetlib.common.rmi.UnimplementedException;
14
import eu.dnetlib.enabling.resultset.push.PushResultSet;
15
import eu.dnetlib.enabling.resultset.push.PushResultSetFactory;
16
import eu.dnetlib.enabling.resultset.rmi.ResultSetException;
17
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;
18
import eu.dnetlib.enabling.tools.AbstractBaseService;
19
import eu.dnetlib.soap.EndpointReferenceBuilder;
20

    
21
/**
22
 * This component dispatches the service method calls to stateful datastructure instances and to the singleton core.
23
 * 
24
 * @author marko
25
 * 
26
 */
27
@WebService(targetNamespace = "http://services.dnetlib.eu/")
28
public class ResultSetServiceImpl extends AbstractBaseService implements ResultSetService {
29

    
30
	/**
31
	 * logger.
32
	 */
33
	private static final Log log = LogFactory.getLog(ResultSetServiceImpl.class); // NOPMD by marko on 11/24/08 5:02 PM
34

    
35
	/**
36
	 * Maps resultset identifiers to resultsets and manages expiration etc.
37
	 */
38
	private ResultSetRegistry resultsetRegistry;
39

    
40
	/**
41
	 * push resultset factory.
42
	 */
43
	private PushResultSetFactory pushFactory;
44

    
45
	/**
46
	 * Service endpoint.
47
	 */
48
	private Endpoint endpoint;
49

    
50
	/**
51
	 * injected epr builder.
52
	 */
53
	private EndpointReferenceBuilder<Endpoint> eprBuilder;
54

    
55
	/**
56
	 * custom resultset properties.
57
	 */
58
	private ResultSetPropertyDao customPropertyDao;
59

    
60
	/**
61
	 * {@inheritDoc}
62
	 * 
63
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#closeRS(java.lang.String)
64
	 */
65
	@Override
66
	public void closeRS(final String rsId) {
67
		try {
68
			final ResultSet resultSet = getResultSetById(rsId);
69
			resultSet.close();
70
		} catch (ResultSetException e) {
71
			log.warn("should throw checked exception but wasn't declared in cnr-rmi-api", e);
72
			throw new IllegalStateException(e);
73
		}
74
	}
75

    
76
	/**
77
	 * {@inheritDoc}
78
	 * 
79
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#createPullRS(java.lang.String, java.lang.String, int, int, java.lang.String,
80
	 *      java.lang.Integer, java.lang.Integer)
81
	 */
82
	@Override
83
	public W3CEndpointReference createPullRS(final String providerAddress,
84
			final String bdId,
85
			final int initialPageSize,
86
			final int expiryTime,
87
			final String styleSheet,
88
			final Integer keepAliveTime,
89
			final Integer total) {
90
		throw new UnimplementedException();
91
	}
92

    
93
	/**
94
	 * {@inheritDoc}
95
	 * 
96
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#createPullRSEPR(javax.xml.ws.wsaddressing.W3CEndpointReference,
97
	 *      java.lang.String, int, int, java.lang.String, java.lang.Integer, java.lang.Integer)
98
	 */
99
	@Override
100
	public W3CEndpointReference createPullRSEPR(final W3CEndpointReference dataProviderEPR,
101
			final String bdId,
102
			final int initialPageSize,
103
			final int expiryTime,
104
			final String styleSheet,
105
			final Integer keepAliveTime,
106
			final Integer total) {
107
		throw new UnimplementedException();
108
	}
109

    
110
	/**
111
	 * {@inheritDoc}
112
	 * 
113
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#getNumberOfElements(java.lang.String)
114
	 */
115
	@Override
116
	public int getNumberOfElements(final String rsId) throws ResultSetException {
117
		final ResultSet resultSet = getResultSetById(rsId); // NOPMD
118
		return resultSet.getNumberOfResults();
119
	}
120

    
121
	/**
122
	 * {@inheritDoc}
123
	 * 
124
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#getResult(java.lang.String, int, int, java.lang.String)
125
	 */
126
	@Override
127
	public List<String> getResult(final String rsId, final int fromPosition, final int toPosition, final String requestMode) throws ResultSetException {
128
		final ResultSet resultSet = getResultSetById(rsId); // NOPMD
129
		return resultSet.getResults(fromPosition, toPosition);
130
	}
131

    
132
	/**
133
	 * {@inheritDoc}
134
	 * 
135
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#createPushRS(int, int)
136
	 */
137
	@Override
138
	public W3CEndpointReference createPushRS(final int expiryTime, final int keepAliveTime) throws ResultSetException {
139
		return pushFactory.createPushResultSet(expiryTime);
140
	}
141

    
142
	/**
143
	 * {@inheritDoc}
144
	 * 
145
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#getProperty(java.lang.String, java.lang.String)
146
	 */
147
	@Override
148
	public String getProperty(final String rsId, final String name) throws ResultSetException {
149
		final ResultSet resultSet = getResultSetById(rsId); // NOPMD
150

    
151
		if ("rsId".equals(name)) return resultSet.getIdentifier();
152
		else if ("total".equals(name)) return Integer.toString(resultSet.getNumberOfResults());
153
		else if ("maxExpiryTime".equals(name)) return Integer.toString(resultsetRegistry.getMaxIdleTimeById(rsId));
154
		else if ("expiryTime".equals(name)) return Integer.toString(resultsetRegistry.getMaxIdleTimeById(rsId));
155
		else if ("keepAliveTime".equals(name)) return Integer.toString(resultsetRegistry.getMaxIdleTimeById(rsId));
156
		else if ("classSimpleName".equals(name)) return resultSet.getClass().getSimpleName();
157
		// ...
158

    
159
		return customPropertyDao.getProperties(resultSet).get(name);
160
	}
161

    
162
	/**
163
	 * {@inheritDoc}
164
	 * 
165
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#getRSStatus(java.lang.String)
166
	 */
167
	@Override
168
	public String getRSStatus(final String rsId) throws ResultSetException {
169
		final ResultSet resultSet = getResultSetById(rsId); // NOPMD
170
		if (resultSet.isOpen()) return "open";
171
		return "closed";
172
	}
173

    
174
	/**
175
	 * {@inheritDoc}
176
	 * 
177
	 * @see eu.dnetlib.enabling.resultset.rmi.ResultSetService#populateRS(java.lang.String, java.util.List)
178
	 */
179
	@Override
180
	public String populateRS(final String rsId, final List<String> elements) throws ResultSetException {
181
		final ResultSet resultSet = getResultSetById(rsId); // NOPMD
182
		if (resultSet instanceof PushResultSet) {
183
			((PushResultSet) resultSet).addElements(elements);
184
		} else throw new ResultSetException("ResultSet '" + rsId + "' is not a push resultset");
185

    
186
		return "1";
187
	}
188

    
189
	/**
190
	 * {@inheritDoc}
191
	 * 
192
	 * @see eu.dnetlib.common.rmi.BaseService#start()
193
	 */
194
	@Override
195
	public void start() {
196
		// TODO Auto-generated method stub
197

    
198
	}
199

    
200
	/**
201
	 * obtain the resultset object for a given id.
202
	 * 
203
	 * @param rsId
204
	 *            resultset id
205
	 * @return resultset object, never null
206
	 * @throws ResultSetException
207
	 *             thrown when the id doesn't exist;
208
	 */
209
	private ResultSet getResultSetById(final String rsId) throws ResultSetException {
210
		final ResultSet resultSet = resultsetRegistry.getResultSetById(rsId); // NOPMD
211
		if (resultSet == null) throw new ResultSetException("resultset with id '" + rsId + "' doesn't exist");
212
		return resultSet;
213
	}
214

    
215
	public ResultSetRegistry getResultsetRegistry() {
216
		return resultsetRegistry;
217
	}
218

    
219
	@Required
220
	public void setResultsetRegistry(final ResultSetRegistry resultsetRegistry) {
221
		this.resultsetRegistry = resultsetRegistry;
222
	}
223

    
224
	public EndpointReferenceBuilder<Endpoint> getEprBuilder() {
225
		return eprBuilder;
226
	}
227

    
228
	@Required
229
	public void setEprBuilder(final EndpointReferenceBuilder<Endpoint> eprBuilder) {
230
		this.eprBuilder = eprBuilder;
231
	}
232

    
233
	public Endpoint getEndpoint() {
234
		return endpoint;
235
	}
236

    
237
	@Required
238
	public void setEndpoint(final Endpoint endpoint) {
239
		this.endpoint = endpoint;
240
	}
241

    
242
	public PushResultSetFactory getPushFactory() {
243
		return pushFactory;
244
	}
245

    
246
	@Required
247
	public void setPushFactory(final PushResultSetFactory pushFactory) {
248
		this.pushFactory = pushFactory;
249
	}
250

    
251
	public ResultSetPropertyDao getCustomPropertyDao() {
252
		return customPropertyDao;
253
	}
254

    
255
	public void setCustomPropertyDao(final ResultSetPropertyDao customPropertyDao) {
256
		this.customPropertyDao = customPropertyDao;
257
	}
258

    
259
}
(29-29/34)