7bd02d756e7f4a51f8f50cc62aa771db152470f4
[utils] / security / src / main / java / org / wamblee / usermgt / hibernate / HibernateGroupSet.java
1 /*
2  * Copyright 2005 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.usermgt.hibernate;
17
18 import org.wamblee.persistence.hibernate.HibernateSupport;
19
20 import org.wamblee.usermgt.Group;
21 import org.wamblee.usermgt.GroupSet;
22
23 import java.util.List;
24 import java.util.Set;
25 import java.util.TreeSet;
26
27
28 /**
29  * Set of groups backed by the database.
30  *
31  * @author Erik Brakkee
32  */
33 public class HibernateGroupSet extends HibernateSupport implements GroupSet {
34     /**
35      * DOCUMENT ME!
36      */
37     private static final String QUERY_FIND_BY_NAME = "findGroupByName";
38
39     /**
40      * DOCUMENT ME!
41      */
42     private static final String PARAM_NAME = "name";
43
44     /**
45      * DOCUMENT ME!
46      */
47     private static final String QUERY_COUNT_GROUPS = "countGroups";
48
49 /**
50      * Creates a new HibernateGroupSet object.
51      */
52     public HibernateGroupSet() {
53         // Empty
54     }
55
56     /* (non-Javadoc)
57      * @see org.wamblee.usermgt.GroupSet#groupModified(org.wamblee.usermgt.Group)
58      */
59     /**
60      * DOCUMENT ME!
61      *
62      * @param aGroup DOCUMENT ME!
63      */
64     public void groupModified(Group aGroup) {
65         assert aGroup.getPrimaryKey() != null;
66         super.merge(aGroup);
67     }
68
69     /* (non-Javadoc)
70      * @see org.wamblee.usermgt.GroupSet#find(java.lang.String)
71      */
72     /**
73      * DOCUMENT ME!
74      *
75      * @param aName DOCUMENT ME!
76      *
77      * @return DOCUMENT ME!
78      *
79      * @throws RuntimeException DOCUMENT ME!
80      */
81     public Group find(String aName) {
82         List list = getHibernateTemplate()
83             .findByNamedQueryAndNamedParam(QUERY_FIND_BY_NAME, PARAM_NAME, aName);
84
85         if (list.size() > 1) {
86             throw new RuntimeException(
87                 "More than one group with the same name '" + aName + "'");
88         }
89
90         if (list.size() == 0) {
91             return null;
92         }
93
94         return new Group((Group) list.get(0));
95     }
96
97     /* (non-Javadoc)
98      * @see org.wamblee.usermgt.GroupSet#contains(org.wamblee.usermgt.Group)
99      */
100     /**
101      * DOCUMENT ME!
102      *
103      * @param aGroup DOCUMENT ME!
104      *
105      * @return DOCUMENT ME!
106      */
107     public boolean contains(Group aGroup) {
108         return find(aGroup.getName()) != null;
109     }
110
111     /* (non-Javadoc)
112      * @see org.wamblee.usermgt.GroupSet#add(org.wamblee.usermgt.Group)
113      */
114     /**
115      * DOCUMENT ME!
116      *
117      * @param aGroup DOCUMENT ME!
118      *
119      * @return DOCUMENT ME!
120      */
121     public boolean add(Group aGroup) {
122         assert aGroup.getPrimaryKey() == null;
123
124         if (contains(aGroup)) {
125             return false;
126         }
127
128         super.merge(aGroup);
129
130         return true;
131     }
132
133     /* (non-Javadoc)
134      * @see org.wamblee.usermgt.GroupSet#remove(org.wamblee.usermgt.Group)
135      */
136     /**
137      * DOCUMENT ME!
138      *
139      * @param aGroup DOCUMENT ME!
140      *
141      * @return DOCUMENT ME!
142      */
143     public boolean remove(Group aGroup) {
144         assert aGroup.getPrimaryKey() != null;
145
146         if (!contains(aGroup)) {
147             return false;
148         }
149
150         Group group = (Group) getHibernateTemplate().merge(aGroup);
151         getHibernateTemplate().delete(group);
152         aGroup.setPrimaryKey(null);
153         aGroup.setPersistedVersion(-1);
154
155         return true;
156     }
157
158     /* (non-Javadoc)
159      * @see org.wamblee.usermgt.GroupSet#list()
160      */
161     /**
162      * DOCUMENT ME!
163      *
164      * @return DOCUMENT ME!
165      */
166     public Set<Group> list() {
167         Set<Group>  groups = new TreeSet<Group>();
168         List<Group> list   = getHibernateTemplate().loadAll(Group.class);
169
170         for (Group group : list) {
171             groups.add(new Group(group));
172         }
173
174         return groups;
175     }
176
177     /* (non-Javadoc)
178      * @see org.wamblee.usermgt.GroupSet#size()
179      */
180     /**
181      * DOCUMENT ME!
182      *
183      * @return DOCUMENT ME!
184      */
185     public int size() {
186         Long result = (Long) getHibernateTemplate()
187             .findByNamedQuery(QUERY_COUNT_GROUPS).get(0);
188
189         return result.intValue();
190     }
191 }