add deletegroup
[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.Propagation;
23 import org.springframework.transaction.annotation.Transactional;
24 import org.springframework.util.Assert;
25
26 import eu.etaxonomy.cdm.model.common.Group;
27 import eu.etaxonomy.cdm.model.common.User;
28 import eu.etaxonomy.cdm.persistence.dao.common.IGroupDao;
29 import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;
30 import eu.etaxonomy.cdm.persistence.query.MatchMode;
31 import eu.etaxonomy.cdm.persistence.query.OrderHint;
32
33 /**
34 * @author n.hoffmann
35 * @created Mar 9, 2011
36 * @version 1.0
37 */
38 @Service
39 @Transactional(readOnly = true)
40 @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER_MANAGER')")
41 public class GroupServiceImpl extends ServiceBase<Group,IGroupDao> implements IGroupService {
42
43 protected IUserDao userDao;
44
45 /* (non-Javadoc)
46 * @see org.springframework.security.provisioning.GroupManager#findAllGroups()
47 */
48 @Override
49 public List<String> findAllGroups() {
50 return dao.listNames(null,null);
51 }
52
53 /* (non-Javadoc)
54 * @see org.springframework.security.provisioning.GroupManager#findUsersInGroup(java.lang.String)
55 */
56 @Override
57 public List<String> findUsersInGroup(String groupName) {
58 Assert.hasText(groupName);
59 Group group = dao.findGroupByName(groupName);
60
61 List<String> users = dao.listMembers(group, null, null);
62
63 return users;
64 }
65
66
67 /* (non-Javadoc)
68 * @see org.springframework.security.provisioning.GroupManager#deleteGroup(java.lang.String)
69 */
70 @Override
71 @Transactional(readOnly=false)
72 public void deleteGroup(String groupName) {
73 Assert.hasText(groupName);
74
75 Group group = dao.findGroupByName(groupName);
76 for (User user : group.getMembers()){
77 group.removeMember(user);
78 }
79 if(group != null){
80 dao.delete(group);
81 }
82
83 }
84
85 /* (non-Javadoc)
86 * @see org.springframework.security.provisioning.GroupManager#renameGroup(java.lang.String, java.lang.String)
87 */
88 @Override
89 @Transactional(readOnly=false)
90 public void renameGroup(String oldName, String newName) {
91 Assert.hasText(oldName);
92 Assert.hasText(newName);
93
94 Group group = dao.findGroupByName(oldName);
95
96 group.setName(newName);
97 dao.update(group);
98 }
99
100 /* (non-Javadoc)
101 * @see org.springframework.security.provisioning.GroupManager#addUserToGroup(java.lang.String, java.lang.String)
102 */
103 @Override
104 @Transactional(readOnly=false)
105 public void addUserToGroup(String username, String groupName) {
106 Assert.hasText(username);
107 Assert.hasText(groupName);
108
109 Group group = dao.findGroupByName(groupName);
110 User user = userDao.findUserByUsername(username);
111
112 if(group != null || user != null){
113 if(group.addMember(user)) {
114 dao.update(group);
115 }
116 }
117 }
118
119 /* (non-Javadoc)
120 * @see org.springframework.security.provisioning.GroupManager#removeUserFromGroup(java.lang.String, java.lang.String)
121 */
122 @Override
123 @Transactional(readOnly=false)
124 public void removeUserFromGroup(String username, String groupName) {
125 Assert.hasText(username);
126 Assert.hasText(groupName);
127
128 Group group = dao.findGroupByName(groupName);
129 User user = userDao.findUserByUsername(username);
130
131 if(group != null || user != null){
132 if(group.removeMember(user)){
133 dao.update(group);
134 }
135 }
136 }
137
138 /* (non-Javadoc)
139 * @see org.springframework.security.provisioning.GroupManager#findGroupAuthorities(java.lang.String)
140 */
141 @Override
142 public List<GrantedAuthority> findGroupAuthorities(String groupName) {
143 Assert.hasText(groupName);
144 Group group = dao.findGroupByName(groupName);
145
146 if (group != null){
147 return new ArrayList<GrantedAuthority>(group.getGrantedAuthorities());
148 }
149
150 return new ArrayList<GrantedAuthority>();
151 }
152
153 /* (non-Javadoc)
154 * @see org.springframework.security.provisioning.GroupManager#addGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
155 */
156 @Override
157 @Transactional(readOnly=false)
158 public void addGroupAuthority(String groupName, GrantedAuthority authority) {
159 Assert.hasText(groupName);
160 Assert.notNull(authority);
161
162 Group group = dao.findGroupByName(groupName);
163
164 if (group != null){
165 if(group.getGrantedAuthorities().add(authority)){
166 dao.update(group);
167 }
168 }
169 }
170
171 /* (non-Javadoc)
172 * @see org.springframework.security.provisioning.GroupManager#removeGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
173 */
174 @Override
175 @Transactional(readOnly=false)
176 public void removeGroupAuthority(String groupName,
177 GrantedAuthority authority) {
178 Assert.hasText(groupName);
179 Assert.notNull(authority);
180
181 Group group = dao.findGroupByName(groupName);
182
183 if(group != null){
184 if(group.getGrantedAuthorities().remove(authority)) {
185 dao.update(group);
186 }
187 }
188 }
189
190 /* (non-Javadoc)
191 * @see eu.etaxonomy.cdm.api.service.ServiceBase#setDao(eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao)
192 */
193 @Override
194 @Autowired
195 protected void setDao(IGroupDao dao) {
196 this.dao = dao;
197 }
198
199 @Autowired
200 public void setUserDao(IUserDao userDao){
201 this.userDao = userDao;
202 }
203
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 UUID delete(Group group){
243 UUID groupUUID = group.getUuid();
244 this.deleteGroup(group.getName());
245 return groupUUID;
246 }
247
248 }