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 java.util.Optional;
23 import java.util.Set;
24 import org.apache.commons.lang3.tuple.Pair;
25 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
26 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
27 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
28 import org.apache.syncope.core.persistence.api.dao.JPAJSONAnyDAO;
29 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
30 import org.apache.syncope.core.persistence.api.dao.UserDAO;
31 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
32 import org.apache.syncope.core.persistence.api.entity.DerSchema;
33 import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
34 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
35 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
36 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
37 import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAJSONAnyObject;
38
39 public class JPAJSONAnyObjectDAO extends JPAAnyObjectDAO {
40
41 protected final JPAJSONAnyDAO anyDAO;
42
43 public JPAJSONAnyObjectDAO(
44 final AnyUtilsFactory anyUtilsFactory,
45 final PlainSchemaDAO plainSchemaDAO,
46 final DerSchemaDAO derSchemaDAO,
47 final DynRealmDAO dynRealmDAO,
48 final UserDAO userDAO,
49 final GroupDAO groupDAO,
50 final JPAJSONAnyDAO anyDAO) {
51
52 super(anyUtilsFactory, plainSchemaDAO, derSchemaDAO, dynRealmDAO, userDAO, groupDAO);
53 this.anyDAO = anyDAO;
54 }
55
56 @Override
57 public List<AnyObject> findByPlainAttrValue(
58 final PlainSchema schema,
59 final PlainAttrValue attrValue,
60 final boolean ignoreCaseMatch) {
61
62 return anyDAO.findByPlainAttrValue(
63 JPAJSONAnyObject.TABLE, anyUtils(), schema, attrValue, ignoreCaseMatch);
64 }
65
66 @Override
67 public Optional<AnyObject> findByPlainAttrUniqueValue(
68 final PlainSchema schema,
69 final PlainAttrUniqueValue attrUniqueValue,
70 final boolean ignoreCaseMatch) {
71
72 return anyDAO.findByPlainAttrUniqueValue(
73 JPAJSONAnyObject.TABLE, anyUtils(), schema, attrUniqueValue, ignoreCaseMatch);
74 }
75
76 @Override
77 public List<AnyObject> findByDerAttrValue(
78 final DerSchema schema,
79 final String value,
80 final boolean ignoreCaseMatch) {
81
82 return anyDAO.findByDerAttrValue(JPAJSONAnyObject.TABLE, anyUtils(), schema, value, ignoreCaseMatch);
83 }
84
85 @Override
86 protected Pair<AnyObject, Pair<Set<String>, Set<String>>> doSave(final AnyObject anyObject) {
87 AnyObject merged = entityManager().merge(anyObject);
88
89
90 entityManager().flush();
91
92 Pair<Set<String>, Set<String>> dynGroupMembs = groupDAO.refreshDynMemberships(merged);
93 dynRealmDAO.refreshDynMemberships(merged);
94
95 return Pair.of(merged, dynGroupMembs);
96 }
97
98 @Override
99 public AnyObject save(final AnyObject anyObject) {
100 anyDAO.checkBeforeSave(JPAJSONAnyObject.TABLE, anyUtils(), anyObject);
101 return super.save(anyObject);
102 }
103 }