1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa.dao;
20
21 import java.util.List;
22 import javax.persistence.TypedQuery;
23 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
24 import org.apache.syncope.core.persistence.api.dao.UserDAO;
25 import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
26 import org.apache.syncope.core.persistence.jpa.entity.user.JPASecurityQuestion;
27
28 public class JPASecurityQuestionDAO extends AbstractDAO<SecurityQuestion> implements SecurityQuestionDAO {
29
30 protected final UserDAO userDAO;
31
32 public JPASecurityQuestionDAO(final UserDAO userDAO) {
33 this.userDAO = userDAO;
34 }
35
36 @Override
37 public SecurityQuestion find(final String key) {
38 return entityManager().find(JPASecurityQuestion.class, key);
39 }
40
41 @Override
42 public List<SecurityQuestion> findAll() {
43 TypedQuery<SecurityQuestion> query = entityManager().createQuery(
44 "SELECT e FROM " + JPASecurityQuestion.class.getSimpleName() + " e ", SecurityQuestion.class);
45 return query.getResultList();
46 }
47
48 @Override
49 public SecurityQuestion save(final SecurityQuestion securityQuestion) {
50 return entityManager().merge(securityQuestion);
51 }
52
53 @Override
54 public void delete(final String key) {
55 SecurityQuestion securityQuestion = find(key);
56 if (securityQuestion == null) {
57 return;
58 }
59
60 userDAO.findBySecurityQuestion(securityQuestion).forEach(user -> {
61 user.setSecurityQuestion(null);
62 user.setSecurityAnswer(null);
63 userDAO.save(user);
64 });
65
66 entityManager().remove(securityQuestion);
67 }
68 }