Project

General

Profile

Download (40.8 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2013 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.editor.view.dataimport.transientServices;
11

    
12
import java.io.IOException;
13
import java.util.Collection;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Map;
17
import java.util.Set;
18
import java.util.UUID;
19

    
20
import org.apache.lucene.index.CorruptIndexException;
21
import org.apache.lucene.queryParser.ParseException;
22
import org.hibernate.LockOptions;
23
import org.hibernate.Session;
24
import org.hibernate.criterion.Criterion;
25
import org.hibernate.envers.query.criteria.AuditCriterion;
26
import org.hibernate.search.spatial.impl.Rectangle;
27

    
28
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
29
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
30
import eu.etaxonomy.cdm.api.service.DeleteResult;
31
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
32
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
33
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
34
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
35
import eu.etaxonomy.cdm.api.service.dto.DerivateHierarchyDTO;
36
import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
37
import eu.etaxonomy.cdm.api.service.pager.Pager;
38
import eu.etaxonomy.cdm.api.service.search.SearchResult;
39
import eu.etaxonomy.cdm.api.service.util.TaxonRelationshipEdge;
40
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
41
import eu.etaxonomy.cdm.model.agent.AgentBase;
42
import eu.etaxonomy.cdm.model.common.Annotation;
43
import eu.etaxonomy.cdm.model.common.CdmBase;
44
import eu.etaxonomy.cdm.model.common.DefinedTerm;
45
import eu.etaxonomy.cdm.model.common.ICdmBase;
46
import eu.etaxonomy.cdm.model.common.ISourceable;
47
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
48
import eu.etaxonomy.cdm.model.common.LSID;
49
import eu.etaxonomy.cdm.model.common.Language;
50
import eu.etaxonomy.cdm.model.common.Marker;
51
import eu.etaxonomy.cdm.model.common.MarkerType;
52
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
53
import eu.etaxonomy.cdm.model.description.DescriptionBase;
54
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
55
import eu.etaxonomy.cdm.model.location.Country;
56
import eu.etaxonomy.cdm.model.media.Media;
57
import eu.etaxonomy.cdm.model.media.Rights;
58
import eu.etaxonomy.cdm.model.molecular.DnaSample;
59
import eu.etaxonomy.cdm.model.molecular.Sequence;
60
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
61
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
62
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
63
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
64
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
65
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
66
import eu.etaxonomy.cdm.model.taxon.Taxon;
67
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
68
import eu.etaxonomy.cdm.model.view.AuditEvent;
69
import eu.etaxonomy.cdm.model.view.AuditEventRecord;
70
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
71
import eu.etaxonomy.cdm.persistence.query.Grouping;
72
import eu.etaxonomy.cdm.persistence.query.MatchMode;
73
import eu.etaxonomy.cdm.persistence.query.OrderHint;
74
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
75
import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
76
import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
77

    
78
/**
79
 * @author pplitzner
80
 * @date 26.09.2013
81
 *
82
 */
83
public class TransientOccurenceService implements IOccurrenceService {
84

    
85
    private final IOccurrenceService defaultService;
86
    private final Collection<SpecimenOrObservationBase<?>> units;
87

    
88
    /**
89
     * @param defaultService
90
     */
91
    public TransientOccurenceService(IOccurrenceService defaultService) {
92
        this.defaultService = defaultService;
93
        this.units = new HashSet<SpecimenOrObservationBase<?>>();
94
    }
95

    
96
    /**
97
     * @param t
98
     * @param pageSize
99
     * @param pageNumber
100
     * @param sort
101
     * @param propertyPaths
102
     * @return
103
     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(eu.etaxonomy.cdm.model.common.VersionableEntity, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
104
     */
105
    @Override
106
    public Pager<AuditEventRecord<SpecimenOrObservationBase>> pageAuditEvents(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
107
        return defaultService.pageAuditEvents(t, pageSize, pageNumber, sort, propertyPaths);
108
    }
109

    
110
    /**
111
     * @param annotatedObj
112
     * @param status
113
     * @param pageSize
114
     * @param pageNumber
115
     * @param orderHints
116
     * @param propertyPaths
117
     * @return
118
     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getAnnotations(eu.etaxonomy.cdm.model.common.AnnotatableEntity, eu.etaxonomy.cdm.model.common.MarkerType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
119
     */
120
    @Override
121
    public Pager<Annotation> getAnnotations(SpecimenOrObservationBase annotatedObj, MarkerType status, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
122
        return defaultService.getAnnotations(annotatedObj, status, pageSize, pageNumber, orderHints, propertyPaths);
123
    }
124

    
125
    /**
126
     *
127
     * @see eu.etaxonomy.cdm.api.service.IService#clear()
128
     */
129
    @Override
130
    public void clear() {
131
        defaultService.clear();
132
    }
133

    
134
    /**
135
     * @param t
136
     * @param lockMode
137
     * @see eu.etaxonomy.cdm.api.service.IService#lock(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode)
138
     */
139
    @Override
140
    public void lock(SpecimenOrObservationBase t, LockOptions lockOptions) {
141
        defaultService.lock(t, lockOptions);
142
    }
143

    
144
    /**
145
     * @param t
146
     * @param lockMode
147
     * @param propertyPaths
148
     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase, org.hibernate.LockMode, java.util.List)
149
     */
150
    @Override
151
    public void refresh(SpecimenOrObservationBase t, LockOptions lockOptions, List<String> propertyPaths) {
152
        defaultService.refresh(t, lockOptions, propertyPaths);
153
    }
154

    
155
    /**
156
     *
157
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache()
158
     */
159
    @Override
160
    public void updateTitleCache() {
161
        defaultService.updateTitleCache();
162
    }
163

    
164
    /**
165
     * @param t
166
     * @return
167
     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getNextAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
168
     */
169
    @Override
170
    public AuditEventRecord<SpecimenOrObservationBase> getNextAuditEvent(SpecimenOrObservationBase t) {
171
        return defaultService.getNextAuditEvent(t);
172
    }
173

    
174
    /**
175
     * @param annotatableEntity
176
     * @param technical
177
     * @param pageSize
178
     * @param pageNumber
179
     * @param orderHints
180
     * @param propertyPaths
181
     * @return
182
     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#getMarkers(eu.etaxonomy.cdm.model.common.AnnotatableEntity, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
183
     */
184
    @Override
185
    public Pager<Marker> getMarkers(SpecimenOrObservationBase annotatableEntity, Boolean technical, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
186
        return defaultService.getMarkers(annotatableEntity, technical, pageSize, pageNumber, orderHints, propertyPaths);
187
    }
188

    
189
    /**
190
     * @param clazz
191
     * @param stepSize
192
     * @param cacheStrategy
193
     * @param monitor
194
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Class, java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy, eu.etaxonomy.cdm.common.monitor.IProgressMonitor)
195
     */
196
    @Override
197
    public void updateTitleCache(Class<? extends SpecimenOrObservationBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<SpecimenOrObservationBase> cacheStrategy, IProgressMonitor monitor) {
198
        defaultService.updateTitleCache(clazz, stepSize, cacheStrategy, monitor);
199
    }
200

    
201
    /**
202
     * @param t
203
     * @return
204
     * @see eu.etaxonomy.cdm.api.service.IVersionableService#getPreviousAuditEvent(eu.etaxonomy.cdm.model.common.VersionableEntity)
205
     */
206
    @Override
207
    public AuditEventRecord<SpecimenOrObservationBase> getPreviousAuditEvent(SpecimenOrObservationBase t) {
208
        return defaultService.getPreviousAuditEvent(t);
209
    }
210

    
211
    /**
212
     * @param iso639
213
     * @return
214
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getCountryByIso(java.lang.String)
215
     */
216
    @Override
217
    public Country getCountryByIso(String iso639) {
218
        return defaultService.getCountryByIso(iso639);
219
    }
220

    
221
    /**
222
     * @param clazz
223
     * @return
224
     * @see eu.etaxonomy.cdm.api.service.IService#count(java.lang.Class)
225
     */
226
    @Override
227
    public int count(Class<? extends SpecimenOrObservationBase> clazz) {
228
        return defaultService.count(clazz);
229
    }
230

    
231
    /**
232
     * @param name
233
     * @return
234
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getCountryByName(java.lang.String)
235
     */
236
    @Override
237
    public List<Country> getCountryByName(String name) {
238
        return defaultService.getCountryByName(name);
239
    }
240

    
241
    /**
242
     * @param type
243
     * @param determinedAs
244
     * @param limit
245
     * @param start
246
     * @param orderHints
247
     * @param propertyPaths
248
     * @return
249
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#list(java.lang.Class, eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
250
     */
251
    @Override
252
    public Pager<SpecimenOrObservationBase> list(Class<? extends SpecimenOrObservationBase> type, TaxonBase determinedAs, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
253
        return defaultService.list(type, determinedAs, limit, start, orderHints, propertyPaths);
254
    }
255

    
256
    /**
257
     * @param clazz
258
     * @param from
259
     * @param to
260
     * @param criteria
261
     * @param pageSize
262
     * @param pageValue
263
     * @param sort
264
     * @param propertyPaths
265
     * @return
266
     * @see eu.etaxonomy.cdm.api.service.IVersionableService#pageAuditEvents(java.lang.Class, eu.etaxonomy.cdm.model.view.AuditEvent, eu.etaxonomy.cdm.model.view.AuditEvent, java.util.List, java.lang.Integer, java.lang.Integer, eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort, java.util.List)
267
     */
268
    @Override
269
    public Pager<AuditEventRecord<SpecimenOrObservationBase>> pageAuditEvents(Class<? extends SpecimenOrObservationBase> clazz, AuditEvent from, AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageValue, AuditEventSort sort, List<String> propertyPaths) {
270
        return defaultService.pageAuditEvents(clazz, from, to, criteria, pageSize, pageValue, sort, propertyPaths);
271
    }
272

    
273
    /**
274
     * @param lsid
275
     * @return
276
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#find(eu.etaxonomy.cdm.model.common.LSID)
277
     */
278
    @Override
279
    public SpecimenOrObservationBase find(LSID lsid) {
280
        return defaultService.find(lsid);
281
    }
282

    
283
    /**
284
     * @param persistentObject
285
     * @return
286
     * @see eu.etaxonomy.cdm.api.service.IService#delete(eu.etaxonomy.cdm.model.common.ICdmBase)
287
     */
288
    @Override
289
    public DeleteResult delete(SpecimenOrObservationBase persistentObject) {
290
        return defaultService.delete(persistentObject);
291
    }
292

    
293
    /**
294
     * @param clazz
295
     * @param technical
296
     * @param pageSize
297
     * @param pageNumber
298
     * @param propertyPaths
299
     * @return
300
     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#groupMarkers(java.lang.Class, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.util.List)
301
     */
302
    @Override
303
    public List<Object[]> groupMarkers(Class<? extends SpecimenOrObservationBase> clazz, Boolean technical, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
304
        return defaultService.groupMarkers(clazz, technical, pageSize, pageNumber, propertyPaths);
305
    }
306

    
307
    /**
308
     * @param uuid
309
     * @return
310
     * @see eu.etaxonomy.cdm.api.service.IService#exists(java.util.UUID)
311
     */
312
    @Override
313
    public boolean exists(UUID uuid) {
314
        return defaultService.exists(uuid);
315
    }
316

    
317
    /**
318
     * @param x
319
     * @param y
320
     * @return
321
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#replace(eu.etaxonomy.cdm.model.common.IdentifiableEntity, eu.etaxonomy.cdm.model.common.IdentifiableEntity)
322
     */
323
    @Override
324
    public SpecimenOrObservationBase replace(SpecimenOrObservationBase x, SpecimenOrObservationBase y) {
325
        return defaultService.replace(x, y);
326
    }
327

    
328
    /**
329
     * @param uuidSet
330
     * @return
331
     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.Set)
332
     */
333
    @Override
334
    public List<SpecimenOrObservationBase> find(Set<UUID> uuidSet) {
335
        return defaultService.find(uuidSet);
336
    }
337

    
338
    /**
339
     * @param t
340
     * @param pageSize
341
     * @param pageNumber
342
     * @param propertyPaths
343
     * @return
344
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSources(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
345
     */
346
    @Override
347
    public Pager<IdentifiableSource> getSources(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
348
        return defaultService.getSources(t, pageSize, pageNumber, propertyPaths);
349
    }
350

    
351
    /**
352
     * @param uuid
353
     * @return
354
     * @see eu.etaxonomy.cdm.api.service.IService#find(java.util.UUID)
355
     */
356
    @Override
357
    public SpecimenOrObservationBase find(UUID uuid) {
358
        return defaultService.find(uuid);
359
    }
360

    
361
    /**
362
     * @param id
363
     * @return
364
     * @see eu.etaxonomy.cdm.api.service.IService#find(int)
365
     */
366
    @Override
367
    public SpecimenOrObservationBase find(int id) {
368
        return defaultService.find(id);
369
    }
370

    
371
    /**
372
     * @param t
373
     * @param pageSize
374
     * @param pageNumber
375
     * @param propertyPaths
376
     * @return
377
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getRights(eu.etaxonomy.cdm.model.common.IdentifiableEntity, java.lang.Integer, java.lang.Integer, java.util.List)
378
     */
379
    @Override
380
    public Pager<Rights> getRights(SpecimenOrObservationBase t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
381
        return defaultService.getRights(t, pageSize, pageNumber, propertyPaths);
382
    }
383

    
384
    /**
385
     * @param clazz
386
     * @param technical
387
     * @return
388
     * @see eu.etaxonomy.cdm.api.service.IAnnotatableService#countMarkers(java.lang.Class, java.lang.Boolean)
389
     */
390
    @Override
391
    public int countMarkers(Class<? extends SpecimenOrObservationBase> clazz, Boolean technical) {
392
        return defaultService.countMarkers(clazz, technical);
393
    }
394

    
395
    /**
396
     * @param occurence
397
     * @param pageSize
398
     * @param pageNumber
399
     * @param propertyPaths
400
     * @return
401
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getMedia(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List)
402
     */
403
    @Override
404
    public Pager<Media> getMedia(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
405
        return defaultService.getMedia(occurence, pageSize, pageNumber, propertyPaths);
406
    }
407

    
408
    /**
409
     * @param idSet
410
     * @return
411
     * @see eu.etaxonomy.cdm.api.service.IService#findById(java.util.Set)
412
     */
413
    @Override
414
    public List<SpecimenOrObservationBase> findById(Set<Integer> idSet) {
415
        return defaultService.findById(idSet);
416
    }
417

    
418
    /**
419
     * @param clazz
420
     * @param idInSource
421
     * @param idNamespace
422
     * @return
423
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getSourcedObjectByIdInSource(java.lang.Class, java.lang.String, java.lang.String)
424
     */
425
    @Override
426
    public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
427
        return defaultService.getSourcedObjectByIdInSource(clazz, idInSource, idNamespace);
428
    }
429

    
430
    /**
431
     * @return
432
     * @see eu.etaxonomy.cdm.api.service.IService#getSession()
433
     */
434
    @Override
435
    public Session getSession() {
436
        return defaultService.getSession();
437
    }
438

    
439
    /**
440
     * @return
441
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getUuidAndTitleCache()
442
     */
443
    @Override
444
    public List<UuidAndTitleCache<SpecimenOrObservationBase>> getUuidAndTitleCache() {
445
        return defaultService.getUuidAndTitleCache();
446
    }
447

    
448
    /**
449
     * @param clazz
450
     * @param limit
451
     * @param start
452
     * @param groups
453
     * @param propertyPaths
454
     * @return
455
     * @see eu.etaxonomy.cdm.api.service.IService#group(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
456
     */
457
    @Override
458
    public List<Object[]> group(Class<? extends SpecimenOrObservationBase> clazz, Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {
459
        return defaultService.group(clazz, limit, start, groups, propertyPaths);
460
    }
461

    
462
    /**
463
     * @param occurence
464
     * @param taxonBase
465
     * @param pageSize
466
     * @param pageNumber
467
     * @param propertyPaths
468
     * @return
469
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDeterminations(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.taxon.TaxonBase, java.lang.Integer, java.lang.Integer, java.util.List)
470
     */
471
    @Override
472
    public Pager<DeterminationEvent> getDeterminations(SpecimenOrObservationBase occurence, TaxonBase taxonBase, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
473
        return defaultService.getDeterminations(occurence, taxonBase, pageSize, pageNumber, propertyPaths);
474
    }
475

    
476
    /**
477
     * @param clazz
478
     * @param queryString
479
     * @param matchmode
480
     * @param criteria
481
     * @param pageSize
482
     * @param pageNumber
483
     * @param orderHints
484
     * @param propertyPaths
485
     * @return
486
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
487
     */
488
    @Override
489
    public Pager<SpecimenOrObservationBase> findByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
490
        return defaultService.findByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
491
    }
492

    
493
    /**
494
     * @param occurence
495
     * @param pageSize
496
     * @param pageNumber
497
     * @param propertyPaths
498
     * @return
499
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivationEvents(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List)
500
     */
501
    @Override
502
    public Pager<DerivationEvent> getDerivationEvents(SpecimenOrObservationBase occurence, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
503
        return defaultService.getDerivationEvents(occurence, pageSize, pageNumber, propertyPaths);
504
    }
505

    
506
    /**
507
     * @param type
508
     * @param limit
509
     * @param start
510
     * @param orderHints
511
     * @param propertyPaths
512
     * @return
513
     * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
514
     */
515
    @Override
516
    public <S extends SpecimenOrObservationBase> List<S> list(Class<S> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
517
        return defaultService.list(type, limit, start, orderHints, propertyPaths);
518
    }
519

    
520
    /**
521
     * @param clazz
522
     * @param query
523
     * @param pageSize
524
     * @param pageNumber
525
     * @param orderHints
526
     * @param propertyPaths
527
     * @return
528
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#search(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
529
     */
530
    @Override
531
    public Pager<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String query, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
532
        return defaultService.search(clazz, query, pageSize, pageNumber, orderHints, propertyPaths);
533
    }
534

    
535
    /**
536
     * @param configurator
537
     * @return
538
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
539
     */
540
    @Override
541
    public Pager<SpecimenOrObservationBase> findByTitle(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> configurator) {
542
        return defaultService.findByTitle(configurator);
543
    }
544

    
545
    /**
546
     * @param clazz
547
     * @param queryString
548
     * @param matchmode
549
     * @param criteria
550
     * @return
551
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List)
552
     */
553
    @Override
554
    public Integer countByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria) {
555
        return defaultService.countByTitle(clazz, queryString, matchmode, criteria);
556
    }
557

    
558
    /**
559
     * @param uuid
560
     * @return
561
     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID)
562
     */
563
    @Override
564
    public SpecimenOrObservationBase load(UUID uuid) {
565
        return defaultService.load(uuid);
566
    }
567

    
568
    /**
569
     * @param uuid
570
     * @param propertyPaths
571
     * @return
572
     * @see eu.etaxonomy.cdm.api.service.IService#load(java.util.UUID, java.util.List)
573
     */
574
    @Override
575
    public SpecimenOrObservationBase load(UUID uuid, List<String> propertyPaths) {
576
        return defaultService.load(uuid, propertyPaths);
577
    }
578

    
579
    /**
580
     * @param configurator
581
     * @return
582
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#countByTitle(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
583
     */
584
    @Override
585
    public Integer countByTitle(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> configurator) {
586
        return defaultService.countByTitle(configurator);
587
    }
588

    
589
    /**
590
     * @return
591
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getFieldUnitUuidAndTitleCache()
592
     */
593
    @Override
594
    public List<UuidAndTitleCache<FieldUnit>> getFieldUnitUuidAndTitleCache() {
595
        return defaultService.getFieldUnitUuidAndTitleCache();
596
    }
597

    
598
    /**
599
     * @return
600
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivedUnitUuidAndTitleCache()
601
     */
602
    @Override
603
    public List<UuidAndTitleCache<DerivedUnit>> getDerivedUnitUuidAndTitleCache() {
604
        return defaultService.getDerivedUnitUuidAndTitleCache();
605
    }
606

    
607
    /**
608
     * @param transientObject
609
     * @return
610
     * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase)
611
     */
612
    @Override
613
    public SpecimenOrObservationBase merge(SpecimenOrObservationBase transientObject) {
614
        return defaultService.merge(transientObject);
615
    }
616

    
617
    /**
618
     * @param derivedUnit
619
     * @param propertyPaths
620
     * @return
621
     * @throws DerivedUnitFacadeNotSupportedException
622
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getDerivedUnitFacade(eu.etaxonomy.cdm.model.occurrence.DerivedUnit, java.util.List)
623
     */
624
    @Override
625
    public DerivedUnitFacade getDerivedUnitFacade(DerivedUnit derivedUnit, List<String> propertyPaths) throws DerivedUnitFacadeNotSupportedException {
626
        return defaultService.getDerivedUnitFacade(derivedUnit, propertyPaths);
627
    }
628

    
629
    /**
630
     * @param clazz
631
     * @param queryString
632
     * @param matchmode
633
     * @param criteria
634
     * @param pageSize
635
     * @param pageNumber
636
     * @param orderHints
637
     * @param propertyPaths
638
     * @return
639
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
640
     */
641
    @Override
642
    public List<SpecimenOrObservationBase> listByTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
643
        return defaultService.listByTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
644
    }
645

    
646
    /**
647
     * @param description
648
     * @param propertyPaths
649
     * @return
650
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listDerivedUnitFacades(eu.etaxonomy.cdm.model.description.DescriptionBase, java.util.List)
651
     */
652
    @Override
653
    public List<DerivedUnitFacade> listDerivedUnitFacades(DescriptionBase description, List<String> propertyPaths) {
654
        return defaultService.listDerivedUnitFacades(description, propertyPaths);
655
    }
656

    
657
    /**
658
     * @param type
659
     * @param pageSize
660
     * @param pageNumber
661
     * @param orderHints
662
     * @param propertyPaths
663
     * @return
664
     * @see eu.etaxonomy.cdm.api.service.IService#page(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
665
     */
666
    @Override
667
    public <S extends SpecimenOrObservationBase> Pager<S> page(Class<S> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
668
        return defaultService.page(type, pageSize, pageNumber, orderHints, propertyPaths);
669
    }
670

    
671
    /**
672
     * @param type
673
     * @param includeRelationships
674
     * @param associatedTaxon
675
     * @param maxDepth
676
     * @param pageSize
677
     * @param pageNumber
678
     * @param orderHints
679
     * @param propertyPaths
680
     * @return
681
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listByAssociatedTaxon(java.lang.Class, java.util.Set, eu.etaxonomy.cdm.model.taxon.Taxon, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
682
     */
683
    @Override
684
    public <T extends SpecimenOrObservationBase> List<T> listByAssociatedTaxon(Class<T> type, Set<TaxonRelationshipEdge> includeRelationships, Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
685
        return defaultService.listByAssociatedTaxon(type, includeRelationships, associatedTaxon, maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
686
    }
687

    
688
    /**
689
     * @param persistentObject
690
     * @return
691
     * @see eu.etaxonomy.cdm.api.service.IService#refresh(eu.etaxonomy.cdm.model.common.ICdmBase)
692
     */
693
    @Override
694
    public UUID refresh(SpecimenOrObservationBase persistentObject) {
695
        return defaultService.refresh(persistentObject);
696
    }
697

    
698
    /**
699
     * @param clazz
700
     * @param queryString
701
     * @param matchmode
702
     * @param criteria
703
     * @param pageSize
704
     * @param pageNumber
705
     * @param orderHints
706
     * @param propertyPaths
707
     * @return
708
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#listByReferenceTitle(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.persistence.query.MatchMode, java.util.List, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
709
     */
710
    @Override
711
    public List<SpecimenOrObservationBase> listByReferenceTitle(Class<? extends SpecimenOrObservationBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
712
        return defaultService.listByReferenceTitle(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
713
    }
714

    
715
    /**
716
     * @param tableName
717
     * @param limit
718
     * @param start
719
     * @return
720
     * @see eu.etaxonomy.cdm.api.service.IService#rows(java.lang.String, int, int)
721
     */
722
    @Override
723
    public List<SpecimenOrObservationBase> rows(String tableName, int limit, int start) {
724
        return defaultService.rows(tableName, limit, start);
725
    }
726

    
727
    /**
728
     * @param newInstances
729
     * @return
730
     * @see eu.etaxonomy.cdm.api.service.IService#save(java.util.Collection)
731
     */
732
    @Override
733
    public Map<UUID, SpecimenOrObservationBase> save(Collection<SpecimenOrObservationBase> newInstances) {
734
        for(SpecimenOrObservationBase unit:newInstances){
735
            save(unit);
736
        }
737
        return null;
738
    }
739

    
740
    /**
741
     * @param type
742
     * @param includeRelationships
743
     * @param associatedTaxon
744
     * @param maxDepth
745
     * @param pageSize
746
     * @param pageNumber
747
     * @param orderHints
748
     * @param propertyPaths
749
     * @return
750
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#pageByAssociatedTaxon(java.lang.Class, java.util.Set, eu.etaxonomy.cdm.model.taxon.Taxon, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
751
     */
752
    @Override
753
    public <T extends SpecimenOrObservationBase> Pager<T> pageByAssociatedTaxon(Class<T> type, Set<TaxonRelationshipEdge> includeRelationships, Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
754
        return defaultService.pageByAssociatedTaxon(type, includeRelationships, associatedTaxon, maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
755
    }
756

    
757
    /**
758
     * @param newInstance
759
     * @return
760
     * @see eu.etaxonomy.cdm.api.service.IService#save(eu.etaxonomy.cdm.model.common.ICdmBase)
761
     */
762
    @Override
763
    public UUID save(SpecimenOrObservationBase newInstance) {
764
        units.add(newInstance);
765
        return null;
766
    }
767

    
768
    /**
769
     * @param transientObject
770
     * @return
771
     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(eu.etaxonomy.cdm.model.common.ICdmBase)
772
     */
773
    @Override
774
    public UUID saveOrUpdate(SpecimenOrObservationBase transientObject) {
775
        units.add(transientObject);
776
        return null;
777
    }
778

    
779
    /**
780
     * @param transientObjects
781
     * @return
782
     * @see eu.etaxonomy.cdm.api.service.IService#saveOrUpdate(java.util.Collection)
783
     */
784
    @Override
785
    public Map<UUID, SpecimenOrObservationBase> saveOrUpdate(Collection<SpecimenOrObservationBase> transientObjects) {
786
        for(SpecimenOrObservationBase unit:transientObjects){
787
            saveOrUpdate(unit);
788
        }
789
        return null;
790
    }
791

    
792
    /**
793
     * @param clazz
794
     * @param queryString
795
     * @param boundingBox
796
     * @param languages
797
     * @param highlightFragments
798
     * @param pageSize
799
     * @param pageNumber
800
     * @param orderHints
801
     * @param propertyPaths
802
     * @return
803
     * @throws CorruptIndexException
804
     * @throws IOException
805
     * @throws ParseException
806
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#findByFullText(java.lang.Class, java.lang.String, org.hibernate.search.spatial.impl.Rectangle, java.util.List, boolean, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
807
     */
808
    @Override
809
    public Pager<SearchResult<SpecimenOrObservationBase>> findByFullText(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Rectangle boundingBox, List<Language> languages, boolean highlightFragments, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException {
810
        return defaultService.findByFullText(clazz, queryString, boundingBox, languages, highlightFragments, pageSize, pageNumber, orderHints, propertyPaths);
811
    }
812

    
813
    /**
814
     * @param transientObject
815
     * @return
816
     * @see eu.etaxonomy.cdm.api.service.IService#update(eu.etaxonomy.cdm.model.common.ICdmBase)
817
     */
818
    @Override
819
    public UUID update(SpecimenOrObservationBase transientObject) {
820
        return defaultService.update(transientObject);
821
    }
822

    
823
    /**
824
     * @param example
825
     * @param includeProperties
826
     * @param limit
827
     * @param start
828
     * @param orderHints
829
     * @param propertyPaths
830
     * @return
831
     * @see eu.etaxonomy.cdm.api.service.IService#list(eu.etaxonomy.cdm.model.common.ICdmBase, java.util.Set, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
832
     */
833
    @Override
834
    public List<SpecimenOrObservationBase> list(SpecimenOrObservationBase example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
835
        return defaultService.list(example, includeProperties, limit, start, orderHints, propertyPaths);
836
    }
837

    
838
    /**
839
     * @param clazz
840
     * @param matchStrategy
841
     * @param mergeStrategy
842
     * @return
843
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#deduplicate(java.lang.Class, eu.etaxonomy.cdm.strategy.match.IMatchStrategy, eu.etaxonomy.cdm.strategy.merge.IMergeStrategy)
844
     */
845
    @Override
846
    public int deduplicate(Class<? extends SpecimenOrObservationBase> clazz, IMatchStrategy matchStrategy, IMergeStrategy mergeStrategy) {
847
        return defaultService.deduplicate(clazz, matchStrategy, mergeStrategy);
848
    }
849

    
850
    /**
851
     * @param clazz
852
     * @param queryString
853
     * @param pageSize
854
     * @param pageNumber
855
     * @param orderHints
856
     * @param matchMode
857
     * @return
858
     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#findTitleCache(java.lang.Class, java.lang.String, java.lang.Integer, java.lang.Integer, java.util.List, eu.etaxonomy.cdm.persistence.query.MatchMode)
859
     */
860
    @Override
861
    public Pager<SpecimenOrObservationBase> findTitleCache(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, MatchMode matchMode) {
862
        return defaultService.findTitleCache(clazz, queryString, pageSize, pageNumber, orderHints, matchMode);
863
    }
864

    
865
    /**
866
     * @return
867
     */
868
    public Collection<SpecimenOrObservationBase<?>> getUnits() {
869
        return units;
870
    }
871

    
872
    /* (non-Javadoc)
873
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getFieldUnits(java.util.UUID)
874
     */
875
    @Override
876
    public Collection<FieldUnit> getFieldUnits(UUID derivedUnitUuid) {
877
        return defaultService.getFieldUnits(derivedUnitUuid);
878
    }
879

    
880
    /* (non-Javadoc)
881
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#pageByAssociatedTaxon(java.lang.Class, java.util.Set, java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
882
     */
883
    @Override
884
    public <T extends SpecimenOrObservationBase> Pager<T> pageByAssociatedTaxon(Class<T> type,
885
            Set<TaxonRelationshipEdge> includeRelationships, String taxonUUID, Integer maxDepth, Integer pageSize,
886
            Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
887
        return defaultService.pageByAssociatedTaxon(type, includeRelationships, taxonUUID,
888
                maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
889
    }
890

    
891
    /* (non-Javadoc)
892
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveDerivate(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.DerivedUnit)
893
     */
894
    @Override
895
    public boolean moveDerivate(SpecimenOrObservationBase<?> from, SpecimenOrObservationBase<?> to, DerivedUnit derivate) {
896
        return defaultService.moveDerivate(from, to, derivate);
897
    }
898

    
899
    /* (non-Javadoc)
900
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveSequence(eu.etaxonomy.cdm.model.molecular.DnaSample, eu.etaxonomy.cdm.model.molecular.DnaSample, eu.etaxonomy.cdm.model.molecular.Sequence)
901
     */
902
    @Override
903
    public boolean moveSequence(DnaSample from, DnaSample to, Sequence sequence) {
904
        return defaultService.moveSequence(from, to, sequence);
905
    }
906

    
907
	@Override
908
	public DeleteResult isDeletable(SpecimenOrObservationBase object,
909
			DeleteConfiguratorBase config) {
910
		return defaultService.isDeletable(object, config);
911
	}
912

    
913
    /* (non-Javadoc)
914
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#countDeterminations(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.taxon.TaxonBase)
915
     */
916
    @Override
917
    public int countDeterminations(SpecimenOrObservationBase occurence, TaxonBase taxonbase) {
918
        return defaultService.countDeterminations(occurence, taxonbase);
919
    }
920

    
921
	@Override
922
	public SpecimenOrObservationBase findWithoutFlush(UUID uuid) {
923
		return defaultService.findWithoutFlush(uuid);
924
	}
925

    
926
    /* (non-Javadoc)
927
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listFieldUnitsByAssociatedTaxon(java.util.Set, eu.etaxonomy.cdm.model.taxon.Taxon, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
928
     */
929
    @Override
930
    public Collection<FieldUnit> listFieldUnitsByAssociatedTaxon(Set<TaxonRelationshipEdge> includeRelationships,
931
            Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
932
            List<String> propertyPaths) {
933
        return defaultService.listFieldUnitsByAssociatedTaxon(includeRelationships, associatedTaxon, maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
934
    }
935

    
936
    /* (non-Javadoc)
937
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#assembleDerivateHierarchyDTO(eu.etaxonomy.cdm.model.occurrence.FieldUnit, java.util.UUID)
938
     */
939
    @Override
940
    public DerivateHierarchyDTO assembleDerivateHierarchyDTO(FieldUnit fieldUnit, UUID associatedTaxonUuid) {
941
        return defaultService.assembleDerivateHierarchyDTO(fieldUnit, associatedTaxonUuid);
942
    }
943

    
944
    /* (non-Javadoc)
945
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#getNonCascadedAssociatedElements(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.api.conversation.ConversationHolder)
946
     */
947
    @Override
948
    public Collection<ICdmBase> getNonCascadedAssociatedElements(SpecimenOrObservationBase<?> specimen) {
949
        return defaultService.getNonCascadedAssociatedElements(specimen);
950
    }
951

    
952
    /* (non-Javadoc)
953
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteDerivateHierarchy(eu.etaxonomy.cdm.model.common.ICdmBase)
954
     */
955
    @Override
956
    public DeleteResult deleteDerivateHierarchy(CdmBase from, SpecimenDeleteConfigurator config) {
957
        return defaultService.deleteDerivateHierarchy(from, config);
958
    }
959

    
960
    /* (non-Javadoc)
961
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#delete(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator)
962
     */
963
    @Override
964
    public DeleteResult delete(SpecimenOrObservationBase<?> specimen, SpecimenDeleteConfigurator config) {
965
        return defaultService.delete(specimen, config);
966
    }
967

    
968
    /* (non-Javadoc)
969
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listIndividualsAssociations(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
970
     */
971
    @Override
972
    public Collection<IndividualsAssociation> listIndividualsAssociations(SpecimenOrObservationBase<?> specimen,
973
            Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
974
        return defaultService.listIndividualsAssociations(specimen, limit, start, orderHints, propertyPaths);
975
    }
976

    
977
    /* (non-Javadoc)
978
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listTypeDesignations(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
979
     */
980
    @Override
981
    public Collection<SpecimenTypeDesignation> listTypeDesignations(SpecimenOrObservationBase<?> specimen,
982
            Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {
983
        return defaultService.listTypeDesignations(specimen, limit, start, orderHints, propertyPaths);
984
    }
985

    
986
    /* (non-Javadoc)
987
     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#listDescriptionsWithDescriptionSpecimen(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
988
     */
989
    @Override
990
    public Collection<DescriptionBase<?>> listDescriptionsWithDescriptionSpecimen(
991
            SpecimenOrObservationBase<?> specimen, Integer limit, Integer start, List<OrderHint> orderHints,
992
            List<String> propertyPaths) {
993
        return defaultService.listDescriptionsWithDescriptionSpecimen(specimen, limit, start, orderHints, propertyPaths);
994
    }
995

    
996
	@Override
997
	public <S extends SpecimenOrObservationBase>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
998
		return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
999
	}
1000

    
1001
}
(7-7/10)