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.task;
20
21 import com.fasterxml.jackson.core.type.TypeReference;
22 import java.util.ArrayList;
23 import java.util.HashSet;
24 import java.util.List;
25 import java.util.Set;
26 import javax.persistence.CascadeType;
27 import javax.persistence.Entity;
28 import javax.persistence.EnumType;
29 import javax.persistence.Enumerated;
30 import javax.persistence.Lob;
31 import javax.persistence.ManyToOne;
32 import javax.persistence.OneToMany;
33 import javax.persistence.PostLoad;
34 import javax.persistence.PostPersist;
35 import javax.persistence.PostUpdate;
36 import javax.persistence.PrePersist;
37 import javax.persistence.PreUpdate;
38 import javax.persistence.Table;
39 import javax.persistence.Transient;
40 import javax.validation.constraints.NotNull;
41 import org.apache.syncope.common.lib.types.AnyTypeKind;
42 import org.apache.syncope.common.lib.types.TraceLevel;
43 import org.apache.syncope.core.persistence.api.entity.Notification;
44 import org.apache.syncope.core.persistence.api.entity.task.NotificationTask;
45 import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
46 import org.apache.syncope.core.persistence.jpa.entity.JPANotification;
47 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
48
49 @Entity
50 @Table(name = JPANotificationTask.TABLE)
51 public class JPANotificationTask extends AbstractTask<NotificationTask> implements NotificationTask {
52
53 private static final long serialVersionUID = 95731573485279180L;
54
55 public static final String TABLE = "NotificationTask";
56
57 protected static final TypeReference<List<String>> TYPEREF = new TypeReference<List<String>>() {
58 };
59
60 @NotNull
61 @ManyToOne
62 private JPANotification notification;
63
64 @Enumerated(EnumType.STRING)
65 private AnyTypeKind anyTypeKind;
66
67 private String entityKey;
68
69 @Lob
70 private String recipients;
71
72 @Transient
73 private Set<String> recipientsSet = new HashSet<>();
74
75 @OneToMany(targetEntity = JPANotificationTaskExec.class,
76 cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "task")
77 private List<TaskExec<NotificationTask>> executions = new ArrayList<>();
78
79 @NotNull
80 private String sender;
81
82 @NotNull
83 private String subject;
84
85 @NotNull
86 @Lob
87 private String textBody;
88
89 @NotNull
90 @Lob
91 private String htmlBody;
92
93 @NotNull
94 private Boolean executed = false;
95
96 @Enumerated(EnumType.STRING)
97 @NotNull
98 private TraceLevel traceLevel;
99
100 @Override
101 public Notification getNotification() {
102 return notification;
103 }
104
105 @Override
106 public void setNotification(final Notification notification) {
107 checkType(notification, JPANotification.class);
108 this.notification = (JPANotification) notification;
109 }
110
111 @Override
112 public AnyTypeKind getAnyTypeKind() {
113 return anyTypeKind;
114 }
115
116 @Override
117 public void setAnyTypeKind(final AnyTypeKind anyTypeKind) {
118 this.anyTypeKind = anyTypeKind;
119 }
120
121 @Override
122 public String getEntityKey() {
123 return entityKey;
124 }
125
126 @Override
127 public void setEntityKey(final String entityKey) {
128 this.entityKey = entityKey;
129 }
130
131 @Override
132 public Set<String> getRecipients() {
133 return recipientsSet;
134 }
135
136 @Override
137 public String getSender() {
138 return sender;
139 }
140
141 @Override
142 public void setSender(final String sender) {
143 this.sender = sender;
144 }
145
146 @Override
147 public String getSubject() {
148 return subject;
149 }
150
151 @Override
152 public void setSubject(final String subject) {
153 this.subject = subject;
154 }
155
156 @Override
157 public String getTextBody() {
158 return textBody;
159 }
160
161 @Override
162 public void setTextBody(final String textBody) {
163 this.textBody = textBody;
164 }
165
166 @Override
167 public String getHtmlBody() {
168 return htmlBody;
169 }
170
171 @Override
172 public void setHtmlBody(final String htmlBody) {
173 this.htmlBody = htmlBody;
174 }
175
176 @Override
177 public boolean isExecuted() {
178 return executed;
179 }
180
181 @Override
182 public void setExecuted(final boolean executed) {
183 this.executed = executed;
184 }
185
186 @Override
187 public TraceLevel getTraceLevel() {
188 return traceLevel;
189 }
190
191 @Override
192 public void setTraceLevel(final TraceLevel traceLevel) {
193 this.traceLevel = traceLevel;
194 }
195
196 @Override
197 protected Class<? extends TaskExec<NotificationTask>> executionClass() {
198 return JPANotificationTaskExec.class;
199 }
200
201 @Override
202 protected List<TaskExec<NotificationTask>> executions() {
203 return executions;
204 }
205
206 protected void json2list(final boolean clearFirst) {
207 if (clearFirst) {
208 getRecipients().clear();
209 }
210 if (recipients != null) {
211 getRecipients().addAll(POJOHelper.deserialize(recipients, TYPEREF));
212 }
213 }
214
215 @PostLoad
216 public void postLoad() {
217 json2list(false);
218 }
219
220 @PostPersist
221 @PostUpdate
222 public void postSave() {
223 json2list(true);
224 }
225
226 @PrePersist
227 @PreUpdate
228 public void list2json() {
229 recipients = POJOHelper.serialize(getRecipients());
230 }
231 }