1 16 package com.blandware.atleap.persistence.hibernate.core; 17 18 import com.blandware.atleap.common.util.PartialCollection; 19 import com.blandware.atleap.common.util.QueryInfo; 20 import com.blandware.atleap.common.util.StringUtil; 21 import com.blandware.atleap.model.core.*; 22 import com.blandware.atleap.persistence.core.RoleDAO; 23 import com.blandware.atleap.persistence.core.UserDAO; 24 25 import java.util.ArrayList ; 26 import java.util.List ; 27 import java.util.Iterator ; 28 29 30 39 public class RoleDAOHibernate extends BaseDAOHibernate implements RoleDAO { 40 41 44 protected UserDAO userDAO; 45 46 49 public void setUserDAO(UserDAO userDAO) { 50 this.userDAO = userDAO; 51 } 52 53 56 public void createRole(Role role) { 57 getHibernateTemplate().save(role); 58 } 59 60 63 public Role retrieveRole(String rolename) { 64 return (Role) getHibernateTemplate().get(Role.class, rolename); 65 } 66 67 70 public void updateRole(Role role) { 71 getHibernateTemplate().update(role); 72 } 73 74 77 public void deleteRole(Role role) { 78 QueryInfo queryInfo = new QueryInfo(); 81 queryInfo.setWhereClause("(fra.role.name = '" + StringUtil.escape(role.getName()) + "')"); 82 PartialCollection users = userDAO.listUsers(queryInfo); 83 for (Iterator i = users.iterator(); i.hasNext();) { 84 User user = (User) i.next(); 85 user.removeRole(role); 86 } 87 88 getHibernateTemplate().delete(role); 89 90 List pages = new ArrayList (role.getPages()); 92 for ( int i = 0; i < pages.size(); i++ ) { 93 Page page = (Page) pages.get(i); 94 page.removeRole(role); 95 } 96 97 List resources = new ArrayList (role.getResources()); 99 for ( int i = 0; i < resources.size(); i++ ) { 100 ContentResource resource = (ContentResource) resources.get(i); 101 resource.removeRole(role); 102 } 103 104 List menuItems = new ArrayList (role.getMenuItems()); 106 for ( int i = 0; i < menuItems.size(); i++ ) { 107 MenuItem item = (MenuItem) menuItems.get(i); 108 item.removeRole(role); 109 } 110 111 List groups = new ArrayList (role.getGroups()); 113 for ( int i = 0; i < groups.size(); i++ ) { 114 Group group = (Group) groups.get(i); 115 group.removeRole(role); 116 } 117 } 118 119 122 public PartialCollection listRoles(QueryInfo queryInfo) { 123 String whereClause = new String (); 124 String orderByClause = new String (); 125 Boolean fixed = null; 126 if ( queryInfo != null ) { 127 if ( queryInfo.getQueryParameters() != null ) { 128 fixed = (Boolean ) queryInfo.getQueryParameters().get("fixed"); 129 } 130 whereClause = queryInfo.getWhereClause(); 131 orderByClause = queryInfo.getOrderByClause(); 132 if ( whereClause != null && whereClause.length() != 0 ) { 133 whereClause = " where " + whereClause; 134 } else { 135 whereClause = new String (); 136 } 137 if ( orderByClause != null && orderByClause.length() != 0 ) { 138 orderByClause = " order by " + orderByClause; 139 } else { 140 orderByClause = new String (); 141 } 142 } 143 144 List list = null; 145 Integer total = null; 146 147 if ( fixed != null ) { 148 if ( whereClause.length() != 0 ) { 149 whereClause += " and "; 150 } else { 151 whereClause += " where "; 152 } 153 whereClause += "fixed = " + (fixed.booleanValue() ? "'T'" : "'F'"); 154 } 155 String hqlPart = "from Role r" + whereClause; 156 if ( queryInfo != null && (queryInfo.getLimit() != null || queryInfo.getOffset() != null) ) { 157 String hqlForTotal = "select count(r.name) " + hqlPart; 158 total = (Integer ) findUniqueResult(hqlForTotal); 159 if ( total == null ) { 160 total = new Integer (0); 161 } 162 } 163 if ( total == null || total.intValue() > 0 ) { 166 String hql = "select r " + hqlPart + orderByClause; 167 list = executeFind(hql, queryInfo); 168 if ( total == null ) { 169 total = new Integer (list.size()); 170 } 171 } else { 172 list = new ArrayList (); 173 } 174 return new PartialCollection(list, total); 175 } 176 177 180 public boolean hasDuplicates(Role role) { 181 182 ArrayList args = new ArrayList (); 183 args.add(role.getTitle()); 184 args.add(role.getName()); 185 186 String hql = "select count(r.name) from Role r where r.title = ? and r.name != ?"; 187 188 int count = ((Integer ) findUniqueResult(hql, args.toArray())).intValue(); 189 190 return count > 0; 191 } 192 193 195 198 public Role findRoleByTitle(String title) { 199 return (Role) findUniqueResult("from Role r where r.title = ?", new Object []{title}); 200 } 201 202 } 203 204 | Popular Tags |