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.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 }