refactor update title cache
[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
16 import org.hibernate.criterion.Criterion;
17 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.security.core.GrantedAuthority;
19 import org.springframework.stereotype.Service;
20 import org.springframework.transaction.annotation.Propagation;
21 import org.springframework.transaction.annotation.Transactional;
22 import org.springframework.util.Assert;
23
24 import eu.etaxonomy.cdm.model.common.Group;
25 import eu.etaxonomy.cdm.model.common.User;
26 import eu.etaxonomy.cdm.persistence.dao.common.IGroupDao;
27 import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;
28 import eu.etaxonomy.cdm.persistence.query.MatchMode;
29 import eu.etaxonomy.cdm.persistence.query.OrderHint;
30
31 /**
32 * @author n.hoffmann
33 * @created Mar 9, 2011
34 * @version 1.0
35 */
36 @Service
37 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
38 public class GroupServiceImpl extends ServiceBase<Group,IGroupDao> implements IGroupService {
39
40 protected IUserDao userDao;
41
42 /* (non-Javadoc)
43 * @see org.springframework.security.provisioning.GroupManager#findAllGroups()
44 */
45 @Override
46 public List<String> findAllGroups() {
47 return dao.listNames(null,null);
48 }
49
50 /* (non-Javadoc)
51 * @see org.springframework.security.provisioning.GroupManager#findUsersInGroup(java.lang.String)
52 */
53 @Override
54 public List<String> findUsersInGroup(String groupName) {
55 Assert.hasText(groupName);
56 Group group = dao.findGroupByName(groupName);
57
58 List<String> users = dao.listMembers(group, null, null);
59
60 return users;
61 }
62
63 /* (non-Javadoc)
64 * @see org.springframework.security.provisioning.GroupManager#createGroup(java.lang.String, java.util.List)
65 */
66 @Override
67 @Transactional(readOnly=false)
68 public void createGroup(String groupName, List<GrantedAuthority> authorities) {
69 Assert.hasText(groupName);
70 Assert.notNull(authorities);
71
72 Group group = Group.NewInstance(groupName);
73
74 for(GrantedAuthority authority : authorities) {
75 group.getGrantedAuthorities().add(authority);
76 }
77
78 dao.save(group);
79 }
80
81 /* (non-Javadoc)
82 * @see org.springframework.security.provisioning.GroupManager#deleteGroup(java.lang.String)
83 */
84 @Override
85 @Transactional(readOnly=false)
86 public void deleteGroup(String groupName) {
87 Assert.hasText(groupName);
88
89 Group group = dao.findGroupByName(groupName);
90 if(group != null){
91 dao.delete(group);
92 }
93 }
94
95 /* (non-Javadoc)
96 * @see org.springframework.security.provisioning.GroupManager#renameGroup(java.lang.String, java.lang.String)
97 */
98 @Override
99 @Transactional(readOnly=false)
100 public void renameGroup(String oldName, String newName) {
101 Assert.hasText(oldName);
102 Assert.hasText(newName);
103
104 Group group = dao.findGroupByName(oldName);
105
106 group.setName(newName);
107 dao.update(group);
108 }
109
110 /* (non-Javadoc)
111 * @see org.springframework.security.provisioning.GroupManager#addUserToGroup(java.lang.String, java.lang.String)
112 */
113 @Override
114 @Transactional(readOnly=false)
115 public void addUserToGroup(String username, String groupName) {
116 Assert.hasText(username);
117 Assert.hasText(groupName);
118
119 Group group = dao.findGroupByName(groupName);
120 User user = userDao.findUserByUsername(username);
121
122 if(group != null || user != null){
123 if(group.addMember(user)) {
124 dao.update(group);
125 }
126 }
127 }
128
129 /* (non-Javadoc)
130 * @see org.springframework.security.provisioning.GroupManager#removeUserFromGroup(java.lang.String, java.lang.String)
131 */
132 @Override
133 @Transactional(readOnly=false)
134 public void removeUserFromGroup(String username, String groupName) {
135 Assert.hasText(username);
136 Assert.hasText(groupName);
137
138 Group group = dao.findGroupByName(groupName);
139 User user = userDao.findUserByUsername(username);
140
141 if(group != null || user != null){
142 if(group.removeMember(user)){
143 dao.update(group);
144 }
145 }
146 }
147
148 /* (non-Javadoc)
149 * @see org.springframework.security.provisioning.GroupManager#findGroupAuthorities(java.lang.String)
150 */
151 @Override
152 public List<GrantedAuthority> findGroupAuthorities(String groupName) {
153 Assert.hasText(groupName);
154 Group group = dao.findGroupByName(groupName);
155
156 if (group != null){
157 return new ArrayList<GrantedAuthority>(group.getGrantedAuthorities());
158 }
159
160 return new ArrayList<GrantedAuthority>();
161 }
162
163 /* (non-Javadoc)
164 * @see org.springframework.security.provisioning.GroupManager#addGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
165 */
166 @Override
167 @Transactional(readOnly=false)
168 public void addGroupAuthority(String groupName, GrantedAuthority authority) {
169 Assert.hasText(groupName);
170 Assert.notNull(authority);
171
172 Group group = dao.findGroupByName(groupName);
173
174 if (group != null){
175 if(group.getGrantedAuthorities().add(authority)){
176 dao.update(group);
177 }
178 }
179 }
180
181 /* (non-Javadoc)
182 * @see org.springframework.security.provisioning.GroupManager#removeGroupAuthority(java.lang.String, org.springframework.security.core.GrantedAuthority)
183 */
184 @Override
185 @Transactional(readOnly=false)
186 public void removeGroupAuthority(String groupName,
187 GrantedAuthority authority) {
188 Assert.hasText(groupName);
189 Assert.notNull(authority);
190
191 Group group = dao.findGroupByName(groupName);
192
193 if(group != null){
194 if(group.getGrantedAuthorities().remove(authority)) {
195 dao.update(group);
196 }
197 }
198 }
199
200 /* (non-Javadoc)
201 * @see eu.etaxonomy.cdm.api.service.ServiceBase#setDao(eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao)
202 */
203 @Override
204 @Autowired
205 protected void setDao(IGroupDao dao) {
206 this.dao = dao;
207 }
208
209 @Autowired
210 public void setUserDao(IUserDao userDao){
211 this.userDao = userDao;
212 }
213
214 @Transactional(readOnly = true)
215 public List<Group> listByName(String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
216 Integer numberOfResults = dao.countByName(queryString, matchmode, criteria);
217
218 List<Group> results = new ArrayList<Group>();
219 if(numberOfResults > 0) {
220 results = dao.findByName(queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
221 }
222 return results;
223 }
224
225 }