Project

General

Profile

Download (3.58 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9

    
10
package eu.etaxonomy.cdm.persistence.dao.hibernate.view;
11

    
12
import java.time.ZonedDateTime;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.hibernate.Hibernate;
17
import org.hibernate.Query;
18
import org.hibernate.envers.AuditReader;
19
import org.hibernate.envers.AuditReaderFactory;
20
import org.springframework.stereotype.Repository;
21

    
22
import eu.etaxonomy.cdm.model.view.AuditEvent;
23
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
24
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.DaoBase;
25
import eu.etaxonomy.cdm.persistence.view.IAuditEventDao;
26

    
27
@Repository
28
public class AuditEventDao extends DaoBase implements IAuditEventDao {
29

    
30
	protected AuditReader getAuditReader() {
31
		return AuditReaderFactory.get(getSession());
32
	}
33

    
34
	@Override
35
    public int count() {
36
		Query query = getSession().createQuery("select count(auditEvent) from AuditEvent auditEvent");
37

    
38
		return ((Long)query.uniqueResult()).intValue();
39
	}
40

    
41
	@Override
42
    public boolean exists(UUID uuid) {
43
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.uuid = :uuid");
44
		query.setParameter("uuid", uuid);
45
		return null != (AuditEvent)query.uniqueResult();
46
	}
47

    
48
	@Override
49
    public AuditEvent findById(Integer id) {
50
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.id = :id");
51
		query.setParameter("id", id);
52
		return (AuditEvent)query.uniqueResult();
53
	}
54

    
55
	@Override
56
    public AuditEvent findByUuid(UUID uuid) {
57
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.uuid = :uuid");
58
		query.setParameter("uuid", uuid);
59
		return (AuditEvent)query.uniqueResult();
60
	}
61

    
62
	@Override
63
    public AuditEvent getNextAuditEvent(AuditEvent auditEvent) {
64
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.revisionNumber = :revisionNumber + 1");
65
		query.setParameter("revisionNumber", auditEvent.getRevisionNumber());
66
		return (AuditEvent) query.uniqueResult();
67
	}
68

    
69
	@Override
70
    public AuditEvent getPreviousAuditEvent(AuditEvent auditEvent) {
71
		Query query = getSession().createQuery("select auditEvent from AuditEvent auditEvent where auditEvent.revisionNumber = :revisionNumber - 1");
72
		query.setParameter("revisionNumber", auditEvent.getRevisionNumber());
73
		return (AuditEvent) query.uniqueResult();
74
	}
75

    
76
	@Override
77
    public List<AuditEvent> list(Integer pageNumber, Integer pageSize, AuditEventSort sort) {
78
		if(sort == null) {
79
			sort = AuditEventSort.BACKWARDS;
80
		}
81

    
82
		Query query = null;
83

    
84
		if(sort.equals(AuditEventSort.FORWARDS)) {
85
			query = getSession().createQuery("select auditEvent from AuditEvent auditEvent order by auditEvent.timestamp asc");
86
		} else {
87
			query = getSession().createQuery("select auditEvent from AuditEvent auditEvent order by auditEvent.timestamp desc");
88
		}
89

    
90
		if(pageSize != null) {
91
		    query.setMaxResults(pageSize);
92
		    if(pageNumber != null) {
93
		        query.setFirstResult(pageNumber * pageSize);
94
		    } else {
95
		    	query.setFirstResult(0);
96
		    }
97
		}
98

    
99
		return query.list();
100
	}
101

    
102
	public AuditEvent findByDate(ZonedDateTime dateTime) {
103
		Number id = getAuditReader().getRevisionNumberForDate(java.util.Date.from ( dateTime.toInstant() ));
104
		AuditEvent auditEvent  =getSession().load(AuditEvent.class, id);
105
		Hibernate.initialize(auditEvent);
106
		return auditEvent;
107
	}
108
}
    (1-1/1)