1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sourceforge.mystique.infrastructure.persistence;
22
23 import java.util.List;
24
25 import javax.persistence.NoResultException;
26 import javax.persistence.Query;
27
28 import net.sourceforge.mystique.domain.entity.Confirmation;
29 import net.sourceforge.mystique.domain.entity.Ticket;
30 import net.sourceforge.mystique.domain.entity.User;
31 import net.sourceforge.mystique.domain.repository.ConfirmationRepository;
32 import net.sourceforge.mystique.domain.repository.RepositoryException;
33
34 import org.springframework.dao.DataIntegrityViolationException;
35 import org.springframework.stereotype.Repository;
36 import org.springframework.transaction.annotation.Transactional;
37
38
39
40
41 @Repository
42 public class ConfirmationJpaRepository extends JpaRepository<Confirmation, Long> implements ConfirmationRepository {
43
44 @Override
45 @Transactional(readOnly = true)
46 public Confirmation findById(Long id) throws RepositoryException {
47
48 return entityManager.find(Confirmation.class, id);
49
50 }
51
52 @Override
53 @Transactional(readOnly = true)
54 @SuppressWarnings("unchecked")
55 public List<Confirmation> findByTicket(Ticket ticket, int offset, int limit) throws RepositoryException {
56
57 Query query = entityManager.createNamedQuery("Confirmation.findByTicket");
58 query.setParameter("ticket", ticket);
59
60 query.setFirstResult(offset);
61 query.setMaxResults(limit);
62
63 return query.getResultList();
64
65 }
66
67 @Override
68 @Transactional(readOnly = true)
69 public Confirmation findByTicketAndResponsible(Ticket ticket, User responsible) throws RepositoryException {
70
71 Query query = entityManager.createNamedQuery("Confirmation.findByTicketAndResponsible");
72 query.setParameter("ticket", ticket);
73 query.setParameter("responsible", responsible);
74
75 return (Confirmation) query.getSingleResult();
76
77 }
78
79 @Override
80 @Transactional
81 public void store(Confirmation confirmation) throws RepositoryException {
82
83 if (confirmation.getId() != null) {
84 throw new DataIntegrityViolationException("exception.updateNotSupported");
85 }
86
87 try {
88
89 Confirmation storedConfirmation = findByTicketAndResponsible(confirmation.getTicket(), confirmation
90 .getResponsible());
91
92 if (storedConfirmation != null && !storedConfirmation.getId().equals(confirmation.getId())) {
93 throw new DataIntegrityViolationException("exception.confirmationAlreadyRegistred");
94 }
95
96 } catch (NoResultException e) {
97
98 entityManager.persist(confirmation);
99 entityManager.flush();
100
101 }
102
103 }
104
105 }