//$Id: AuthorityDaoHibernate.java,v 1.3 2007/01/13 07:06:51 chaostone Exp $
/*
*
* Copyright c 2005-2009
* Licensed under the Apache License, Version 2.0 (the "License")
* http://www.apache.org/licenses/LICENSE-2.0
*
*/
/********************************************************************************
* @author chaostone
*
* MODIFICATION DESCRIPTION
*
* Name Date Description
* ============ ============ ============
* chaostone 2005-9-27 Created
*
********************************************************************************/
package org.beanfuse.security.menu.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.beanfuse.persist.hibernate.BaseDaoHibernate;
import org.beanfuse.security.Authority;
import org.beanfuse.security.Group;
import org.beanfuse.security.menu.Menu;
import org.beanfuse.security.menu.MenuAuthority;
import org.beanfuse.security.menu.MenuProfile;
import org.hibernate.Query;
public class MenuAuthorityDaoHibernate extends BaseDaoHibernate implements MenuAuthorityDao {
public MenuAuthority getMenuAuthority(Group group, Menu menu) {
Map params = new HashMap();
params.put("group", group);
params.put("menu", menu);
List authorityList = entityDao.searchNamedQuery("getGroupMenu", params, false);
if (authorityList.isEmpty())
return null;
else
return (MenuAuthority) authorityList.get(0);
}
public List getMenuAuthorities(MenuProfile profile, Group group, int depth, String ancestorCode) {
StringBuilder hql = new StringBuilder(
" select a from MenuAuthority a join a.group as r");
hql.append(" join a.menu as m where r = :group" + " and m.enabled=true ");
if (null != profile) {
hql.append(" and m.profile=:profile");
}
if (StringUtils.isNotEmpty(ancestorCode)) {
hql.append(" and m.code like :ancestorCode and length(m.code)>:ancestorCodeLength");
}
if (depth > 0) {
hql.append(" and length(m.code)/2 <= :depth");
}
Query query = getSession().createQuery(hql.toString());
query.setParameter("group", group);
if (StringUtils.isNotEmpty(ancestorCode)) {
query.setParameter("ancestorCode", ancestorCode + "%");
query.setParameter("ancestorCodeLength", new Long(ancestorCode.length()));
}
if (depth > 0) {
query.setParameter("depth", new Long(depth));
}
if (null != profile) {
query.setParameter("profile", profile);
}
return query.list();
}
/**
* 查询用户组对应的模块
*/
public List getMenus(MenuProfile profile, Group group, int depth, String ancestorCode) {
StringBuilder hql = new StringBuilder(" select m from MenuAuthority a join a.group as r");
hql.append(" join a.menu as m where r = :group" + " and m.enabled=true ");
if (null != profile) {
hql.append(" and m.profile=:profile");
}
if (StringUtils.isNotEmpty(ancestorCode)) {
hql.append(" and m.code like :ancestorCode and length(m.code)>:ancestorCodeLength");
}
if (depth > 0) {
hql.append(" and length(m.code)/2 <= :depth");
}
Query query = getSession().createQuery(hql.toString());
query.setParameter("group", group);
if (StringUtils.isNotEmpty(ancestorCode)) {
query.setParameter("ancestorCode", ancestorCode + "%");
query.setParameter("ancestorCodeLength", new Long(ancestorCode.length()));
}
if (depth > 0) {
query.setParameter("depth", new Long(depth));
}
if (null != profile) {
query.setParameter("profile", profile);
}
query.setCacheable(true);
return query.list();
}
public void saveOrUpdate(Authority authority) {
entityDao.saveOrUpdate(authority);
}
public void remove(Authority authority) {
entityDao.remove(authority);
}
}