Project

General

Profile

1
/**
2
 *  '$RCSfile$'
3
 *  Copyright: 2000-2011 Regents of the University of California and the
4
 *              National Center for Ecological Analysis and Synthesis
5
 *
6
 *   '$Author: tao $'
7
 *     '$Date: 2014-12-22 14:31:24 -0800 (Mon, 22 Dec 2014) $'
8
 *
9
 * This program is free software; you can redistribute it and/or modify
10
 * it under the terms of the GNU General Public License as published by
11
 * the Free Software Foundation; either version 2 of the License, or
12
 * (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22
 */
23

    
24
package edu.ucsb.nceas.metacat.dataone.v1;
25

    
26
import java.io.InputStream;
27
import java.sql.SQLException;
28
import java.util.Date;
29

    
30
import javax.servlet.http.HttpServletRequest;
31

    
32
import org.apache.log4j.Logger;
33
import org.dataone.service.cn.v1.CNAuthorization;
34
import org.dataone.service.cn.v1.CNCore;
35
import org.dataone.service.cn.v1.CNRead;
36
import org.dataone.service.cn.v1.CNReplication;
37
import org.dataone.service.exceptions.BaseException;
38
import org.dataone.service.exceptions.IdentifierNotUnique;
39
import org.dataone.service.exceptions.InsufficientResources;
40
import org.dataone.service.exceptions.InvalidRequest;
41
import org.dataone.service.exceptions.InvalidSystemMetadata;
42
import org.dataone.service.exceptions.InvalidToken;
43
import org.dataone.service.exceptions.NotAuthorized;
44
import org.dataone.service.exceptions.NotFound;
45
import org.dataone.service.exceptions.NotImplemented;
46
import org.dataone.service.exceptions.ServiceFailure;
47
import org.dataone.service.exceptions.UnsupportedType;
48
import org.dataone.service.exceptions.VersionMismatch;
49
import org.dataone.service.types.v1.AccessPolicy;
50
import org.dataone.service.types.v1.Checksum;
51
import org.dataone.service.types.v1.ChecksumAlgorithmList;
52
import org.dataone.service.types.v1.DescribeResponse;
53
import org.dataone.service.types.v1.Event;
54
import org.dataone.service.types.v1.Identifier;
55
import org.dataone.service.types.v1.Log;
56
import org.dataone.service.types.v1.NodeList;
57
import org.dataone.service.types.v1.NodeReference;
58
import org.dataone.service.types.v1.ObjectFormat;
59
import org.dataone.service.types.v1.ObjectFormatIdentifier;
60
import org.dataone.service.types.v1.ObjectFormatList;
61
import org.dataone.service.types.v1.ObjectList;
62
import org.dataone.service.types.v1.ObjectLocationList;
63
import org.dataone.service.types.v1.Permission;
64
import org.dataone.service.types.v1.Replica;
65
import org.dataone.service.types.v1.ReplicationPolicy;
66
import org.dataone.service.types.v1.ReplicationStatus;
67
import org.dataone.service.types.v1.Session;
68
import org.dataone.service.types.v1.Subject;
69
import org.dataone.service.types.v1.SystemMetadata;
70
import org.dataone.service.types.v1_1.QueryEngineDescription;
71
import org.dataone.service.types.v1_1.QueryEngineList;
72
import org.dataone.service.util.TypeMarshaller;
73

    
74
import edu.ucsb.nceas.metacat.IdentifierManager;
75

    
76
/**
77
 * Represents Metacat's implementation of the DataONE Coordinating Node service
78
 * API. Methods implement the various CN* interfaces, and methods common to both
79
 * Member Node and Coordinating Node interfaces are found in the D1NodeService
80
 * super class.
81
 * 
82
 */
83
public class CNodeService implements CNAuthorization, CNCore, CNRead,
84
		CNReplication {
85

    
86
	// pass through to the most recent implementation
87
	private edu.ucsb.nceas.metacat.dataone.CNodeService impl = null;
88

    
89
	/* the logger instance */
90
	private Logger logMetacat = null;
91

    
92
	/**
93
	 * singleton accessor
94
	 */
95
	public static CNodeService getInstance(HttpServletRequest request) {
96
		return new CNodeService(request);
97
	}
98

    
99
	/**
100
	 * Constructor, private for singleton access
101
	 */
102
	private CNodeService(HttpServletRequest request) {
103

    
104
		logMetacat = Logger.getLogger(CNodeService.class);
105

    
106
		impl = edu.ucsb.nceas.metacat.dataone.CNodeService.getInstance(request);
107

    
108
	}
109

    
110
	@Override
111
	public boolean deleteReplicationMetadata(Identifier pid,
112
			NodeReference nodeId, long serialVersion) throws InvalidToken, InvalidRequest,
113
			ServiceFailure, NotAuthorized, NotFound, NotImplemented,
114
			VersionMismatch {
115
		return impl.deleteReplicationMetadata(null, pid, nodeId, serialVersion);
116
	}
117

    
118
	@Override
119
	@Deprecated
120
	public boolean deleteReplicationMetadata(Session session, Identifier pid,
121
			NodeReference nodeId, long serialVersion) throws InvalidToken, InvalidRequest,
122
			ServiceFailure, NotAuthorized, NotFound, NotImplemented,
123
			VersionMismatch {
124
		return impl.deleteReplicationMetadata(session, pid, nodeId, serialVersion);
125

    
126
	}
127

    
128
	@Override
129
	public boolean isNodeAuthorized(Subject targetNodeSubject, Identifier pid)
130
			throws NotImplemented, NotAuthorized, InvalidToken, ServiceFailure,
131
			NotFound, InvalidRequest {
132
		return impl.isNodeAuthorized(null, targetNodeSubject, pid);
133

    
134
	}
135

    
136
	@Override
137
	@Deprecated
138
	public boolean isNodeAuthorized(Session originatingNodeSession, Subject targetNodeSubject, Identifier pid)
139
			throws NotImplemented, NotAuthorized, InvalidToken, ServiceFailure,
140
			NotFound, InvalidRequest {
141
		return impl.isNodeAuthorized(originatingNodeSession, targetNodeSubject, pid);
142
	}
143

    
144
	@Override
145
	public boolean setReplicationPolicy(Identifier pid,
146
			ReplicationPolicy policy, long serialVersion) throws NotImplemented, NotFound,
147
			NotAuthorized, ServiceFailure, InvalidRequest, InvalidToken,
148
			VersionMismatch {
149
		return impl.setReplicationPolicy(null, pid, policy, serialVersion);
150
	}
151

    
152
	@Override
153
	@Deprecated
154
	public boolean setReplicationPolicy(Session session, Identifier pid,
155
			ReplicationPolicy policy, long serialVersion) throws NotImplemented, NotFound,
156
			NotAuthorized, ServiceFailure, InvalidRequest, InvalidToken,
157
			VersionMismatch {
158
		return impl.setReplicationPolicy(session, pid, policy, serialVersion);
159

    
160
	}
161

    
162
	@Override
163
	public boolean setReplicationStatus(Identifier pid,
164
			NodeReference targetNode, ReplicationStatus status, BaseException failure) 
165
			throws ServiceFailure, NotImplemented, InvalidToken, NotAuthorized, InvalidRequest, NotFound {
166
		return impl.setReplicationStatus(null, pid, targetNode, status, failure);
167
	}
168

    
169
	@Override
170
	@Deprecated
171
	public boolean setReplicationStatus(Session session, Identifier pid,
172
			NodeReference targetNode, ReplicationStatus status, BaseException failure)
173
			throws ServiceFailure, NotImplemented, InvalidToken, NotAuthorized,
174
			InvalidRequest, NotFound {
175
		return impl.setReplicationStatus(session, pid, targetNode, status, failure);
176
	}
177

    
178
	@Override
179
	public boolean updateReplicationMetadata(Identifier pid,
180
			Replica replica, long serialVersion) throws NotImplemented, NotAuthorized, ServiceFailure,
181
			NotFound, InvalidRequest, InvalidToken, VersionMismatch {
182
		return impl.updateReplicationMetadata(null, pid, replica, serialVersion);
183
	}
184

    
185
	@Override
186
	@Deprecated
187
	public boolean updateReplicationMetadata(Session session, Identifier pid,
188
			Replica replica, long serialVersion) throws NotImplemented, NotAuthorized,
189
			ServiceFailure, NotFound, InvalidRequest, InvalidToken,
190
			VersionMismatch {
191
		return impl.updateReplicationMetadata(session, pid, replica, serialVersion);
192
	}
193

    
194
	@Override
195
	public DescribeResponse describe(Identifier pid) throws InvalidToken,
196
			NotAuthorized, NotImplemented, ServiceFailure, NotFound {
197
		return impl.describe(null, pid);
198
	}
199

    
200
	@Override
201
	@Deprecated
202
	public DescribeResponse describe(Session session, Identifier pid)
203
			throws InvalidToken, NotAuthorized, NotImplemented, ServiceFailure,
204
			NotFound {
205
		return impl.describe(session, pid);
206
	}
207

    
208
	@Override
209
	public InputStream get(Identifier pid) throws InvalidToken,
210
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
211
        String serviceFailure = "1030";
212
        String notFound = "1020";
213
        impl.checkV1SystemMetaPidExist(pid, serviceFailure, notFound);
214
		return impl.get(null, pid);
215
	}
216

    
217
	@Override
218
	@Deprecated
219
	public InputStream get(Session session, Identifier pid) throws InvalidToken,
220
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
221
	    String serviceFailure = "1030";
222
        String notFound = "1020";
223
        impl.checkV1SystemMetaPidExist(pid, serviceFailure, notFound);
224
		return impl.get(session, pid);
225
	}
226

    
227
	@Override
228
	public Checksum getChecksum(Identifier pid) throws InvalidToken,
229
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
230
		return impl.getChecksum(null, pid);
231
	}
232

    
233
	@Override
234
	@Deprecated
235
	public Checksum getChecksum(Session session, Identifier pid)
236
			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
237
			NotImplemented {
238
		return impl.getChecksum(session, pid);
239
	}
240

    
241
	@Override
242
	public QueryEngineDescription getQueryEngineDescription(String queryEngine)
243
			throws InvalidToken, ServiceFailure, NotAuthorized, NotImplemented,
244
			NotFound {
245
		return impl.getQueryEngineDescription(null, queryEngine);
246
	}
247

    
248
	@Override
249
	public SystemMetadata getSystemMetadata(Identifier pid)
250
			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
251
			NotImplemented {
252
		return impl.getSystemMetadata(null, pid);
253
	}
254

    
255
	@Override
256
	@Deprecated
257
	public SystemMetadata getSystemMetadata(Session session, Identifier pid)
258
			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
259
			NotImplemented {
260
		return impl.getSystemMetadata(session, pid);
261
	}
262

    
263
	@Override
264
	public ObjectList listObjects(Date startTime, Date endTime,
265
			ObjectFormatIdentifier formatid, Boolean replicaStatus, Integer start,
266
			Integer count) throws InvalidRequest, InvalidToken, NotAuthorized,
267
			NotImplemented, ServiceFailure {
268
		return impl.listObjects(null, startTime, endTime, formatid, null, replicaStatus, start, count);
269
	}
270

    
271
	@Override
272
	@Deprecated
273
	public ObjectList listObjects(Session session, Date startTime, Date endTime,
274
			ObjectFormatIdentifier formatid, Boolean replicaStatus, Integer start,
275
			Integer count) throws InvalidRequest, InvalidToken, NotAuthorized,
276
			NotImplemented, ServiceFailure {
277
		return impl.listObjects(session, startTime, endTime, formatid, null, replicaStatus, start, count);
278
	}
279

    
280
	@Override
281
	public QueryEngineList listQueryEngines() throws InvalidToken,
282
			ServiceFailure, NotAuthorized, NotImplemented {
283
		return impl.listQueryEngines(null);
284
	}
285

    
286
	@Override
287
	public InputStream query(String queryEngine, String query) throws InvalidToken,
288
			ServiceFailure, NotAuthorized, InvalidRequest, NotImplemented,
289
			NotFound {
290
		return impl.query(null, queryEngine, query);
291
	}
292

    
293
	@Override
294
	public ObjectLocationList resolve(Identifier pid) throws InvalidToken,
295
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
296
		return impl.resolve(null, pid);
297
	}
298

    
299
	@Override
300
	@Deprecated
301
	public ObjectLocationList resolve(Session session, Identifier pid)
302
			throws InvalidToken, ServiceFailure, NotAuthorized, NotFound,
303
			NotImplemented {
304
		return impl.resolve(session, pid);
305
	}
306

    
307
	@Override
308
	public ObjectList search(String queryType, String query) throws InvalidToken,
309
			ServiceFailure, NotAuthorized, InvalidRequest, NotImplemented {
310
		return impl.search(null, queryType, query);
311
	}
312

    
313
	@Override
314
	@Deprecated
315
	public ObjectList search(Session session, String queryType, String query)
316
			throws InvalidToken, ServiceFailure, NotAuthorized, InvalidRequest,
317
			NotImplemented {
318
		return impl.search(session, queryType, query);
319
	}
320

    
321
	@Override
322
	public Identifier archive(Identifier pid) throws InvalidToken,
323
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
324
		return impl.archive(null, pid);
325
	}
326

    
327
	@Override
328
	@Deprecated
329
	public Identifier archive(Session session, Identifier pid)
330
			throws InvalidToken, ServiceFailure, InvalidRequest, NotAuthorized,
331
			NotFound, NotImplemented {
332
		return impl.archive(session, pid);
333
	}
334

    
335
	@Override
336
	public Identifier create(Identifier pid, InputStream object,
337
			SystemMetadata sysmeta) throws InvalidToken, ServiceFailure,
338
			NotAuthorized, IdentifierNotUnique, UnsupportedType,
339
			InsufficientResources, InvalidSystemMetadata, NotImplemented,
340
			InvalidRequest {
341
		return this.create(null, pid, object, sysmeta);
342
	}
343

    
344
	@Override
345
	@Deprecated
346
	public Identifier create(Session session, Identifier pid, InputStream object,
347
			SystemMetadata sysmeta) throws InvalidToken, ServiceFailure,
348
			NotAuthorized, IdentifierNotUnique, UnsupportedType,
349
			InsufficientResources, InvalidSystemMetadata, NotImplemented,
350
			InvalidRequest {
351
		
352
		//convert sysmeta to newer version
353
		org.dataone.service.types.v2.SystemMetadata v2Sysmeta = null;
354
		try {
355
			v2Sysmeta = TypeMarshaller.convertTypeFromType(sysmeta, org.dataone.service.types.v2.SystemMetadata.class);
356
		} catch (Exception e) {
357
			// report as service failure
358
			ServiceFailure sf = new ServiceFailure("1030", e.getMessage());
359
			sf.initCause(e);
360
			throw sf;
361
		}
362
		
363
		return impl.create(session, pid, object, v2Sysmeta);
364
	}
365

    
366
	@Override
367
	public Identifier delete(Identifier pid) throws InvalidToken,
368
			ServiceFailure, NotAuthorized, NotFound, NotImplemented {
369
		return impl.delete(null, pid);
370
	}
371

    
372
	@Override
373
	@Deprecated
374
	public Identifier delete(Session session, Identifier pid)
375
			throws InvalidToken, ServiceFailure, InvalidRequest, NotAuthorized,
376
			NotFound, NotImplemented {
377
		return impl.delete(session, pid);
378
	}
379

    
380
	@Override
381
	public Identifier generateIdentifier(String scheme, String fragment)
382
			throws InvalidToken, ServiceFailure, NotAuthorized, NotImplemented,
383
			InvalidRequest {
384
		return impl.generateIdentifier(null, scheme, fragment);
385
	}
386

    
387
	@Override
388
	@Deprecated
389
	public Identifier generateIdentifier(Session session, String scheme, String fragment)
390
			throws InvalidToken, ServiceFailure, NotAuthorized, NotImplemented,
391
			InvalidRequest {
392
		return impl.generateIdentifier(session, scheme, fragment);
393
	}
394

    
395
	@Override
396
	public ObjectFormat getFormat(ObjectFormatIdentifier fmtid)
397
			throws ServiceFailure, NotFound, NotImplemented, InvalidRequest {
398
		return impl.getFormat(fmtid);
399
	}
400

    
401
	@Override
402
	public Log getLogRecords(Date fromDate, Date toDate, Event event,
403
			String pidFilter, Integer start, Integer count) throws InvalidToken, InvalidRequest,
404
			ServiceFailure, NotAuthorized, NotImplemented,
405
			InsufficientResources {
406
		return this.getLogRecords(null, fromDate, toDate, event, pidFilter, start, count);
407
	}
408

    
409
	@Override
410
	@Deprecated
411
	public Log getLogRecords(Session session, Date fromDate, Date toDate, Event event,
412
			String pidFilter, Integer start, Integer count) throws InvalidToken,
413
			InvalidRequest, ServiceFailure, NotAuthorized, NotImplemented,
414
			InsufficientResources {
415
		org.dataone.service.types.v2.Log log = impl.getLogRecords(session, fromDate, toDate, event.xmlValue(), pidFilter, start, count);
416
		Log retLog = null;
417
		try {
418
			retLog = TypeMarshaller.convertTypeFromType(log, Log.class);
419
		} catch (Exception e) {
420
			// report as service failure
421
			ServiceFailure sf = new ServiceFailure("1490", e.getMessage());
422
			sf.initCause(e);
423
			throw sf;
424
		}
425
		return retLog;
426
	}
427

    
428
	@Override
429
	public boolean hasReservation(Subject subject, Identifier pid)
430
			throws InvalidToken, ServiceFailure, NotFound, NotAuthorized,
431
			NotImplemented, InvalidRequest, IdentifierNotUnique {
432
		return impl.hasReservation(null, subject, pid);
433
	}
434

    
435
	@Override
436
	@Deprecated
437
	public boolean hasReservation(Session session, Subject subject, Identifier pid)
438
			throws InvalidToken, ServiceFailure, NotFound, NotAuthorized,
439
			NotImplemented, InvalidRequest, IdentifierNotUnique {
440
		return impl.hasReservation(session, subject, pid);
441

    
442
	}
443

    
444
	@Override
445
	public ChecksumAlgorithmList listChecksumAlgorithms()
446
			throws ServiceFailure, NotImplemented {
447
		return impl.listChecksumAlgorithms();
448
	}
449

    
450
	@Override
451
	public ObjectFormatList listFormats() throws ServiceFailure, NotImplemented {
452
		org.dataone.service.types.v2.ObjectFormatList formats = impl.listFormats();
453
		ObjectFormatList retFormats = null;
454
		try {
455
			retFormats = TypeMarshaller.convertTypeFromType(formats, ObjectFormatList.class);
456
		} catch (Exception e) {
457
			// report as service failure
458
			ServiceFailure sf = new ServiceFailure("4841", e.getMessage());
459
			sf.initCause(e);
460
			throw sf;
461
		}
462
		return retFormats;
463
	}
464

    
465
	@Override
466
	public NodeList listNodes() throws NotImplemented, ServiceFailure {
467
		org.dataone.service.types.v2.NodeList nodes = impl.listNodes();
468
		NodeList retNodes = null;
469
		try {
470
			retNodes = TypeMarshaller.convertTypeFromType(nodes, NodeList.class);
471
		} catch (Exception e) {
472
			// report as service failure
473
			ServiceFailure sf = new ServiceFailure("4801", e.getMessage());
474
			sf.initCause(e);
475
			throw sf;
476
		}
477
		return retNodes;
478
	}
479

    
480
	@Override
481
	public Date ping() throws NotImplemented, ServiceFailure,
482
			InsufficientResources {
483
		return impl.ping();
484
	}
485

    
486
	@Override
487
	public Identifier registerSystemMetadata(Identifier pid,
488
			SystemMetadata sysmeta) throws NotImplemented, NotAuthorized,
489
			ServiceFailure, InvalidRequest, InvalidSystemMetadata, InvalidToken {
490
		return this.registerSystemMetadata(null, pid, sysmeta);
491
		
492
	}
493

    
494
	@Override
495
	@Deprecated
496
	public Identifier registerSystemMetadata(Session session, Identifier pid,
497
			SystemMetadata sysmeta) throws NotImplemented, NotAuthorized,
498
			ServiceFailure, InvalidRequest, InvalidSystemMetadata, InvalidToken {
499
		//convert sysmeta to newer version
500
		org.dataone.service.types.v2.SystemMetadata v2Sysmeta = null;
501
		try {
502
			v2Sysmeta = TypeMarshaller.convertTypeFromType(sysmeta, org.dataone.service.types.v2.SystemMetadata.class);
503
		} catch (Exception e) {
504
			// report as service failure
505
			ServiceFailure sf = new ServiceFailure("1030", e.getMessage());
506
			sf.initCause(e);
507
			throw sf;
508
		}
509
		
510
		return impl.registerSystemMetadata(session, pid, v2Sysmeta);
511
	}
512

    
513
	@Override
514
	public Identifier reserveIdentifier(Identifier pid) throws InvalidToken,
515
			ServiceFailure, NotAuthorized, IdentifierNotUnique, NotImplemented,
516
			InvalidRequest {
517
		return impl.reserveIdentifier(null, pid);
518
	}
519

    
520
	@Override
521
	@Deprecated
522
	public Identifier reserveIdentifier(Session session, Identifier pid)
523
			throws InvalidToken, ServiceFailure, NotAuthorized,
524
			IdentifierNotUnique, NotImplemented, InvalidRequest {
525
		return impl.reserveIdentifier(session, pid);
526
	}
527

    
528
	@Override
529
	public boolean setObsoletedBy(Identifier pid, Identifier obsoletedByPid, long serialVersion)
530
			throws NotImplemented, NotFound, NotAuthorized, ServiceFailure,
531
			InvalidRequest, InvalidToken, VersionMismatch {
532
		return impl.setObsoletedBy(null, pid, obsoletedByPid, serialVersion);
533
	}
534

    
535
	@Override
536
	@Deprecated
537
	public boolean setObsoletedBy(Session session, Identifier pid, Identifier obsoletedByPid, long serialVersion) 
538
			throws NotImplemented, NotFound,
539
			NotAuthorized, ServiceFailure, InvalidRequest, InvalidToken,
540
			VersionMismatch {
541
		return impl.setObsoletedBy(session, pid, obsoletedByPid, serialVersion);
542

    
543
	}
544

    
545
	@Override
546
	public boolean isAuthorized(Identifier pid, Permission permission)
547
			throws ServiceFailure, InvalidToken, NotFound, NotAuthorized,
548
			NotImplemented, InvalidRequest {
549
		return impl.isAuthorized(null, pid, permission);
550
	}
551

    
552
	@Override
553
	@Deprecated
554
	public boolean isAuthorized(Session session, Identifier pid, Permission permission)
555
			throws ServiceFailure, InvalidToken, NotFound, NotAuthorized,
556
			NotImplemented, InvalidRequest {
557
		return impl.isAuthorized(session, pid, permission);
558
	}
559

    
560
	@Override
561
	public boolean setAccessPolicy(Identifier pid,
562
			AccessPolicy accessPolicy, long serialVersion)
563
			throws InvalidToken, NotFound, NotImplemented, NotAuthorized,
564
			ServiceFailure, InvalidRequest, VersionMismatch {
565
		return impl.setAccessPolicy(null, pid, accessPolicy, serialVersion);
566
	}
567

    
568
	@Override
569
	@Deprecated
570
	public boolean setAccessPolicy(Session session, Identifier pid,
571
			AccessPolicy accessPolicy, long serialVersion) throws InvalidToken, NotFound,
572
			NotImplemented, NotAuthorized, ServiceFailure, InvalidRequest,
573
			VersionMismatch {
574
		return impl.setAccessPolicy(session, pid, accessPolicy, serialVersion);
575
	}
576

    
577
	@Override
578
	public Identifier setRightsHolder(Identifier pid, Subject userId, long serialVersion)
579
			throws InvalidToken, ServiceFailure, NotFound, NotAuthorized,
580
			NotImplemented, InvalidRequest, VersionMismatch {
581
		return impl.setRightsHolder(null, pid, userId, serialVersion);
582
	}
583

    
584
	@Override
585
	@Deprecated
586
	public Identifier setRightsHolder(Session session, Identifier pid,
587
			Subject userId, long serialVersion) throws InvalidToken, ServiceFailure,
588
			NotFound, NotAuthorized, NotImplemented, InvalidRequest,
589
			VersionMismatch {
590
		return impl.setRightsHolder(session, pid, userId, serialVersion);
591

    
592
	}
593

    
594
}
(1-1/2)