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.common.lib.policy.DefaultAuthPolicyConf;
24 import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
25 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
26 import org.apache.syncope.core.persistence.api.entity.am.AuthModule;
27 import org.apache.syncope.core.persistence.api.entity.policy.AuthPolicy;
28 import org.apache.syncope.core.persistence.jpa.entity.am.JPAAuthModule;
29 import org.springframework.transaction.annotation.Transactional;
30
31 public class JPAAuthModuleDAO extends AbstractDAO<AuthModule> implements AuthModuleDAO {
32
33 protected final PolicyDAO policyDAO;
34
35 public JPAAuthModuleDAO(final PolicyDAO policyDAO) {
36 this.policyDAO = policyDAO;
37 }
38
39 @Transactional(readOnly = true)
40 @Override
41 public AuthModule find(final String key) {
42 return entityManager().find(JPAAuthModule.class, key);
43 }
44
45 @Transactional(readOnly = true)
46 @Override
47 public List<AuthModule> findAll() {
48 TypedQuery<AuthModule> query = entityManager().createQuery(
49 "SELECT e FROM " + JPAAuthModule.class.getSimpleName() + " e", AuthModule.class);
50 return query.getResultList();
51 }
52
53 @Override
54 public AuthModule save(final AuthModule authModule) {
55 ((JPAAuthModule) authModule).list2json();
56 return entityManager().merge(authModule);
57 }
58
59 @Override
60 public void delete(final String key) {
61 AuthModule authModule = find(key);
62 if (authModule == null) {
63 return;
64 }
65
66 delete(authModule);
67 }
68
69 @Override
70 public void delete(final AuthModule authModule) {
71 policyDAO.find(AuthPolicy.class).stream().
72 filter(policy -> policy.getConf() instanceof DefaultAuthPolicyConf).
73 forEach(policy -> {
74 DefaultAuthPolicyConf conf = (DefaultAuthPolicyConf) policy.getConf();
75 if (conf.getAuthModules().remove(authModule.getKey())) {
76 policy.setConf(conf);
77 policyDAO.save(policy);
78 }
79 });
80
81 entityManager().remove(authModule);
82 }
83 }