Moved over some of the security stuff from Photos.
[utils] / security / src / main / java / org / wamblee / usermgt / hibernate / HibernateGroupSet.java
diff --git a/security/src/main/java/org/wamblee/usermgt/hibernate/HibernateGroupSet.java b/security/src/main/java/org/wamblee/usermgt/hibernate/HibernateGroupSet.java
new file mode 100644 (file)
index 0000000..5e3de65
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2005 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */ 
+
+package org.wamblee.usermgt.hibernate;
+
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.wamblee.persistence.hibernate.HibernateSupport;
+import org.wamblee.usermgt.Group;
+import org.wamblee.usermgt.GroupSet;
+
+/**
+ * Set of groups backed by the database. 
+ */
+public class HibernateGroupSet extends HibernateSupport implements GroupSet {
+    
+    
+    private static final String QUERY_FIND_BY_NAME = "findGroupByName";
+    
+    private static final String PARAM_NAME = "name";
+    
+    private static final String QUERY_COUNT_GROUPS = "countGroups";
+    
+    public HibernateGroupSet() {
+        // Empty
+    }
+    
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#groupModified(org.wamblee.usermgt.Group)
+     */
+    public void groupModified(Group aGroup) {
+        assert aGroup.getPrimaryKey() != null; 
+        super.merge(aGroup);        
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#find(java.lang.String)
+     */
+    public Group find(String aName) {
+        List list = getHibernateTemplate().findByNamedQueryAndNamedParam(QUERY_FIND_BY_NAME, PARAM_NAME, aName);
+        if ( list.size() > 1 ) { 
+            throw new RuntimeException("More than one group with the same name '" + aName + "'");
+        }
+        if ( list.size() == 0 ) { 
+            return null; 
+        }
+        return new Group((Group)list.get(0));
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#contains(org.wamblee.usermgt.Group)
+     */
+    public boolean contains(Group aGroup) {
+        return find(aGroup.getName()) != null; 
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#add(org.wamblee.usermgt.Group)
+     */
+    public boolean add(Group aGroup) {
+        assert aGroup.getPrimaryKey() == null; 
+        if ( contains(aGroup) ) { 
+            return false; 
+        }
+        super.merge(aGroup);
+        return true; 
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#remove(org.wamblee.usermgt.Group)
+     */
+    public boolean remove(Group aGroup) {
+        assert aGroup.getPrimaryKey() != null; 
+        if ( !contains(aGroup)) { 
+            return false; 
+        }
+        Group group = (Group) getHibernateTemplate().merge(aGroup); 
+        getHibernateTemplate().delete(group);
+        aGroup.setPrimaryKey(null); 
+        aGroup.setPersistedVersion(-1);
+        return true; 
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#list()
+     */
+    public Set<Group> list() {
+        Set<Group> groups = new TreeSet<Group>(); 
+        List<Group> list = getHibernateTemplate().loadAll(Group.class);
+        for (Group group: list) { 
+            groups.add(new Group(group));
+        }
+        return groups; 
+    }
+
+    /* (non-Javadoc)
+     * @see org.wamblee.usermgt.GroupSet#size()
+     */
+    public int size() {
+        Long result = (Long) getHibernateTemplate().findByNamedQuery(QUERY_COUNT_GROUPS).get(0);
+        return result.intValue(); 
+    }
+}