001 /*
002 * $Id: MailErrorReporter.java,v 1.7 2005/10/26 14:29:53 kleopatra Exp $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021
022 package org.jdesktop.swingx;
023
024 import java.io.PrintWriter;
025 import java.io.StringWriter;
026 import java.util.ArrayList;
027 import java.util.List;
028
029 import org.jdesktop.swingx.util.MailTransportProxy;
030
031 /**
032 * This reporter initializes and uses default mail user agent to send information
033 * to predefined mail address. To send error message one needs to configure an MailTransportProxy.
034 *
035 * For example, here is how to use it with <a href="http://jdic.dev.java.net/">JDIC library</a>
036 * <pre>
037
038 import org.jdesktop.swingx.util.MailTransportProxy;
039 import org.jdesktop.swingx.*;
040 import org.jdesktop.jdic.desktop.Message;
041 import org.jdesktop.jdic.desktop.Desktop;
042 import org.jdesktop.jdic.desktop.DesktopException;
043
044 public class TestApp {
045 public static class MyMailTransport implements MailTransportProxy {
046 public void mailMessage(java.util.List<String> toAddr,
047 java.util.List<String> ccAddr,
048 String subject, String body,
049 java.util.List<String> attach) throws Error {
050 Error result = null;
051
052 Message msg = new Message();
053 msg.setToAddrs(toAddr);
054 msg.setCcAddrs(ccAddr);
055 msg.setSubject(subject);
056 msg.setBody(body);
057 try {
058 msg.setAttachments(attach);
059 } catch (IOException e) {
060 e.printStackTrace();
061 }
062 try {
063 Desktop.mail(msg);
064 } catch (DesktopException e) {
065 result = new Error(e);
066 result.setStackTrace(Thread.currentThread().getStackTrace());
067 throw result;
068 }
069 }
070 }
071 public static void main(String args[]) {
072 JFrame jf = new JFrame("Main frame");
073 ... In the program body ...
074 String errorDetails = "The filter factory can't accept this value";
075 MailErrorReporter reporter = new MailErrorReporter("someone@the.net");
076 reporter.setMailTransportProxy(new MyMailTransport());
077 JXErrorDialog.setReporter(reporter);
078 JXErrorDialog.showDialog(jf, "Filter Error", new RuntimeException(errorDetails));
079 }
080 } </pre>
081 *
082 * @author Alexander Zuev
083 * @version 1.0
084 */
085 public class MailErrorReporter extends ErrorReporter {
086 private String mailAddr;
087 private List<String> toList = new ArrayList<String>();
088 private MailTransportProxy mailTransportProxy;
089
090 /**
091 * Constructs new MailErrorReporter with the given address assigned as destination
092 * address for error report.
093 *
094 * @param address
095 */
096 public MailErrorReporter(String address) {
097 super();
098 this.mailAddr = address;
099 toList.add(this.mailAddr);
100 }
101
102 /**
103 * Get the mail address to which send error report
104 *
105 * @return mail address
106 */
107 public String getMailAddr() {
108 return mailAddr;
109 }
110
111 /**
112 * Set the address to which we will send mail
113 *
114 * @param mailAddr
115 */
116 public void setMailAddr(String mailAddr) {
117 toList.remove(this.mailAddr);
118 this.mailAddr = mailAddr;
119 toList.add(this.mailAddr);
120 }
121
122 public void setMailTransportProxy(MailTransportProxy mailTransportProxy) {
123 this.mailTransportProxy = mailTransportProxy;
124 }
125
126 /**
127 * Report given incident by popping up system default mail user agent with prepared message
128 *
129 * @param info <code>IncidentInfo</code> which incorporates all the information on error
130 */
131 public void reportIncident(IncidentInfo info) {
132 if(mailTransportProxy != null) {
133 try {
134 mailTransportProxy.mailMessage(toList, null, info.getHeader(),
135 getMessageBody(info), getAttachments(info));
136 } catch(Error e) {} // Do nothing
137 }
138 }
139
140 /**
141 * This method is used to extract text message from the provided <code>IncidentInfo</code>.
142 * Override this method to change text formatting or contents.
143 *
144 * @param incident - Incapsulates all the information about error
145 * @return String to be used as a body message in report.
146 */
147 public String getMessageBody(IncidentInfo incident) {
148 String body = incident.getBasicErrorMessage();
149 if(incident.getDetailedErrorMessage() != null) {
150 body.concat("\n"+incident.getDetailedErrorMessage());
151 }
152 if(incident.getErrorException() != null) {
153 StringWriter sw = new StringWriter();
154 PrintWriter pw = new PrintWriter(sw);
155 incident.getErrorException().printStackTrace(pw);
156 body = body + "\n ----- " + sw.toString();
157 }
158 return body;
159 }
160
161 /**
162 * This method is used to extract list of paths to files that we want to send
163 * as attachment with the current incident report mwssage.
164 *
165 * @param incident - Incapsulates all the information about error
166 * @return List of Strings containing pathis to files
167 */
168 public List<String> getAttachments(IncidentInfo incident) {
169 return null;
170 }
171 }