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 com.fasterxml.jackson.core.type.TypeReference;
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Optional;
25 import javax.persistence.CascadeType;
26 import javax.persistence.Entity;
27 import javax.persistence.EnumType;
28 import javax.persistence.Enumerated;
29 import javax.persistence.FetchType;
30 import javax.persistence.JoinColumn;
31 import javax.persistence.Lob;
32 import javax.persistence.ManyToOne;
33 import javax.persistence.OneToMany;
34 import javax.persistence.PostLoad;
35 import javax.persistence.PostPersist;
36 import javax.persistence.PostUpdate;
37 import javax.persistence.PrePersist;
38 import javax.persistence.PreUpdate;
39 import javax.persistence.Table;
40 import javax.persistence.Transient;
41 import javax.validation.constraints.NotNull;
42 import org.apache.syncope.common.lib.types.IdRepoImplementationType;
43 import org.apache.syncope.common.lib.types.TraceLevel;
44 import org.apache.syncope.core.persistence.api.entity.AnyAbout;
45 import org.apache.syncope.core.persistence.api.entity.AnyType;
46 import org.apache.syncope.core.persistence.api.entity.Implementation;
47 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
48 import org.apache.syncope.core.persistence.api.entity.Notification;
49 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
50
51 @Entity
52 @Table(name = JPANotification.TABLE)
53 public class JPANotification extends AbstractGeneratedKeyEntity implements Notification {
54
55 private static final long serialVersionUID = 3112582296912757537L;
56
57 public static final String TABLE = "Notification";
58
59 protected static final TypeReference<List<String>> TYPEREF = new TypeReference<List<String>>() {
60 };
61
62 @Lob
63 private String events;
64
65 @Transient
66 private List<String> eventsList = new ArrayList<>();
67
68 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "notification")
69 private List<JPAAnyAbout> abouts = new ArrayList<>();
70
71 private String recipientsFIQL;
72
73 @Lob
74 private String staticRecipients;
75
76 @Transient
77 private List<String> staticRecipientsList = new ArrayList<>();
78
79 @NotNull
80 private String recipientAttrName;
81
82 @ManyToOne
83 private JPAImplementation recipientsProvider;
84
85 @NotNull
86 private Boolean selfAsRecipient = false;
87
88 @NotNull
89 private String sender;
90
91 @NotNull
92 private String subject;
93
94 @ManyToOne(fetch = FetchType.EAGER, optional = false)
95 @JoinColumn(name = "template_id")
96 private JPAMailTemplate template;
97
98 @NotNull
99 @Enumerated(EnumType.STRING)
100 private TraceLevel traceLevel = TraceLevel.ALL;
101
102 @NotNull
103 private Boolean active = true;
104
105 @Override
106 public String getRecipientsFIQL() {
107 return recipientsFIQL;
108 }
109
110 @Override
111 public void setRecipientsFIQL(final String recipientsFIQL) {
112 this.recipientsFIQL = recipientsFIQL;
113 }
114
115 @Override
116 public String getRecipientAttrName() {
117 return recipientAttrName;
118 }
119
120 @Override
121 public void setRecipientAttrName(final String recipientAttrName) {
122 this.recipientAttrName = recipientAttrName;
123 }
124
125 @Override
126 public Implementation getRecipientsProvider() {
127 return recipientsProvider;
128 }
129
130 @Override
131 public void setRecipientsProvider(final Implementation recipientsProvider) {
132 checkType(recipientsProvider, JPAImplementation.class);
133 checkImplementationType(recipientsProvider, IdRepoImplementationType.RECIPIENTS_PROVIDER);
134 this.recipientsProvider = (JPAImplementation) recipientsProvider;
135 }
136
137 @Override
138 public List<String> getEvents() {
139 return eventsList;
140 }
141
142 @Override
143 public boolean add(final AnyAbout about) {
144 checkType(about, JPAAnyAbout.class);
145 return this.abouts.add((JPAAnyAbout) about);
146 }
147
148 @Override
149 public Optional<? extends AnyAbout> getAbout(final AnyType anyType) {
150 return abouts.stream().filter(about -> anyType != null && anyType.equals(about.getAnyType())).findFirst();
151 }
152
153 @Override
154 public List<? extends AnyAbout> getAbouts() {
155 return abouts;
156 }
157
158 @Override
159 public List<String> getStaticRecipients() {
160 return staticRecipientsList;
161 }
162
163 @Override
164 public boolean isSelfAsRecipient() {
165 return selfAsRecipient;
166 }
167
168 @Override
169 public void setSelfAsRecipient(final boolean selfAsRecipient) {
170 this.selfAsRecipient = selfAsRecipient;
171 }
172
173 @Override
174 public String getSender() {
175 return sender;
176 }
177
178 @Override
179 public void setSender(final String sender) {
180 this.sender = sender;
181 }
182
183 @Override
184 public String getSubject() {
185 return subject;
186 }
187
188 @Override
189
190 public void setSubject(final String subject) {
191 this.subject = subject;
192 }
193
194 @Override
195 public MailTemplate getTemplate() {
196 return template;
197 }
198
199 @Override
200 public void setTemplate(final MailTemplate template) {
201 checkType(template, JPAMailTemplate.class);
202 this.template = (JPAMailTemplate) template;
203 }
204
205 @Override
206 public TraceLevel getTraceLevel() {
207 return traceLevel;
208 }
209
210 @Override
211 public void setTraceLevel(final TraceLevel traceLevel) {
212 this.traceLevel = traceLevel;
213 }
214
215 @Override
216 public boolean isActive() {
217 return active;
218 }
219
220 @Override
221 public void setActive(final boolean active) {
222 this.active = active;
223 }
224
225 protected void json2list(final boolean clearFirst) {
226 if (clearFirst) {
227 getEvents().clear();
228 getStaticRecipients().clear();
229 }
230 if (events != null) {
231 getEvents().addAll(POJOHelper.deserialize(events, TYPEREF));
232 }
233 if (staticRecipients != null) {
234 getStaticRecipients().addAll(POJOHelper.deserialize(staticRecipients, TYPEREF));
235 }
236 }
237
238 @PostLoad
239 public void postLoad() {
240 json2list(false);
241 }
242
243 @PostPersist
244 @PostUpdate
245 public void postSave() {
246 json2list(true);
247 }
248
249 @PrePersist
250 @PreUpdate
251 public void list2json() {
252 events = POJOHelper.serialize(getEvents());
253 staticRecipients = POJOHelper.serialize(getStaticRecipients());
254 }
255 }