merge-update from trunk
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / GroupServiceImpl.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.cdm.api.service;
12
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.UUID;
16
17 import org.hibernate.criterion.Criterion;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.security.access.prepost.PreAuthorize;
20 import org.springframework.security.core.GrantedAuthority;
21 import org.springframework.stereotype.Service;
22 import org.springframework.transaction.annotation.Transactional;
23 import org.springframework.util.Assert;
24
25 import eu.etaxonomy.cdm.model.common.Group;
26 import eu.etaxonomy.cdm.model.common.User;
27 import eu.etaxonomy.cdm.persistence.dao.common.IGroupDao;
28 import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;
29 import eu.etaxonomy.cdm.persistence.query.MatchMode;
30 import eu.etaxonomy.cdm.persistence.query.OrderHint;
31
32 /**
33 * @author n.hoffmann
34 * @created Mar 9, 2011
35 * @version 1.0
36 */
37 @Service
38 @Transactional(readOnly = true)
39 @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER_MANAGER')")
40 public class GroupServiceImpl extends ServiceBase<Group,IGroupDao> implements IGroupService {
41
42 protected IUserDao userDao;
43
44 /* (non-Javadoc)
45 * @see org.springframework.security.provisioning.GroupManager#findAllGroups()
46 */
47 @Override
48 public List<String> findAllGroups() {
49 return dao.listNames(null,null);
50 }
51
52 /* (non-Javadoc)
53 * @see org.springframework.security.provisioning.GroupManager#findUsersInGroup(java.lang.String)
54 */
55 @Override
56 public List<String> findUsersInGroup(String groupName) {
57 Assert.hasText(groupName);
58 Group group = dao.findGroupByName(groupName);
59
60 List<String> users = dao.listMembers(group, null, null);
61
62 return users;
63 }
64
65
66 /* (non-Javadoc)
67 * @see org.springframework.security.provisioning.GroupManager#deleteGroup(java.lang.String)
68 */
69 @Override
70 @Transactional(readOnly=false)
71 public void deleteGroup(String groupUUID) {
72 Assert.notNull(groupUUID);
73
74 Group group = dao.findByUuid(UUID.fromString(groupUUID));
75 for (User user : group.getMembers()){
76 group.removeMember(user);
77 }
78 if(group != null){
79 dao.delete(group);
80 }
81
82 }
83
84 /* (non-Javadoc)
85 * @see org.springframework.security.provisioning.GroupManager#renameGroup(java.lang.String, java.lang.String)
86 */
87 @Override
88 @Transactional(readOnly=false)
89 public void renameGroup(String oldName, String newName) {
90 Assert.hasText(oldName);
91 Assert.hasText(newName);
92
93 Group group = dao.findGroupByName(oldName);
94
95 group.setName(newName);
96 dao.update(group);
97 }
98
99 /* (non-Javadoc)
100 * @see org.springframework.security.provisioning.GroupManager#addUserToGroup(java.lang.String, java.lang.String)
101 */
102 @Override
103 @Transactional(readOnly=false)
104 public void addUserToGroup(String username, String groupName) {
105 Assert.hasText(username);
106 Assert.hasText(groupName);
107
108 Group group = dao.findGroupByName(groupName);
109 User user = userDao.findUserByUsername(username);
110
111 if(group != null || user != null){
112 if(group.addMember(user)) {
113 dao.update(group);
114 }
115 }
116 }
117
118 /* (non-Javadoc)
119 * @see org.springframework.security.provisioning.GroupManager#removeUserFromGroup(java.lang.String, java.lang.String)
120 */
121 @Override
122 @Transactional(readOnly=false)
123 public void removeUserFromGroup(String username, String groupName) {
124 Assert.hasText(username);
125 Assert.hasText(groupName);
126
127 Group group = dao.findGroupByName(groupName);
128 User user = userDao.findUserByUsername(username);
129
130 if(group != null || user != null){
131 if(group.removeMember(user)){
132 dao.update(group);
133 }
134 }
135 }
136
137 /* (non-Javadoc)
138 * @see org.springframework.security.provisioning.GroupManager#findGroupAuthorities(java.lang.String)
139 */
140 @Override
141 public List<GrantedAuthority> findGroupAuthorities(String groupName) {
142 Assert.hasText(groupName);
143 Group group = dao.findGroupByName(groupName);
144
145 if (group != null){
146 return new ArrayList<GrantedAuthority>(group.getGrantedAuthorities());
147 }
148
149 return new ArrayList<GrantedAuthority>();
150 }
151
152 /* (non-Javadoc)
153 * @see org.springframework.security.provisioning.GroupManager#addGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
154 */
155 @Override
156 @Transactional(readOnly=false)
157 public void addGroupAuthority(String groupName, GrantedAuthority authority) {
158 Assert.hasText(groupName);
159 Assert.notNull(authority);
160
161 Group group = dao.findGroupByName(groupName);
162
163 if (group != null){
164 if(group.getGrantedAuthorities().add(authority)){
165 dao.update(group);
166 }
167 }
168 }
169
170 /* (non-Javadoc)
171 * @see org.springframework.security.provisioning.GroupManager#removeGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
172 */
173 @Override
174 @Transactional(readOnly=false)
175 public void removeGroupAuthority(String groupName,
176 GrantedAuthority authority) {
177 Assert.hasText(groupName);
178 Assert.notNull(authority);
179
180 Group group = dao.findGroupByName(groupName);
181
182 if(group != null){
183 if(group.getGrantedAuthorities().remove(authority)) {
184 dao.update(group);
185 }
186 }
187 }
188
189 /* (non-Javadoc)
190 * @see eu.etaxonomy.cdm.api.service.ServiceBase#setDao(eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao)
191 */
192 @Override
193 @Autowired
194 protected void setDao(IGroupDao dao) {
195 this.dao = dao;
196 }
197
198 @Autowired
199 public void setUserDao(IUserDao userDao){
200 this.userDao = userDao;
201 }
202
203 @Override
204 @Transactional(readOnly = true)
205 public List<Group> listByName(String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
206 Integer numberOfResults = dao.countByName(queryString, matchmode, criteria);
207
208 List<Group> results = new ArrayList<Group>();
209 if(numberOfResults > 0) {
210 results = dao.findByName(queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
211 }
212 return results;
213 }
214
215 /* (non-Javadoc)
216 * @see org.springframework.security.provisioning.GroupManager#createGroup(java.lang.String, java.util.List)
217 */
218 @Override
219 @Transactional(readOnly=false)
220 public void createGroup(String groupName, List<GrantedAuthority> authorities) {
221 Assert.hasText(groupName);
222 Assert.notNull(authorities);
223
224 Group newGroup = Group.NewInstance(groupName);
225 for (GrantedAuthority grantedAuthority: authorities){
226 newGroup.addGrantedAuthority(grantedAuthority);
227 }
228 saveGroup(newGroup);
229 }
230
231 /* (non-Javadoc)
232 * @see eu.etaxonomy.cdm.api.service.IUserService#saveGroup(eu.etaxonomy.cdm.model.common.Group)
233 */
234 @Override
235 @Transactional(readOnly=false)
236 @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER_MANAGER')")
237 public UUID saveGroup(Group group) {
238 return dao.save(group);
239 }
240
241 @Override
242 public DeleteResult delete(Group group){
243 String groupUUID = group.getUuid().toString();
244 //org.springframework.security.provisioning.GroupManager#deleteGroup needs a string argument
245 this.deleteGroup(groupUUID);
246 //there is no feedback from the deleteGroup method...
247 return new DeleteResult();
248 }
249
250 }