KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > persistence > hibernate > core > RoleDAOHibernate


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.Iterator JavaDoc;
28
29
30 /**
31  * <p>This class interacts with Spring's HibernateTemplate to save/delete and
32  * retrieve Role objects.
33  * </p>
34  * <p><a HREF="RoleDAOHibernate.java.htm"><i>View Source</i></a>
35  * </p>
36  *
37  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
38  */

39 public class RoleDAOHibernate extends BaseDAOHibernate implements RoleDAO {
40
41     /**
42      * DAO to work with users
43      */

44     protected UserDAO userDAO;
45
46     /**
47      * @see com.blandware.atleap.persistence.core.RoleDAO#setUserDAO(com.blandware.atleap.persistence.core.UserDAO)
48      */

49     public void setUserDAO(UserDAO userDAO) {
50         this.userDAO = userDAO;
51     }
52
53     /**
54      * @see com.blandware.atleap.persistence.core.RoleDAO#createRole(com.blandware.atleap.model.core.Role)
55      */

56     public void createRole(Role role) {
57         getHibernateTemplate().save(role);
58     }
59
60     /**
61      * @see com.blandware.atleap.persistence.core.RoleDAO#retrieveRole(java.lang.String)
62      */

63     public Role retrieveRole(String JavaDoc rolename) {
64         return (Role) getHibernateTemplate().get(Role.class, rolename);
65     }
66
67     /**
68      * @see com.blandware.atleap.persistence.core.RoleDAO#updateRole(com.blandware.atleap.model.core.Role)
69      */

70     public void updateRole(Role role) {
71         getHibernateTemplate().update(role);
72     }
73
74     /**
75      * @see com.blandware.atleap.persistence.core.RoleDAO#deleteRole(com.blandware.atleap.model.core.Role)
76      */

77     public void deleteRole(Role role) {
78         // break all relations between users and deleted role
79
// TODO: this seems to be a bad way, because we just walk through all users
80
QueryInfo queryInfo = new QueryInfo();
81         queryInfo.setWhereClause("(fra.role.name = '" + StringUtil.escape(role.getName()) + "')");
82         PartialCollection users = userDAO.listUsers(queryInfo);
83         for (Iterator JavaDoc i = users.iterator(); i.hasNext();) {
84             User user = (User) i.next();
85             user.removeRole(role);
86         }
87
88         getHibernateTemplate().delete(role);
89
90         // break all relations between pages and deleted role
91
List JavaDoc pages = new ArrayList JavaDoc(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         // break all relations between content resources and deleted role
98
List JavaDoc resources = new ArrayList JavaDoc(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         // break all relations between menu items and deleted role
105
List JavaDoc menuItems = new ArrayList JavaDoc(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         // break all relations between groups and deleted role
112
List JavaDoc groups = new ArrayList JavaDoc(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     /**
120      * @see com.blandware.atleap.persistence.core.RoleDAO#listRoles(com.blandware.atleap.common.util.QueryInfo)
121      */

122     public PartialCollection listRoles(QueryInfo queryInfo) {
123         String JavaDoc whereClause = new String JavaDoc();
124         String JavaDoc orderByClause = new String JavaDoc();
125         Boolean JavaDoc fixed = null;
126         if ( queryInfo != null ) {
127             if ( queryInfo.getQueryParameters() != null ) {
128                 fixed = (Boolean JavaDoc) 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 JavaDoc();
136             }
137             if ( orderByClause != null && orderByClause.length() != 0 ) {
138                 orderByClause = " order by " + orderByClause;
139             } else {
140                 orderByClause = new String JavaDoc();
141             }
142         }
143
144         List JavaDoc list = null;
145         Integer JavaDoc 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 JavaDoc hqlPart = "from Role r" + whereClause;
156         if ( queryInfo != null && (queryInfo.getLimit() != null || queryInfo.getOffset() != null) ) {
157             String JavaDoc hqlForTotal = "select count(r.name) " + hqlPart;
158             total = (Integer JavaDoc) findUniqueResult(hqlForTotal);
159             if ( total == null ) {
160                 total = new Integer JavaDoc(0);
161             }
162         }
163         // If we don't have any info about the total number of results yet or
164
// we know that there's something that will be found, then fetch data
165
if ( total == null || total.intValue() > 0 ) {
166             String JavaDoc hql = "select r " + hqlPart + orderByClause;
167             list = executeFind(hql, queryInfo);
168             if ( total == null ) {
169                 total = new Integer JavaDoc(list.size());
170             }
171         } else {
172             list = new ArrayList JavaDoc();
173         }
174         return new PartialCollection(list, total);
175     }
176
177     /**
178      * @see com.blandware.atleap.persistence.core.RoleDAO#hasDuplicates(com.blandware.atleap.model.core.Role)
179      */

180     public boolean hasDuplicates(Role role) {
181
182         ArrayList JavaDoc args = new ArrayList JavaDoc();
183         args.add(role.getTitle());
184         args.add(role.getName());
185
186         String JavaDoc hql = "select count(r.name) from Role r where r.title = ? and r.name != ?";
187
188         int count = ((Integer JavaDoc) findUniqueResult(hql, args.toArray())).intValue();
189
190         return count > 0;
191     }
192
193     // ~ Finders ================================================================
194

195     /**
196      * @see com.blandware.atleap.persistence.core.RoleDAO#findRoleByTitle(java.lang.String)
197      */

198     public Role findRoleByTitle(String JavaDoc title) {
199         return (Role) findUniqueResult("from Role r where r.title = ?", new Object JavaDoc[]{title});
200     }
201
202 }
203
204
Popular Tags