Merged latest trunk updates to branch
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / VersionableServiceBase.java
index 8c18019965ec5dfbf54235e071d4cc72f0ee190c..8911dc678e76ff67a61843b3ad6c037785cd2c4c 100644 (file)
@@ -12,37 +12,50 @@ package eu.etaxonomy.cdm.api.service;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.hibernate.envers.query.criteria.AuditCriterion;
 import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
+import eu.etaxonomy.cdm.model.view.AuditEvent;
 import eu.etaxonomy.cdm.model.view.AuditEventRecord;
 import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
 import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao;
 
-@Transactional(readOnly = true)
 public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
 
-       public Pager<AuditEventRecord<T>> getAuditEvents(T t, Integer pageSize, Integer pageNumber, AuditEventSort sort) {
+       @Transactional(readOnly = true)
+       public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize,        Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
                Integer numberOfResults = dao.countAuditEvents(t, sort);
                        
                List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
-               if(numberOfResults > 0) { // no point checking again
-                       results = dao.getAuditEvents(t, pageSize, pageNumber, sort);
+               if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
+                       results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths);
                }
                
                return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
        }
 
+       @Transactional(readOnly = true)
        public AuditEventRecord<T> getNextAuditEvent(T t) {
                return dao.getNextAuditEvent(t);
        }
 
+       @Transactional(readOnly = true)
        public AuditEventRecord<T> getPreviousAuditEvent(T t) {
                return dao.getPreviousAuditEvent(t);
        }
-
        
-
+       @Transactional(readOnly = true)
+       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) {
+               Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
+               
+               List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
+               if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
+                       results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths);
+               }
+               
+               return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
+       }
 }