6d6cde0f684c3c2e155d3c8838b884fdfd6cacf8
[utils] / security / impl / src / main / java / org / wamblee / usermgt / jpa / JpaGroupSet.java
1 package org.wamblee.usermgt.jpa;
2
3 import java.util.List;
4 import java.util.Set;
5 import java.util.TreeSet;
6
7 import javax.persistence.EntityManager;
8 import javax.persistence.TypedQuery;
9
10 import org.wamblee.persistence.JpaMergeSupport;
11 import org.wamblee.usermgt.Group;
12 import org.wamblee.usermgt.GroupSet;
13
14 public class JpaGroupSet implements GroupSet {
15     
16     private EntityManager em; 
17     
18     public JpaGroupSet(EntityManager aEm) { 
19         em = aEm;
20     }
21
22     @Override
23     public boolean add(Group aGroup) {
24         assert aGroup.getPrimaryKey() == null;
25         if (contains(aGroup)) {
26             return false;
27         }
28         em.persist(aGroup);
29         return true;
30     }
31
32     @Override
33     public boolean contains(Group aGroup) {
34            return find(aGroup.getName()) != null;  
35     }
36
37     @Override
38     public Group find(String aName) {
39         TypedQuery<Group> query = em.createNamedQuery(Group.QUERY_FIND_BY_NAME, Group.class);
40         query.setParameter(Group.NAME_PARAM, aName);
41         List<Group> groups = query.getResultList();
42         if (groups.size() > 1) {
43             throw new RuntimeException(
44                 "More than one group with the same name '" + aName + "'");
45         }
46
47         if (groups.size() == 0) {
48             return null;
49         }
50         return groups.get(0);
51     }
52
53     @Override
54     public void groupModified(Group aGroup) {
55         assert aGroup.getPrimaryKey() != null;
56         Group merged = em.merge(aGroup);
57         JpaMergeSupport.merge(merged, aGroup);
58     }
59
60     @Override
61     public Set<Group> list() {
62         List<Group> groups = em.createNamedQuery(Group.QUERY_ALL_GROUPS, Group.class).getResultList();
63         Set<Group> res = new TreeSet<Group>(groups);
64         return res; 
65     }
66
67     @Override
68     public boolean remove(Group aGroup) {
69         Group group = find(aGroup.getName());
70         if ( group == null ) { 
71             return false; 
72         }
73         em.remove(group);
74         return true;
75     }
76
77     @Override
78     public int size() {
79         Long res = (Long)em.createNamedQuery(Group.QUERY_COUNT_GROUPS).getSingleResult();
80         return res.intValue();
81     }
82 }