View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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          // ensure that entity listeners are invoked at this point
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 }