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.Collection;
22 import java.util.List;
23 import javax.persistence.TypedQuery;
24 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
25 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
26 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
27 import org.apache.syncope.core.persistence.api.entity.DerSchema;
28 import org.apache.syncope.core.persistence.jpa.entity.JPADerSchema;
29
30 public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchemaDAO {
31
32 protected final ExternalResourceDAO resourceDAO;
33
34 public JPADerSchemaDAO(final ExternalResourceDAO resourceDAO) {
35 this.resourceDAO = resourceDAO;
36 }
37
38 @Override
39 public DerSchema find(final String key) {
40 return entityManager().find(JPADerSchema.class, key);
41 }
42
43 @Override
44 public List<DerSchema> findByAnyTypeClasses(final Collection<AnyTypeClass> anyTypeClasses) {
45 StringBuilder queryString = new StringBuilder("SELECT e FROM ").
46 append(JPADerSchema.class.getSimpleName()).
47 append(" e WHERE ");
48 anyTypeClasses.forEach(anyTypeClass -> queryString.
49 append("e.anyTypeClass.id='").
50 append(anyTypeClass.getKey()).append("' OR "));
51
52 TypedQuery<DerSchema> query = entityManager().createQuery(
53 queryString.substring(0, queryString.length() - 4), DerSchema.class);
54
55 return query.getResultList();
56 }
57
58 @Override
59 public List<DerSchema> findByKeyword(final String keyword) {
60 TypedQuery<DerSchema> query = entityManager().createQuery(
61 "SELECT e FROM " + JPADerSchema.class.getSimpleName() + " e"
62 + " WHERE e.id LIKE :keyword", DerSchema.class);
63 query.setParameter("keyword", keyword);
64 return query.getResultList();
65 }
66
67 @Override
68 public List<DerSchema> findAll() {
69 TypedQuery<DerSchema> query = entityManager().createQuery(
70 "SELECT e FROM " + JPADerSchema.class.getSimpleName() + " e", DerSchema.class);
71 return query.getResultList();
72 }
73
74 @Override
75 public DerSchema save(final DerSchema schema) {
76 ((JPADerSchema) schema).map2json();
77 return entityManager().merge(schema);
78 }
79
80 @Override
81 public void delete(final String key) {
82 final DerSchema schema = find(key);
83 if (schema == null) {
84 return;
85 }
86
87 resourceDAO.deleteMapping(key);
88
89 if (schema.getAnyTypeClass() != null) {
90 schema.getAnyTypeClass().getDerSchemas().remove(schema);
91 }
92
93 entityManager().remove(schema);
94 }
95 }