KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > error > EmailErrorHandler


1 /*
2  * Created on Jul 1, 2004
3  */

4 package com.openedit.error;
5 import java.io.PrintWriter JavaDoc;
6 import java.io.StringWriter JavaDoc;
7 import java.util.Collection JavaDoc;
8 import java.util.HashSet JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.Set JavaDoc;
11
12 import javax.servlet.http.HttpServletRequest JavaDoc;
13
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16
17 import com.openedit.OpenEditException;
18 import com.openedit.WebPageRequest;
19 import com.openedit.config.Configuration;
20 import com.openedit.config.XMLConfiguration;
21 import com.openedit.hittracker.HitTracker;
22 import com.openedit.modules.email.PostMail;
23 import com.openedit.page.Page;
24 import com.openedit.page.PageRequestKeys;
25 import com.openedit.page.manage.PageManager;
26 import com.openedit.users.Group;
27 import com.openedit.users.User;
28 import com.openedit.users.UserManager;
29
30 /**
31  * @author Matthew Avery, mavery@einnovation.com
32  */

33 public class EmailErrorHandler implements ErrorHandler
34 {
35     protected String JavaDoc fieldRecipientList;
36     protected String JavaDoc fieldServer;
37     protected String JavaDoc fieldFrom;
38     
39     protected boolean fieldConsumeErrors;
40     protected PageManager fieldPageManager;
41     protected UserManager fieldUserManager;
42     protected PostMail postMail;
43     private static Log log = LogFactory.getLog(EmailErrorHandler.class);
44     
45     public boolean handleError(Exception JavaDoc error, WebPageRequest inRequest)
46     //public boolean handleError( Exception error, String inPath, WebPageRequest inContext )
47
{
48         try
49         {
50             if ( fieldRecipientList == null)
51             {
52                 configure();
53             }
54             Set JavaDoc emails = findNotificationEmailAddresses();
55             if( emails.size() == 0)
56             {
57                 log.error("No users configured to receive email error notifications");
58                 return false;
59             }
60             String JavaDoc server = (String JavaDoc) inRequest.getPageValue(PageRequestKeys.WEB_SERVER_PATH);
61             
62             if( server == null )
63             {
64                 server = (String JavaDoc) inRequest.getPageValue("hostName");
65             }
66             String JavaDoc message = createMessage(error, inRequest, server);
67
68             String JavaDoc subject = "Open Edit error: ";
69             if ( server != null )
70             {
71                 subject = "Open Edit error on " + server + ": ";
72             }
73             if ( error.getMessage() != null )
74             {
75                 subject = subject + error.getMessage();
76             }
77             //Loop over the groups and fill a list of users
78

79             String JavaDoc[] recepients = (String JavaDoc[])emails.toArray(new String JavaDoc[emails.size()]);
80             
81             postMail.postMail(recepients,subject,null,message,getFrom());
82         }
83         catch (Exception JavaDoc e)
84         {
85             log.error( "Email Error Sender Failed: " + e );
86             return false;
87         }
88         return isConsumeErrors();
89     }
90
91     /**
92      * Determine all the email addresses to notify for all the groups the given
93      * user is in. TODO: Move this to a business object
94      *
95      * @param inGroups
96      * The user for which to determine the email addresses
97      *
98      * @return All the email addresses
99      */

100     public Set JavaDoc findNotificationEmailAddresses() throws OpenEditException
101     {
102         Set JavaDoc emailAddresses = new HashSet JavaDoc();
103
104         for (Iterator JavaDoc groupIter = getUserManager().getGroups().iterator(); groupIter.hasNext();)
105         {
106             Group group = (Group) groupIter.next();
107
108             if (group.hasPermission("oe.error.notify"))
109             {
110                 // Collect the email addresses of all the users in this group.
111
HitTracker list = getUserManager().getUsersInGroup(group);
112                 for (Iterator JavaDoc userIter = list.iterator(); userIter.hasNext();)
113                 {
114                     User user = (User) userIter.next();
115                     String JavaDoc email = user.getEmail();
116
117                     if ((email != null) && (email.length() > 0))
118                     {
119                         emailAddresses.add(email);
120                     }
121                 }
122             }
123         }
124
125         return emailAddresses;
126     }
127
128     protected String JavaDoc createMessage(Exception JavaDoc error, WebPageRequest inRequest, String JavaDoc server)
129     {
130         StringWriter JavaDoc writer = new StringWriter JavaDoc();
131         writer.write("<pre>");
132         writer.write( "Requested Path: " + inRequest.getPath() + "\n\n");
133
134         HttpServletRequest JavaDoc req = inRequest.getRequest();
135         if ( req != null)
136         {
137             String JavaDoc header = req.getHeader("Referer");
138             if ( header != null)
139             {
140                 writer.write( "Referer: "+ header);
141                 writer.write( "\n");
142             }
143             String JavaDoc ipaddress = req.getRemoteAddr();
144             if ( ipaddress != null)
145             {
146                 writer.write( "Remote IP address: "+ ipaddress);
147                 writer.write( "\n");
148             }
149             String JavaDoc userAgent = req.getHeader("User-Agent");
150             if ( userAgent != null)
151             {
152                 writer.write( "User agent: "+ userAgent);
153                 writer.write( "\n");
154             }
155             if ( server == null )
156             {
157                 server = req.getServerName();
158                 if ( server != null)
159                 {
160                     writer.write( "Server: "+ server);
161                     writer.write( "\n");
162                 }
163             }
164         }
165         String JavaDoc version = (String JavaDoc)inRequest.getPageValue("version");
166         if ( version != null)
167         {
168             writer.write("OE Core Version: " + version);
169             writer.write("\n");
170         }
171         //writer.write( "Recipients: " + getRecipientList() + "\n\n");
172
User user = inRequest.getUser();
173         if ( user != null )
174         {
175             writer.write( "User: " + user.getUserName() + "\n\n" );
176         }
177         else
178         {
179             writer.write( "User: none\n\n" );
180         }
181         
182         if ( error.getMessage() != null )
183         {
184             writer.write( "Error Message: " + error.getMessage() + "\n\n" );
185         }
186         writer.write( "Detail:\n\n" );
187         error.printStackTrace( new PrintWriter JavaDoc( writer ) );
188         writer.write("<pre>");
189
190         
191         //String message = URLUtilities.xmlEscape( writer.toString() ); //Dont allow HTML in here
192

193         return writer.toString();
194     }
195
196     protected boolean isConsumeErrors()
197     {
198         return fieldConsumeErrors;
199     }
200     public PageManager getPageManager()
201     {
202         return fieldPageManager;
203     }
204     public void setPageManager(PageManager inPageManager)
205     {
206         fieldPageManager = inPageManager;
207     }
208     protected void configure() throws OpenEditException
209     {
210         //read in the configuration file
211
//TODO: Look for a config file on the root level first
212
Page config = getPageManager().getPage("/WEB-INF/errorsettings.xml");
213         if ( !config.exists() )
214         {
215             config = getPageManager().getPage("/openedit/notification/errorsettings.xml");
216         }
217         if( config.exists() )
218         {
219             XMLConfiguration notificationConfig = new XMLConfiguration();
220             notificationConfig.readXML(config.getReader());
221             Configuration configuration = notificationConfig.getChild("emailsettings");
222             String JavaDoc sender = configuration.getChildValue( "from" );
223             //setsetsender );
224
setFrom(sender);
225             setServer( configuration.getChildValue( "smtp-server" ) );
226             
227             /*
228             String consumeError = configuration.getChildValue("consume-error");
229             if ( consumeError != null )
230             {
231                 setConsumeErrors( Boolean.valueOf( consumeError ).booleanValue() );
232             }
233             */

234         }
235         else
236         {
237             log.error("No error settings page available " );
238         }
239     }
240
241     public String JavaDoc getServer()
242     {
243         return fieldServer;
244     }
245
246     public void setServer(String JavaDoc inServer)
247     {
248         fieldServer = inServer;
249     }
250
251     public String JavaDoc getFrom()
252     {
253         return fieldFrom;
254     }
255
256     public void setFrom(String JavaDoc inFrom)
257     {
258         fieldFrom = inFrom;
259     }
260
261     public UserManager getUserManager()
262     {
263         return fieldUserManager;
264     }
265
266     public void setUserManager(UserManager inUserManager)
267     {
268         fieldUserManager = inUserManager;
269     }
270
271     public PostMail getPostMail() {
272         return postMail;
273     }
274
275     public void setPostMail(PostMail postMail) {
276         this.postMail = postMail;
277     }
278
279     public void sendNotification(String JavaDoc inSubject, String JavaDoc inMessage) {
280         try
281         {
282             if ( fieldRecipientList == null)
283             {
284                 configure();
285             }
286             Set JavaDoc emails = findNotificationEmailAddresses();
287             if( emails.size() == 0)
288             {
289                 log.error("No users configured to receive email error notifications");
290                 return;
291             }
292             
293             
294             String JavaDoc[] recepients = (String JavaDoc[])emails.toArray(new String JavaDoc[emails.size()]);
295             
296             postMail.postMail(recepients,inSubject,null,inMessage,getFrom());
297         }
298         catch (Exception JavaDoc e)
299         {
300             log.error( "Email Error Sender Failed: " + e );
301             return ;
302         }
303         
304         
305     }
306
307 }
308
Popular Tags