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