//$Id: MenuDaoHibernate.java,v 1.2 2006/11/28 03:22:36 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
* ============ ============ ============
* dell 2005-9-7 Created
* chaostone 2005-9-26 rename,modify
*
********************************************************************************/
package org.beanfuse.security.menu.dao;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.beanfuse.persist.hibernate.BaseDaoHibernate;
import org.beanfuse.persist.hibernate.CriterionUtils;
import org.beanfuse.security.menu.Menu;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
/**
* 系统功能实体信息存取实现类
*
* @author dell,chaostone 2005-9-26
*/
public class MenuDaoHibernate extends BaseDaoHibernate implements MenuDao {
public Menu get(Long menuId) {
return (Menu) entityDao.get("Menu", menuId);
}
public Menu getByName(String name) {
Map params = new HashMap();
params.put("name", name);
List rs = entityDao.searchHQLQuery("from Menu as menu where menu.name=:name", params, true);
if (rs.isEmpty())
return null;
else
return (Menu) rs.get(0);
}
public Menu getByCode(String code) {
Map params = new HashMap();
params.put("code", code);
List rs = entityDao.searchHQLQuery("from Menu as menu where menu.code=:code", params, true);
if (rs.isEmpty())
return null;
else
return (Menu) rs.get(0);
}
public List get(Menu menu) {
Criteria criteria = getSession().createCriteria(Menu.class);
List criterions = CriterionUtils.getEntityCriterions(menu);
for (Iterator iterator = criterions.iterator(); iterator.hasNext();) {
Criterion one = (Criterion) iterator.next();
criteria.add(one);
}
return criteria.list();
}
public List get(Long[] menuIds) {
Criteria criteria = getSession().createCriteria(Menu.class);
criteria.add(Restrictions.in("id", menuIds));
return criteria.list();
}
public List getDescendants(String ancestorCode, int depth) {
return getDescendants(ancestorCode, depth, null);
}
public List getActiveDescendants(String ancestorCode, int depth) {
return getDescendants(ancestorCode, depth, Boolean.TRUE);
}
private List getDescendants(String ancestorCode, int depth, Boolean isEnabled) {
String hql = "select a from Menu as a where" + " a.code like :ancestorCode and"
+ " length(a.code) > :ancestorCodeLength and"
+ " (:depth=-1 or length(a.code)/2 <= :depth)";
if (null != isEnabled) {
hql += " and a.enabled=" + isEnabled;
}
hql += " order by a.code";
Query query = getSession().createQuery(hql);
query.setParameter("ancestorCode", ancestorCode + "%");
query.setParameter("depth", new Integer(depth));
query.setParameter("ancestorCodeLength", new Long(ancestorCode.length() + 1));
query.setCacheable(true);
return query.list();
}
public List getActiveChildren(String parentCode) {
return getChildren(parentCode, Boolean.TRUE);
}
public List getChildren(String parentCode) {
return getChildren(parentCode, null);
}
private List getChildren(String parentCode, Boolean isEnabled) {
String hql = "select from Menu as a where a.code like :parentCode"
+ " and length(a.code) - parentCodeLength<=2"
+ " and length(a.code) >parentCodeLength";
if (null != isEnabled) {
hql += " and a.enabled=" + isEnabled;
}
hql += " order by a.code";
Query query = getSession().createQuery(hql);
query.setParameter("parentCode", parentCode + "%");
query.setParameter("parentCodeLength", new Integer(parentCode.length() + 1));
query.setCacheable(true);
return query.list();
}
public void saveOrUpdate(Menu menu) {
entityDao.saveOrUpdate(menu);
}
}