package com.opentravelsoft.providers.hibernate;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.opentravelsoft.entity.Module;
import com.opentravelsoft.entity.ModulePermission;
import com.opentravelsoft.entity.Permission;
import com.opentravelsoft.entity.Role;
import com.opentravelsoft.providers.PermissionDao;
import com.opentravelsoft.providers.RoleDao;
import com.opentravelsoft.util.RowDataUtil;
@Repository("RoleDao")
public class RoleDaoHibernate extends GenericDaoHibernate<Role, Integer>
implements RoleDao {
private PermissionDao permissionDao;
public RoleDaoHibernate() {
super(Role.class);
}
@Autowired
public void setPermissionDao(PermissionDao permissionDao) {
this.permissionDao = permissionDao;
}
@SuppressWarnings("unchecked")
public List<Role> getRoleList() {
StringBuilder sql = new StringBuilder();
sql.append("from Role order by roleId");
return getHibernateTemplate().find(sql.toString());
}
public List<Role> queryRole(String keyword) {
StringBuilder sql = new StringBuilder();
sql.append("from Role order by roleId");
return null;
}
@SuppressWarnings("unchecked")
public List<Module> getModulePermission(int roleId) {
// Get All active module
List<Module> modules = getActiveModules();
Map<Integer, String> perm = permissionDao.getPermissions();
for (Module module : modules) {
Map<Integer, Boolean> pp = new TreeMap<Integer, Boolean>();
for (Integer key : perm.keySet()) {
pp.put(key, false);
}
module.setRolePermissionMap(pp);
}
StringBuilder sql = new StringBuilder();
sql.append("select moduleId,permissionId,allowAccess ");
sql.append("from ModulePermission ");
sql.append("where roleId=? ");
sql.append("order by moduleId, permissionId");
Object[] params = { roleId };
List<Object[]> list = getHibernateTemplate().find(sql.toString(), params);
for (Object[] objects : list) {
for (Module mm : modules) {
if (mm.getModuleId() == RowDataUtil.getInt(objects[0])) {
if (mm.getRolePermissionMap().containsKey(
RowDataUtil.getInt(objects[1])))
mm.getRolePermissionMap().remove(RowDataUtil.getInt(objects[1]));
boolean allow = RowDataUtil.getByte(objects[2]) == ((byte) 1) ? true
: false;
mm.getRolePermissionMap().put(RowDataUtil.getInt(objects[1]), allow);
log.debug("ModuleId:" + mm.getModuleId() + " PermKey:"
+ RowDataUtil.getInt(objects[1]) + " PermValue:" + objects[2]);
break;
}
}
}
return modules;
}
@SuppressWarnings("unchecked")
private List<Module> getActiveModules() {
StringBuilder sql = new StringBuilder();
sql.append("from Module where isActive=1 order by moduleId ");
return getHibernateTemplate().find(sql.toString());
}
@SuppressWarnings("unchecked")
public String saveModulePerm(Integer roleId, String moduleName,
String moduleAction, String perm) {
StringBuilder sql = new StringBuilder();
String result = Boolean.FALSE.toString();
Object[] params = { moduleAction };
sql.append("from Permission where permissionKey=? ");
List<Permission> list = getHibernateTemplate().find(sql.toString(), params);
if (list.size() < 1)
return "0";
Permission permission = list.get(0);
sql = new StringBuilder();
Object[] params1 = { moduleName };
sql.append("from Module where moduleName=? ");
List<Module> list1 = getHibernateTemplate().find(sql.toString(), params1);
if (list1.size() < 1)
return "0";
Module module = list1.get(0);
sql = new StringBuilder();
Object[] params2 = { module.getModuleId(), roleId,
permission.getPermissionId() };
sql.append("from ModulePermission where moduleId=? ");
sql.append("and roleId=? and permissionId=? ");
List<ModulePermission> list2 = getHibernateTemplate().find(sql.toString(),
params2);
if (list2.size() > 0) {
ModulePermission mp = list2.get(0);
if (perm.equalsIgnoreCase(Boolean.FALSE.toString())) {
mp.setAllowAccess((byte) 1);
result = Boolean.TRUE.toString();
} else
mp.setAllowAccess((byte) 0);
getHibernateTemplate().update(mp);
} else {
ModulePermission mp = new ModulePermission();
mp.setModuleId(module.getModuleId());
mp.setPermissionId(permission.getPermissionId());
mp.setRoleId(roleId);
if (perm.equalsIgnoreCase(Boolean.FALSE.toString())) {
mp.setAllowAccess((byte) 1);
result = Boolean.TRUE.toString();
} else
mp.setAllowAccess((byte) 0);
getHibernateTemplate().save(mp);
}
return result;
}
@SuppressWarnings("unchecked")
public List<Role> getRoles() {
StringBuilder sql = new StringBuilder();
sql.append("from Role where isActive=1 ");
return getHibernateTemplate().find(sql.toString());
}
}