/* * 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 list() { Set groups = new TreeSet(); List 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(); } }