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.Project;
29 import net.sourceforge.mystique.domain.entity.Version;
30 import net.sourceforge.mystique.domain.repository.VersionRepository;
31 import net.sourceforge.mystique.domain.repository.RepositoryException;
32
33 import org.springframework.dao.DataIntegrityViolationException;
34 import org.springframework.stereotype.Repository;
35 import org.springframework.transaction.annotation.Transactional;
36
37
38
39
40 @Repository
41 public class VersionJpaRepository extends JpaRepository<Version, Long> implements
42 VersionRepository {
43
44 @Override
45 @Transactional(readOnly = true)
46 public Version findById(Long id) throws RepositoryException {
47
48 return entityManager.find(Version.class, id);
49
50 }
51
52 @Override
53 @Transactional(readOnly = true)
54 @SuppressWarnings("unchecked")
55 public List<Version> findByProject(Project project, int offset, int limit) throws RepositoryException {
56
57 Query query = entityManager.createNamedQuery("Version.findByProject");
58 query.setParameter("project", project);
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 Version findByProjectAndNumber(Project project, String number) throws RepositoryException {
70
71 Query query = entityManager.createNamedQuery("Version.findByProjectAndNumber");
72 query.setParameter("project", project);
73 query.setParameter("number", number);
74
75 return (Version) query.getSingleResult();
76
77 }
78
79 @Override
80 @Transactional
81 public void store(Version version) throws RepositoryException {
82
83 try {
84
85 Version storedVersion = findByProjectAndNumber(version.getProject(), version.getNumber());
86
87 if (storedVersion != null && !storedVersion.getId().equals(version.getId())) {
88 throw new DataIntegrityViolationException("exception.versionAlreadyRegistred");
89 }
90
91 } catch (NoResultException e) {
92
93 entityManager.persist(version);
94
95 if (version.getId() != null) {
96 entityManager.merge(version);
97 }
98
99 entityManager.flush();
100
101 }
102
103 }
104
105 }