KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > exception > ExceptionHandler


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18

19 package org.columba.core.gui.exception;
20
21 import java.io.IOException JavaDoc;
22 import java.io.PrintWriter JavaDoc;
23 import java.io.StringWriter JavaDoc;
24 import java.net.ConnectException JavaDoc;
25 import java.net.NoRouteToHostException JavaDoc;
26 import java.net.PortUnreachableException JavaDoc;
27 import java.net.SocketException JavaDoc;
28 import java.net.SocketTimeoutException JavaDoc;
29 import java.net.UnknownHostException JavaDoc;
30 import java.text.MessageFormat JavaDoc;
31 import java.util.logging.Logger JavaDoc;
32
33 import org.columba.api.exception.IExceptionListener;
34 import org.columba.core.connectionstate.ConnectionStateImpl;
35 import org.columba.core.gui.dialog.ErrorDialog;
36 import org.columba.core.resourceloader.GlobalResourceLoader;
37 import org.columba.ristretto.imap.IMAPDisconnectedException;
38 import org.columba.ristretto.imap.IMAPException;
39 import org.columba.ristretto.io.ConnectionDroppedException;
40
41 import sun.net.ConnectionResetException;
42
43 /**
44  * Handles all exceptions catched by Worker.construct(). Opens error dialogs.
45  *
46  * @author fdietz
47  */

48 public class ExceptionHandler implements IExceptionListener {
49     private static final String JavaDoc RESOURCE_PATH = "org.columba.core.i18n.dialog";
50
51     /** JDK 1.4+ logging framework logger, used for logging. */
52     private static final Logger JavaDoc LOG = Logger
53             .getLogger("org.columba.api.command");
54
55     /**
56      * Handle all kinds of exceptions.
57      *
58      * @param e
59      * exception to process
60      */

61     public void processException(Exception JavaDoc e) {
62         // Print the stacktrace to our log file.
63
StringWriter JavaDoc error = new StringWriter JavaDoc();
64         e.printStackTrace(new PrintWriter JavaDoc(error));
65         LOG.severe(error.toString());
66
67         if (e instanceof SocketException JavaDoc) {
68             processSocketException((SocketException JavaDoc) e);
69             ConnectionStateImpl.getInstance().setOnline(false);
70         } else if (e instanceof IOException JavaDoc) {
71             processIOException((IOException JavaDoc) e);
72         } else if (e instanceof IMAPException) {
73             processIMAPExcpetion((IMAPException) e);
74         } else {
75             // show error dialog, with exception message and stack-trace
76
// -> dialog also provides a button for the user to easily
77
// -> report a bug
78
showErrorDialog(e.getMessage(), e);
79         }
80     }
81
82     /**
83      * @param exception
84      */

85     private void processIMAPExcpetion(IMAPException exception) {
86         String JavaDoc errorMessage = "";
87         String JavaDoc serverResponse = "";
88
89         if (exception.getResponse() != null) {
90             serverResponse = ": "
91                     + exception.getResponse().getResponseMessage();
92         }
93
94         if (exception instanceof IMAPDisconnectedException) {
95             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
96                     "error", "imap_disconnected_error");
97         } else {
98             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
99                     "error", "imap_error")
100                     + serverResponse;
101         }
102
103         showErrorDialog(errorMessage, exception);
104     }
105
106     /**
107      * Handle all java.net.SocketException
108      *
109      * @param e
110      * a socket exception
111      */

112     private void processSocketException(SocketException JavaDoc e) {
113         String JavaDoc errorMessage = "";
114
115         if (e instanceof ConnectException JavaDoc) {
116             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
117                     "error", "connect_error");
118         } else if (e instanceof NoRouteToHostException JavaDoc) {
119             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
120                     "error", "no_route_to_host_error");
121         } else if (e instanceof PortUnreachableException JavaDoc) {
122             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
123                     "error", "port_unreachable_error");
124         } else if (e instanceof ConnectionResetException) {
125             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
126                     "error", "connection_reset");
127         } else {
128             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
129                     "error", "generic_socket_error");
130         }
131
132         showErrorDialog(errorMessage, e);
133     }
134
135     /**
136      * Handle all java.io.IOExceptions
137      *
138      * @param e
139      * io exception to process
140      */

141     private void processIOException(IOException JavaDoc e) {
142         String JavaDoc errorMessage = e.getMessage();
143
144         if (e instanceof SocketTimeoutException JavaDoc) {
145             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
146                     "error", "socket_timeout_error");
147         } else if (e instanceof UnknownHostException JavaDoc) {
148             errorMessage = MessageFormat.format(GlobalResourceLoader.getString(
149                     RESOURCE_PATH, "error", "unknown_host_error"),
150                     new Object JavaDoc[] { e.getMessage() });
151         } else if (e instanceof ConnectionDroppedException) {
152             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
153                     "error", "connection_dropped_error");
154         } else {
155             errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH,
156                     "error", "generic_io_error");
157         }
158
159         showErrorDialog(errorMessage, e);
160     }
161
162     /**
163      * Show error dialog.
164      *
165      * @param errorMessage
166      * human-readable error message
167      * @param e
168      * exception to process
169      */

170     private void showErrorDialog(String JavaDoc details, Exception JavaDoc e) {
171
172         if (details == null)
173             details = e.toString();
174
175         ErrorDialog.createDialog(details, e);
176
177     }
178
179     public void exceptionOccured(Exception JavaDoc e) {
180         processException(e);
181     }
182 }
Popular Tags