1 package fr.ifremer.quadrige3.core.dao.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.collect.Lists;
27 import fr.ifremer.quadrige3.core.dao.referential.Privilege;
28 import fr.ifremer.quadrige3.core.dao.referential.PrivilegeImpl;
29 import fr.ifremer.quadrige3.core.dao.referential.StatusCode;
30 import fr.ifremer.quadrige3.core.dao.referential.StatusImpl;
31 import fr.ifremer.quadrige3.core.dao.technical.Assert;
32 import fr.ifremer.quadrige3.core.dao.technical.hibernate.TemporaryDataHelper;
33 import fr.ifremer.quadrige3.core.vo.administration.user.DepartmentVO;
34 import fr.ifremer.quadrige3.core.vo.administration.user.LightQuserVO;
35 import fr.ifremer.quadrige3.core.vo.administration.user.PrivilegeVO;
36 import fr.ifremer.quadrige3.core.vo.administration.user.QuserVO;
37 import org.apache.commons.collections.CollectionUtils;
38 import org.apache.commons.lang3.ArrayUtils;
39 import org.apache.commons.lang3.StringUtils;
40 import org.hibernate.Query;
41 import org.hibernate.Session;
42 import org.hibernate.SessionFactory;
43 import org.hibernate.type.IntegerType;
44 import org.hibernate.type.StringType;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.context.annotation.Lazy;
47 import org.springframework.dao.DataRetrievalFailureException;
48 import org.springframework.stereotype.Repository;
49
50 import java.util.*;
51
52
53
54
55
56
57
58
59 @Repository("quserDao")
60 @Lazy
61 public class QuserDaoImpl
62 extends QuserDaoBase
63 implements QuserExtendDao {
64
65
66
67
68
69
70
71 @Autowired
72 public QuserDaoImpl(SessionFactory sessionFactory) {
73 super();
74 setSessionFactory(sessionFactory);
75 }
76
77
78 @Override
79 public Quser createAsTemporary(String lastname, String firstname, Integer departmentId) {
80 Session session = getSession();
81
82 Integer quserId = TemporaryDataHelper.getNewNegativeIdForTemporaryData(session, QuserImpl.class);
83
84
85 Quser target = Quser.Factory.newInstance();
86 target.setQuserId(quserId);
87 target.setQuserLastNm(lastname);
88 target.setQuserFirstNm(firstname);
89 target.setDepartment(load(DepartmentImpl.class, departmentId));
90 target.setQuserCreationDt(new Date());
91 target.setStatus(load(StatusImpl.class, StatusCode.TEMPORARY.getValue()));
92
93 target = create(target);
94
95 return target;
96 }
97
98
99 @Override
100 public void save(QuserVO bean) {
101 Assert.notNull(bean);
102
103 Quser entity = null;
104 if (bean.getQuserId() != null) {
105 entity = load(bean.getQuserId());
106 }
107
108
109 if (entity == null) {
110 entity = Quser.Factory.newInstance();
111
112
113 toEntity(bean, entity);
114
115
116 entity = create(entity);
117
118
119 bean.setQuserId(entity.getQuserId());
120 }
121
122
123 else {
124
125
126 toEntity(bean, entity);
127
128
129 update(entity);
130 }
131 }
132
133
134 @Override
135 public Integer getDepartmentIdByUserId(int userId) {
136 Integer recorderDepartmentId = queryUniqueTyped("departmentIdByQuserId",
137 "quserId", IntegerType.INSTANCE, userId);
138 if (recorderDepartmentId == null) {
139 throw new DataRetrievalFailureException(String.format("Could not load departmentId from quser [quserId=%s]", userId));
140 }
141 return recorderDepartmentId;
142 }
143
144
145 @Override
146 public List<String> getPrivilegeCodesByUserId(int quserId) {
147 return queryListTyped("privilegeCodesByQuserId", "quserId", IntegerType.INSTANCE, quserId);
148 }
149
150
151 @Override
152 public Boolean isLoginExtranet(String login) {
153 Iterator<Boolean> resultIt = queryIteratorTyped("checkExtranetLogin", "login", StringType.INSTANCE, login);
154 if (resultIt.hasNext()) {
155 return resultIt.next();
156 }
157
158 return null;
159 }
160
161
162 @Override
163 public boolean hasPassword(String login) {
164 Long result = queryUniqueTyped("hasCryptPasswordByLogin", "login", StringType.INSTANCE, login);
165
166 return result != null && result > 0;
167 }
168
169
170 @Override
171 public boolean isLocalUserWithNoPassword(String login) {
172 Long result = queryUniqueTyped("isLocalUserWithNoPasswordByLogin", "login", StringType.INSTANCE, login);
173
174 return result != null && result > 0;
175 }
176
177
178 @Override
179 public String getPasswordByUserId(int userId) {
180 Quser p = get(userId);
181 return p.getQuserCryptPassword();
182 }
183
184
185 @Override
186 public void updatePasswordByUserId(int userId, String cryptedPassword) {
187 if (StringUtils.isNotBlank(cryptedPassword)) {
188 Quser p = get(userId);
189 p.setQuserCryptPassword(cryptedPassword);
190 update(p);
191 getSession().flush();
192 }
193 }
194
195
196 @Override
197 public void resetPassword(String login) {
198 Boolean isExtranet = isLoginExtranet(login);
199 if (isExtranet == null) {
200 return;
201 }
202
203 Query query = createQuery(isExtranet ? "resetCryptPasswordByExtranetLogin" : "resetCryptPasswordByLogin",
204 "login", StringType.INSTANCE, login);
205 query.executeUpdate();
206 }
207
208
209 @Override
210 public void remove(Collection<Quser> entities) {
211 if (entities == null)
212 {
213 throw new IllegalArgumentException(
214 "Quser.remove - 'entities' can not be null");
215 }
216 for (Quser entity : entities) {
217 remove(entity);
218 }
219 }
220
221
222 @Override
223 public void remove(Quser entity) {
224 if (entity == null)
225 {
226 throw new IllegalArgumentException(
227 "Quser.remove - 'entity' can not be null");
228 }
229
230
231 if (CollectionUtils.isNotEmpty(entity.getPrivileges())) {
232 entity.getPrivileges().clear();
233 }
234
235 getSession().delete(entity);
236 }
237
238
239 @Override
240 public Quser lightQuserVOToEntity(LightQuserVO source) {
241 Quser target;
242 if (source.getId() > 0) {
243 target = load(source.getId());
244 }
245 else {
246 target = Quser.Factory.newInstance();
247 }
248 toEntity(source, target);
249
250 return target;
251 }
252
253
254 @Override
255 public Quser quserVOToEntity(QuserVO source) {
256 Quser target;
257 if (source.getQuserId() != null) {
258 target = load(source.getQuserId());
259 }
260 else {
261 target = Quser.Factory.newInstance();
262 }
263 toEntity(source, target);
264
265 return target;
266 }
267
268
269
270
271
272
273
274
275
276
277
278
279
280 protected void toEntity(QuserVO source, Quser target) {
281
282 target.setQuserId(source.getQuserId());
283 target.setQuserLastNm(source.getQuserLastNm());
284 target.setQuserFirstNm(source.getQuserFirstNm());
285 target.setQuserIntranetLg(source.getQuserIntranetLg());
286 target.setQuserExtranetLg(source.getQuserExtranetLg());
287 target.setQuserCreationDt(source.getQuserCreationDt());
288 target.setUpdateDt(source.getUpdateDt());
289 target.setQuserEMail(source.getQuserEMail());
290 target.setQuserAddress(source.getQuserAddress());
291 target.setQuserPhone(source.getQuserPhone());
292 target.setQuserOrgan(source.getQuserOrgan());
293 target.setQuserAdminCenter(source.getQuserAdminCenter());
294 target.setQuserSite(source.getQuserSite());
295 target.setQuserLdapPresent(source.getQuserLdapPresent());
296
297
298 Integer sourceDepartmentId = source.getDepId();
299 DepartmentVO sourceDepartment = source.getDepartment();
300 if (sourceDepartmentId == null && sourceDepartment != null) {
301 sourceDepartmentId = sourceDepartment.getDepId();
302 }
303
304
305 if (sourceDepartmentId == null) {
306 target.setDepartment(null);
307 }
308 else {
309 target.setDepartment(load(DepartmentImpl.class, sourceDepartmentId));
310 }
311
312
313 if (source.getStatusCd() == null) {
314 target.setStatus(null);
315 }
316 else {
317 target.setStatus(load(StatusImpl.class, source.getStatusCd()));
318 }
319
320
321 PrivilegeVO[] sourcePrivileges = source.getPrivileges();
322 if (ArrayUtils.isEmpty(sourcePrivileges)) {
323 if (target.getPrivileges() != null) {
324 target.getPrivileges().clear();
325 }
326 }
327 else {
328
329 if (CollectionUtils.isEmpty(target.getPrivileges())) {
330 if (target.getPrivileges() == null) {
331 target.setPrivileges(new HashSet<>());
332 }
333 for (PrivilegeVO sourcePrivilege : sourcePrivileges) {
334 Privilege privilege = load(PrivilegeImpl.class, sourcePrivilege.getPrivilegeCd());
335 target.getPrivileges().add(privilege);
336 }
337 }
338
339
340 else {
341 List<Privilege> privilegesToRemove = Lists.newArrayList(target.getPrivileges());
342
343 for (PrivilegeVO sourcePrivilege : sourcePrivileges) {
344 boolean alreadyExist = false;
345 for (Privilege existingPrivilege : target.getPrivileges()) {
346
347
348 if (Objects.equals(existingPrivilege.getPrivilegeCd(), sourcePrivilege.getPrivilegeCd())) {
349 privilegesToRemove.remove(existingPrivilege);
350 alreadyExist = true;
351 }
352 }
353
354
355 if (!alreadyExist) {
356 Privilege privilege = load(PrivilegeImpl.class, sourcePrivilege.getPrivilegeCd());
357 target.getPrivileges().add(privilege);
358 }
359 }
360
361
362 if (CollectionUtils.isNotEmpty(privilegesToRemove)) {
363 target.getPrivileges().removeAll(privilegesToRemove);
364 }
365 }
366 }
367 }
368
369
370
371
372
373
374
375
376
377
378
379 protected void toEntity(LightQuserVO source, Quser target) {
380
381 target.setQuserId(source.getId());
382 target.setQuserLastNm(source.getLastname());
383 target.setQuserFirstNm(source.getFirstname());
384
385 }
386 }