1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.service.impl;
17
18 import org.apache.log4j.Logger;
19 import org.kuali.rice.core.api.mail.MailMessage;
20 import org.kuali.rice.core.api.mail.Mailer;
21 import org.kuali.rice.kim.api.identity.Person;
22 import org.kuali.rice.krad.exception.ExceptionIncident;
23 import org.kuali.rice.krad.exception.KualiExceptionIncident;
24 import org.kuali.rice.krad.service.KRADServiceLocator;
25 import org.kuali.rice.krad.service.KualiExceptionIncidentService;
26 import org.kuali.rice.krad.util.GlobalVariables;
27 import org.kuali.rice.krad.util.KRADConstants;
28
29 import java.util.ArrayList;
30 import java.util.HashSet;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.Set;
34
35
36
37
38
39
40
41
42 public class KualiExceptionIncidentServiceImpl implements KualiExceptionIncidentService {
43 private Logger LOG=Logger.getLogger(KualiExceptionIncidentServiceImpl.class);
44
45
46
47
48 private String incidentMailingList;
49
50
51
52
53
54
55
56
57
58 public static final String REPORT_MAIL_LIST=String.format(
59 "%s.REPORT_MAIL_LIST",KualiExceptionIncidentServiceImpl.class.getSimpleName());
60
61
62
63 private Mailer mailer;
64
65
66
67
68
69 public final void setMailer(Mailer mailer) {
70 this.mailer = mailer;
71 }
72
73
74
75
76 private MailMessage messageTemplate;
77
78
79
80
81
82
83 @Override
84 public void emailReport(String subject, String message) throws Exception {
85 if (LOG.isTraceEnabled()) {
86 String lm=String.format("ENTRY %s;%s",
87 (subject==null)?"null":subject.toString(),
88 (message==null)?"null":message.toString());
89 LOG.trace(lm);
90 }
91
92 if (mailer == null) {
93 String errorMessage = "mailer property of KualiExceptionIncidentServiceImpl is null";
94 LOG.fatal(errorMessage);
95 throw new IllegalStateException(errorMessage);
96 }
97
98
99 MailMessage msg=createMailMessage(subject, message);
100 mailer.sendEmail(msg);
101
102 if (LOG.isTraceEnabled()) {
103 LOG.trace("EXIT");
104 }
105 }
106
107
108
109
110
111
112
113
114
115
116 @SuppressWarnings("unchecked")
117 private MailMessage createMailMessage(String subject, String message)
118 throws Exception{
119 if (LOG.isTraceEnabled()) {
120 String lm=String.format("ENTRY %s%n%s",
121 (subject==null)?"null":subject.toString(),
122 (message==null)?"null":message.toString());
123 LOG.trace(lm);
124 }
125
126 if (messageTemplate == null) {
127 throw new IllegalStateException(String.format(
128 "%s.templateMessage is null or not set",
129 this.getClass().getName()));
130 }
131
132
133 MailMessage msg=new MailMessage();
134
135 Person actualUser = GlobalVariables.getUserSession().getPerson();
136 String fromEmail = actualUser.getEmailAddress();
137 if ((fromEmail != null) && (fromEmail != "")) {
138 msg.setFromAddress(fromEmail);
139 } else {
140 msg.setFromAddress(messageTemplate.getFromAddress());
141 }
142
143 msg.setBccAddresses(messageTemplate.getBccAddresses());
144 msg.setCcAddresses(messageTemplate.getCcAddresses());
145
146 Set emails=messageTemplate.getToAddresses();
147 if (emails == null || emails.isEmpty()) {
148 String mailingList= KRADServiceLocator.getKualiConfigurationService().getPropertyValueAsString(
149 REPORT_MAIL_LIST);
150 if (mailingList == null || mailingList.trim().length() == 0) {
151 String em=REPORT_MAIL_LIST+" is not set or messageTemplate does not have ToAddresses already set.";
152 LOG.error(em);
153 throw new IllegalStateException(em);
154 } else {
155 msg.setToAddresses(new HashSet<String>(split(mailingList,
156 KRADConstants.FIELD_CONVERSIONS_SEPARATOR)));
157 }
158 } else {
159 msg.setToAddresses(emails);
160 }
161
162
163 msg.setSubject((subject==null)?"":subject);
164
165
166 msg.setMessage((message==null)?"":message);
167
168 if (LOG.isTraceEnabled()) {
169 String lm=String.format("EXIT %s",
170 (msg==null)?"null":msg.toString());
171 LOG.trace(lm);
172 }
173
174 return msg;
175 }
176
177
178
179
180
181
182 @Override
183 public void report(KualiExceptionIncident exceptionIncident) throws Exception {
184 if (LOG.isTraceEnabled()) {
185 String lm=String.format("ENTRY %s",
186 (exceptionIncident==null)?"null":exceptionIncident.toString());
187 LOG.trace(lm);
188 }
189
190 emailReport(
191 exceptionIncident.getProperty(
192 KualiExceptionIncident.EXCEPTION_REPORT_SUBJECT),
193 exceptionIncident.getProperty(
194 KualiExceptionIncident.EXCEPTION_REPORT_MESSAGE));
195
196 if (LOG.isTraceEnabled()) {
197 String lm=String.format("EXIT");
198 LOG.trace(lm);
199 }
200
201 }
202
203
204
205
206
207
208
209
210
211
212 public List<String> split(String s, String token) {
213 if (LOG.isTraceEnabled()) {
214 String lm=String.format("ENTRY %s;%s", s, token);
215 LOG.trace(lm);
216 }
217
218 String[] sarray=s.split(token);
219 List<String> list=new ArrayList<String>();
220 for (int i=0; i<sarray.length && sarray[i].length() > 0; i++) {
221 list.add(sarray[i]);
222 }
223
224 if (LOG.isTraceEnabled()) {
225 String lm=String.format("EXIT %s", list.toString());
226 LOG.trace(lm);
227 }
228
229 return list;
230 }
231
232
233
234
235 public final MailMessage getMessageTemplate() {
236 return this.messageTemplate;
237 }
238
239
240
241
242 public final void setMessageTemplate(MailMessage messageTemplate) {
243 this.messageTemplate = messageTemplate;
244 }
245
246
247
248
249
250
251
252 @Override
253 public KualiExceptionIncident getExceptionIncident(Exception exception,
254 Map<String, String> properties) {
255 if ( exception == null ) {
256 return getExceptionIncident(properties);
257 }
258 if (LOG.isTraceEnabled()) {
259 String lm=String.format("ENTRY %s;%s", exception.getMessage(),
260 properties.toString());
261 LOG.trace(lm);
262 }
263
264 KualiExceptionIncident ei=new ExceptionIncident(exception, properties);
265
266 if (LOG.isTraceEnabled()) {
267 String lm=String.format("EXIT %s", ei.toProperties().toString());
268 LOG.trace(lm);
269 }
270
271 return ei;
272 }
273
274
275
276
277
278
279
280 @Override
281 public KualiExceptionIncident getExceptionIncident(Map<String, String> properties) {
282 if (LOG.isTraceEnabled()) {
283 String lm=String.format("ENTRY %s", properties.toString());
284 LOG.trace(lm);
285 }
286
287 ExceptionIncident ei=new ExceptionIncident(properties);
288
289 if (LOG.isTraceEnabled()) {
290 String lm=String.format("EXIT %s", ei.toProperties().toString());
291 LOG.trace(lm);
292 }
293
294 return ei;
295 }
296
297
298
299
300 public String getIncidentMailingList() {
301 return this.incidentMailingList;
302 }
303
304
305
306
307 public void setIncidentMailingList(String incidentMailingList) {
308 this.incidentMailingList = incidentMailingList;
309 }
310
311 }