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.entity;
20
21 import java.util.List;
22 import org.apache.syncope.core.persistence.api.entity.Any;
23 import org.apache.syncope.core.persistence.api.entity.JSONAttributable;
24 import org.apache.syncope.core.persistence.api.entity.JSONPlainAttr;
25 import org.apache.syncope.core.persistence.api.entity.user.LAPlainAttr;
26 import org.apache.syncope.core.persistence.api.entity.user.LinkedAccount;
27 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
28
29 public abstract class JPAJSONEntityListener<A extends Any<?>> {
30
31 protected abstract List<? extends JSONPlainAttr<A>> getAttrs(String plainAttrsJSON);
32
33 @SuppressWarnings("unchecked")
34 protected void json2list(final JSONAttributable<A> entity, final boolean clearFirst) {
35 if (clearFirst) {
36 entity.getPlainAttrList().clear();
37 }
38 if (entity.getPlainAttrsJSON() != null) {
39 getAttrs(entity.getPlainAttrsJSON()).stream().filter(attr -> attr.getSchema() != null).map(attr -> {
40 if (entity instanceof Any) {
41 attr.setOwner((A) entity);
42 } else if (entity instanceof LinkedAccount) {
43 attr.setOwner((A) ((LinkedAccount) entity).getOwner());
44 ((LAPlainAttr) attr).setAccount((LinkedAccount) entity);
45 }
46 attr.getValues().forEach(value -> value.setAttr(attr));
47 if (attr.getUniqueValue() != null) {
48 attr.getUniqueValue().setAttr(attr);
49 }
50 return attr;
51 }).forEach(entity::add);
52 }
53 }
54
55 protected void list2json(final JSONAttributable<A> entity) {
56 entity.setPlainAttrsJSON(entity.getPlainAttrList().isEmpty()
57 ? "[{}]"
58 : POJOHelper.serialize(entity.getPlainAttrList()));
59 }
60 }