1 package fr.ifremer.quadrige2.core.service.administration.user;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import com.google.common.base.Preconditions;
27 import fr.ifremer.quadrige2.core.config.Quadrige2Configuration;
28 import fr.ifremer.quadrige2.core.dao.administration.user.DepartmentExtendDao;
29 import fr.ifremer.quadrige2.core.dao.administration.user.DepartmentJdbcDao;
30 import fr.ifremer.quadrige2.core.dao.administration.user.QuserExtendDao;
31 import fr.ifremer.quadrige2.core.dao.administration.user.QuserJdbcDao;
32 import fr.ifremer.quadrige2.core.dao.referential.*;
33 import fr.ifremer.quadrige2.core.vo.administration.user.DepartmentVO;
34 import fr.ifremer.quadrige2.core.vo.administration.user.LightQuserVO;
35 import fr.ifremer.quadrige2.core.vo.administration.user.PrivilegeVO;
36 import fr.ifremer.quadrige2.core.vo.administration.user.QuserVO;
37 import org.apache.commons.collections4.CollectionUtils;
38 import org.apache.commons.lang3.ArrayUtils;
39 import org.apache.commons.lang3.StringUtils;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.context.annotation.Lazy;
42 import org.springframework.stereotype.Service;
43
44 import javax.annotation.Resource;
45 import java.util.List;
46
47
48
49
50
51
52
53 @Service("userService")
54 @Lazy
55 public class UserServiceImpl implements UserService {
56
57
58
59 @Autowired(required = false)
60 protected QuserExtendDao quserDao;
61
62 @Autowired(required = false)
63 protected DepartmentExtendDao departmentDao;
64
65 @Autowired(required = false)
66 protected StatusDao statusDao;
67
68 @Autowired(required = false)
69 protected PrivilegeDao privilegeDao;
70
71 @Resource
72 protected QuserJdbcDao quserJdbcDao;
73
74 @Resource
75 protected DepartmentJdbcDao departmentJdbcDao;
76
77 @Resource
78 protected Quadrige2Configuration config;
79
80
81 @Override
82 public QuserVO getUserById(int userId) {
83 return quserJdbcDao.getUserById(userId);
84 }
85
86
87 @Override
88 public QuserVO getUserWithDepartmentAndPrivilegesById(int userId) {
89 QuserVO user = quserJdbcDao.getUserById(userId);
90
91
92 if (user.getDepId() != null && user.getDepartment() == null) {
93 DepartmentVO department = departmentJdbcDao.getDepartmentById(user.getDepId());
94 user.setDepartment(department);
95 }
96
97
98 List<PrivilegeVO> userPrivileges = quserJdbcDao.getPrivilegesByUserId(userId);
99 if (CollectionUtils.isNotEmpty(userPrivileges)) {
100 user.setPrivileges(userPrivileges.toArray(new PrivilegeVO[userPrivileges.size()]));
101 }
102
103 return user;
104 }
105
106
107 @Override
108 public LightQuserVO getLightUserById(int quserId) {
109 return quserJdbcDao.getLightUserById(quserId);
110 }
111
112
113 @Override
114 public QuserVO save(QuserVO user, boolean saveOtherLinkedEntities) {
115 Preconditions.checkNotNull(user);
116
117
118 if (saveOtherLinkedEntities && user.getStatusCd() != null) {
119 makeSureStatusExists(user.getStatusCd());
120 }
121
122
123 if (saveOtherLinkedEntities && user.getDepartment() != null) {
124 DepartmentVO department = user.getDepartment();
125
126
127 if (department.getStatusCd() != null) {
128 makeSureStatusExists(department.getStatusCd());
129 }
130
131
132 department = departmentDao.save(department);
133
134
135 user.setDepartment(department);
136 if (department != null) {
137 user.setDepId(department.getDepId());
138 } else {
139 user.setDepId(null);
140 }
141 }
142
143
144 if (saveOtherLinkedEntities && ArrayUtils.isNotEmpty(user.getPrivileges())) {
145 for (PrivilegeVO privilegeVO : user.getPrivileges()) {
146 makeSurePrivilegeExists(privilegeVO);
147 }
148 }
149
150
151 user = quserDao.save(user);
152
153 return user;
154 }
155
156
157
158
159
160
161
162
163
164
165
166 protected void makeSureStatusExists(String statusCode) {
167 getStatusAndMakeSureExists(statusCode);
168 }
169
170
171
172
173
174
175
176
177
178
179 protected Status getStatusAndMakeSureExists(String statusCode) {
180 Status status = statusDao.load(statusCode);
181
182
183 if (status != null) {
184 return status;
185 }
186
187
188 status = Status.Factory.newInstance();
189
190
191 status.setStatusCd(statusCode);
192
193
194 StatusCode statusEnum = StatusCode.valueOf(statusCode);
195 if (statusEnum != null) {
196 status.setStatusNm(statusEnum.name());
197 } else {
198 status.setStatusNm("Status " + statusCode);
199 }
200
201
202 return statusDao.create(status);
203 }
204
205
206
207
208
209
210
211
212
213 protected void makeSurePrivilegeExists(PrivilegeVO privilegeVO) {
214 Preconditions.checkNotNull(privilegeVO);
215 Preconditions.checkNotNull(privilegeVO.getPrivilegeCd());
216
217 Privilege privilege = privilegeDao.load(privilegeVO.getPrivilegeCd());
218
219
220 if (privilege != null) {
221 return;
222 }
223
224
225 privilege = Privilege.Factory.newInstance();
226
227
228 privilege.setPrivilegeCd(privilegeVO.getPrivilegeCd());
229
230
231 if (StringUtils.isNotBlank(privilegeVO.getPrivilegeNm())) {
232 privilege.setPrivilegeNm(privilegeVO.getPrivilegeNm());
233 } else {
234 privilege.setPrivilegeNm(privilegeVO.getPrivilegeCd());
235 }
236
237
238 String statusCode = privilegeVO.getStatusCd();
239 if (StringUtils.isBlank(statusCode)) {
240 statusCode = StatusCode.ENABLE.value();
241 }
242 Status status = getStatusAndMakeSureExists(statusCode);
243 privilege.setStatus(status);
244
245
246 privilegeDao.create(privilege);
247 }
248
249 }