1 19 package org.columba.core.gui.exception; 20 21 import java.io.IOException ; 22 import java.io.PrintWriter ; 23 import java.io.StringWriter ; 24 import java.net.ConnectException ; 25 import java.net.NoRouteToHostException ; 26 import java.net.PortUnreachableException ; 27 import java.net.SocketException ; 28 import java.net.SocketTimeoutException ; 29 import java.net.UnknownHostException ; 30 import java.text.MessageFormat ; 31 import java.util.logging.Logger ; 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 48 public class ExceptionHandler implements IExceptionListener { 49 private static final String RESOURCE_PATH = "org.columba.core.i18n.dialog"; 50 51 52 private static final Logger LOG = Logger 53 .getLogger("org.columba.api.command"); 54 55 61 public void processException(Exception e) { 62 StringWriter error = new StringWriter (); 64 e.printStackTrace(new PrintWriter (error)); 65 LOG.severe(error.toString()); 66 67 if (e instanceof SocketException ) { 68 processSocketException((SocketException ) e); 69 ConnectionStateImpl.getInstance().setOnline(false); 70 } else if (e instanceof IOException ) { 71 processIOException((IOException ) e); 72 } else if (e instanceof IMAPException) { 73 processIMAPExcpetion((IMAPException) e); 74 } else { 75 showErrorDialog(e.getMessage(), e); 79 } 80 } 81 82 85 private void processIMAPExcpetion(IMAPException exception) { 86 String errorMessage = ""; 87 String 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 112 private void processSocketException(SocketException e) { 113 String errorMessage = ""; 114 115 if (e instanceof ConnectException ) { 116 errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH, 117 "error", "connect_error"); 118 } else if (e instanceof NoRouteToHostException ) { 119 errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH, 120 "error", "no_route_to_host_error"); 121 } else if (e instanceof PortUnreachableException ) { 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 141 private void processIOException(IOException e) { 142 String errorMessage = e.getMessage(); 143 144 if (e instanceof SocketTimeoutException ) { 145 errorMessage = GlobalResourceLoader.getString(RESOURCE_PATH, 146 "error", "socket_timeout_error"); 147 } else if (e instanceof UnknownHostException ) { 148 errorMessage = MessageFormat.format(GlobalResourceLoader.getString( 149 RESOURCE_PATH, "error", "unknown_host_error"), 150 new Object [] { 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 170 private void showErrorDialog(String details, Exception e) { 171 172 if (details == null) 173 details = e.toString(); 174 175 ErrorDialog.createDialog(details, e); 176 177 } 178 179 public void exceptionOccured(Exception e) { 180 processException(e); 181 } 182 } | Popular Tags |