2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.cdm
.api
.service
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Iterator
;
13 import java
.util
.List
;
15 import java
.util
.UUID
;
17 import org
.hibernate
.ObjectDeletedException
;
18 import org
.hibernate
.envers
.query
.criteria
.AuditCriterion
;
19 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
20 import org
.springframework
.transaction
.annotation
.Transactional
;
22 import eu
.etaxonomy
.cdm
.api
.service
.config
.DeleteConfiguratorBase
;
23 import eu
.etaxonomy
.cdm
.api
.service
.exception
.ReferencedObjectUndeletableException
;
24 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
25 import eu
.etaxonomy
.cdm
.api
.service
.pager
.impl
.DefaultPagerImpl
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.VersionableEntity
;
28 import eu
.etaxonomy
.cdm
.model
.view
.AuditEvent
;
29 import eu
.etaxonomy
.cdm
.model
.view
.AuditEventRecord
;
30 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.AuditEventSort
;
31 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IVersionableDao
;
33 public abstract class VersionableServiceBase
<T
extends VersionableEntity
, DAO
extends IVersionableDao
<T
>> extends ServiceBase
<T
,DAO
> implements IVersionableService
<T
> {
36 protected ICommonService commonService
;
39 @Transactional(readOnly
= true)
40 public Pager
<AuditEventRecord
<T
>> pageAuditEvents(T t
, Integer pageSize
, Integer pageNumber
, AuditEventSort sort
, List
<String
> propertyPaths
) {
41 long numberOfResults
= dao
.countAuditEvents(t
, sort
);
43 List
<AuditEventRecord
<T
>> results
= new ArrayList
<>();
44 if(numberOfResults
> 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
45 results
= dao
.getAuditEvents(t
, pageSize
, pageNumber
, sort
,propertyPaths
);
48 return new DefaultPagerImpl
<>(pageNumber
, numberOfResults
, pageSize
, results
);
52 @Transactional(readOnly
= true)
53 public AuditEventRecord
<T
> getNextAuditEvent(T t
) {
54 return dao
.getNextAuditEvent(t
);
58 @Transactional(readOnly
= true)
59 public AuditEventRecord
<T
> getPreviousAuditEvent(T t
) {
60 return dao
.getPreviousAuditEvent(t
);
64 @Transactional(readOnly
= true)
65 public Pager
<AuditEventRecord
<T
>> pageAuditEvents(Class
<?
extends T
> clazz
,AuditEvent from
,AuditEvent to
, List
<AuditCriterion
> criteria
, Integer pageSize
, Integer pageNumber
, AuditEventSort sort
,List
<String
> propertyPaths
) {
66 long numberOfResults
= dao
.countAuditEvents(clazz
, from
, to
, criteria
);
68 List
<AuditEventRecord
<T
>> results
= new ArrayList
<>();
69 if(numberOfResults
> 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
70 results
= dao
.getAuditEvents(clazz
,from
,to
,criteria
, pageSize
, pageNumber
, sort
,propertyPaths
);
73 return new DefaultPagerImpl
<>(pageNumber
, numberOfResults
, pageSize
, results
);
77 * the basic isDeletable method return false if the object is referenced from any other object.
81 @Transactional(readOnly
= true)
82 public DeleteResult
isDeletable(UUID baseUUID
, DeleteConfiguratorBase config
){
83 DeleteResult result
= new DeleteResult();
84 T base
= this.find(baseUUID
);
87 result
.addException(new ObjectDeletedException("The object was already deleted.", baseUUID
, null));
89 Set
<CdmBase
> references
= commonService
.getReferencingObjectsForDeletion(base
);
90 if (references
!= null){
91 result
.addRelatedObjects(references
);
92 Iterator
<CdmBase
> iterator
= references
.iterator();
94 while (iterator
.hasNext()){
95 ref
= iterator
.next();
96 String message
= "An object of " + ref
.getClass().getName() + " with ID " + ref
.getId() + " is referencing the object" ;
97 result
.addException(new ReferencedObjectUndeletableException(message
));