Author: fmui
Date: Thu Nov 14 17:00:32 2013
New Revision: 1541979
URL: http://svn.apache.org/r1541979
Log:
Workbench: improved error handling at login
Added:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
(with props)
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java
Thu Nov 14 17:00:32 2013
@@ -451,6 +451,12 @@ public abstract class AbstractAtomPubSer
message = extractErrorMessage(message, errorContent);
switch (code) {
+ case 301:
+ case 302:
+ case 303:
+ case 307:
+ return new CmisConnectionException("Redirects are not supported
(HTTP status code " + code + "): "
+ + message, errorContent, t);
case 400:
if (CmisFilterNotValidException.EXCEPTION_NAME.equals(exception)) {
return new CmisFilterNotValidException(message, errorContent,
t);
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/AbstractBrowserBindingService.java
Thu Nov 14 17:00:32 2013
@@ -254,6 +254,12 @@ public abstract class AbstractBrowserBin
// fall back to status code
switch (code) {
+ case 301:
+ case 302:
+ case 303:
+ case 307:
+ return new CmisConnectionException("Redirects are not supported
(HTTP status code " + code + "): "
+ + message, errorContent, t);
case 400:
return new CmisInvalidArgumentException(message, errorContent, t);
case 401:
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractPortProvider.java
Thu Nov 14 17:00:32 2013
@@ -54,6 +54,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
import
org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
import
org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import
org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
@@ -519,8 +520,14 @@ public abstract class AbstractPortProvid
String message = "Cannot connect to Web Services [" +
service.getServiceName() + "]: " + he.getMessage();
if (he.getStatusCode() == 401) {
throw new CmisUnauthorizedException(message, he);
+ } else if (he.getStatusCode() == 404) {
+ throw new CmisObjectNotFoundException(message, he);
} else if (he.getStatusCode() == 407) {
throw new CmisProxyAuthenticationException(message, he);
+ } else if (he.getStatusCode() == 301 || he.getStatusCode() == 302
|| he.getStatusCode() == 303
+ || he.getStatusCode() == 307) {
+ throw new CmisConnectionException("Redirects are not supported
(HTTP status code " + he.getStatusCode()
+ + "): " + message, he);
} else {
throw new CmisConnectionException(message, he);
}
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/MimeTypes.java
Thu Nov 14 17:00:32 2013
@@ -40,6 +40,7 @@ public final class MimeTypes {
EXT2MIME.put("aif", "audio/x-aiff");
EXT2MIME.put("aifc", "audio/x-aiff");
EXT2MIME.put("aiff", "audio/x-aiff");
+ EXT2MIME.put("apk", "application/vnd.android.package-archive");
EXT2MIME.put("asf", "video/x-ms-asf");
EXT2MIME.put("asr", "video/x-ms-asf");
EXT2MIME.put("asx", "video/x-ms-asf");
@@ -281,6 +282,7 @@ public final class MimeTypes {
MIME2EXT.put("application/pkix-crl", "crl");
MIME2EXT.put("application/postscript", "ps");
MIME2EXT.put("application/rtf", "rtf");
+ MIME2EXT.put("application/vnd.android.package-archive", "apk");
MIME2EXT.put("application/vnd.apple.keynote", "key");
MIME2EXT.put("application/vnd.apple.numbers", "numbers");
MIME2EXT.put("application/vnd.apple.pages", "pages");
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
Thu Nov 14 17:00:32 2013
@@ -100,7 +100,7 @@ public final class ClientHelper {
private ClientHelper() {
}
- public static void showError(Component parent, Exception ex) {
+ public static void logError(Exception ex) {
if (LOG.isErrorEnabled()) {
LOG.error(ex.getClass().getSimpleName() + ": " + ex.getMessage(),
ex);
@@ -120,6 +120,10 @@ public final class ClientHelper {
}
}
}
+ }
+
+ public static void showError(Component parent, Exception ex) {
+ logError(ex);
String exceptionName = ex.getClass().getSimpleName();
if (ex instanceof CmisBaseException) {
@@ -628,7 +632,8 @@ public final class ClientHelper {
public void actionPerformed(ActionEvent e) {
AttributeSet style = console.getOutputStyle();
console.clearOutput();
- console.appendOutputNl("Repository id: " +
groovySession.getRepositoryInfo().getId(), style);
+ console.appendOutputNl("Session ID: " +
groovySession.getBinding().getSessionId(), style);
+ console.appendOutputNl("Repository ID: " +
groovySession.getRepositoryInfo().getId(), style);
console.appendOutputNl("Repository name: " +
groovySession.getRepositoryInfo().getName(), style);
console.appendOutputNl("Binding: " + bindingType,
style);
console.appendOutputNl("User: " + user, style);
Added:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java?rev=1541979&view=auto
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
(added)
+++
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
Thu Nov 14 17:00:32 2013
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.Locale;
+
+import javax.net.ssl.SSLException;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.xml.stream.XMLStreamException;
+
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisProxyAuthenticationException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException;
+import
org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParseException;
+import org.xml.sax.SAXParseException;
+
+public class ConnectionErrorDialog extends JDialog {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String HTTP_PROXY_HOST = "http.proxyHost";
+ public static final String HTTP_PROXY_PORT = "http.proxyPort";
+ public static final String HTTPS_PROXY_HOST = "https.proxyHost";
+ public static final String HTTPS_PROXY_PORT = "https.proxyPort";
+ public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
+
+ private final Exception exception;
+
+ public ConnectionErrorDialog(JDialog owner, Exception exception) {
+ super(owner, "Connection Error", true);
+ this.exception = exception;
+
+ ClientHelper.logError(exception);
+
+ createGUI();
+ }
+
+ private void createGUI() {
+ setMinimumSize(new Dimension(600, 400));
+ setPreferredSize(new Dimension(600, 450));
+
+ setLayout(new BorderLayout());
+
+ StringBuilder hint = new StringBuilder();
+ hint.append("<h2><font color=\"red\">Exception: <em>" +
exception.getClass().getSimpleName()
+ + "</em></font><br>" + exception.getMessage() + "</h2>");
+ if (exception.getCause() != null) {
+ hint.append("<h3><font color=\"red\">Cause: <em>" +
exception.getCause().getClass().getSimpleName()
+ + "</em></font><br>" + exception.getCause().getMessage() +
"</h3>");
+ }
+ hint.append("<hr><br>");
+ hint.append(getHint());
+
+ // hint area
+ JPanel hintsPanel = new JPanel();
+ hintsPanel.setLayout(new BoxLayout(hintsPanel, BoxLayout.PAGE_AXIS));
+ hintsPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ add(hintsPanel, BorderLayout.CENTER);
+
+ JEditorPane hints = new JEditorPane("text/html", hint.toString());
+ hints.setEditable(false);
+
+ hintsPanel.add(new JScrollPane(hints,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
+
+ // close button
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));
+ buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
+ add(buttonPanel, BorderLayout.PAGE_END);
+
+ JButton closeButton = new JButton("Close");
+ closeButton.setPreferredSize(new Dimension(Short.MAX_VALUE, 30));
+ closeButton.setMaximumSize(new Dimension(Short.MAX_VALUE,
Short.MAX_VALUE));
+ closeButton.setAlignmentX(Component.CENTER_ALIGNMENT);
+
+ closeButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ ConnectionErrorDialog.this.dispose();
+ }
+ });
+
+ buttonPanel.add(closeButton);
+
+ getRootPane().setDefaultButton(closeButton);
+
+ ClientHelper.installKeyBindings();
+ ClientHelper.installEscapeBinding(this, getRootPane(), true);
+
+ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ pack();
+ setLocationRelativeTo(getOwner());
+
+ setVisible(true);
+ }
+
+ private String getHint() {
+ if (exception instanceof CmisObjectNotFoundException || exception
instanceof CmisNotSupportedException) {
+ return "The CMIS Workbench could connect to the server but the
provided URL is not a CMIS endpoint URL."
+ + "<br>Check your URL and proxy settings." +
getProxyConfig();
+ } else if (exception instanceof CmisUnauthorizedException) {
+ return "The provide credentials are invalid.<br>Check your
credentials.";
+ } else if (exception instanceof CmisPermissionDeniedException) {
+ return "The provide credentials are invalid or the user has no
permission to connect."
+ + "<br>Check your credentials.";
+ } else if (exception instanceof CmisProxyAuthenticationException) {
+ return "The proxy server requires valid credentials.<br>Check the
session parameters "
+ + "'org.apache.chemistry.opencmis.binding.proxyuser' and "
+ + "'org.apache.chemistry.opencmis.binding.proxypassword'."
+ getProxyConfig();
+ } else if (exception instanceof CmisRuntimeException) {
+ return "Something fatal happend on the client or server side."
+ + "<br>Check your URL, the binding, and your proxy
settings."
+ + "<br>Also see the CMIS Workbench log for more details."
+ getProxyConfig();
+ } else if (exception instanceof CmisConnectionException) {
+ Throwable cause = exception.getCause();
+ while (cause instanceof CmisConnectionException) {
+ cause = cause.getCause();
+ }
+
+ if (cause instanceof MalformedURLException || cause instanceof
URISyntaxException) {
+ return "The provided URL is not a valid URL.<br>Check your
URL.";
+ } else if (cause instanceof UnknownHostException) {
+ return "The CMIS Workbench could not connect to the server."
+ + "<br>Check your URL and your network and proxy
settings." + getProxyConfig();
+ } else if (cause instanceof SSLException) {
+ return "The CMIS Workbench could not establish a SSL
connection to the server."
+ + "<br>Check your network and proxy settings."
+ + "<br><br>If you want to connect to a server with a
self-signed certificate, "
+ + "add the parameter
<code>-Dcmis.workbench.acceptSelfSignedCertificates=true</code> "
+ + "to the JAVA_OPTS in the CMIS Workbench start script
and restart."
+ + "<br><b>WARNING:</b> It disables <em>all</em> SSL
certificate checks!" + getProxyConfig();
+ } else if (cause instanceof JSONParseException) {
+ return "The provided URL does not return a JSON response."
+ + "<br>Check your URL, the binding, and your proxy
settings." + getProxyConfig();
+ } else if (cause instanceof XMLStreamException) {
+ return "The provided URL does not return an AtomPub response."
+ + "<br>Check your URL, the binding, and your proxy
settings." + getProxyConfig();
+ } else if (cause instanceof SAXParseException) {
+ return "The provided URL does not return a WSDL."
+ + "<br>Check your URL, the binding, and your proxy
settings." + getProxyConfig();
+ } else if (cause instanceof IOException) {
+ return "A network problem occured.<br>Check your URL and your
network and proxy settings."
+ + getProxyConfig();
+ }
+
+ if
(exception.getMessage().toLowerCase(Locale.ENGLISH).startsWith("unexpected
document")) {
+ return "The provided URL does not return a AtomPub response."
+ + "<br>Check your URL, the binding, and your proxy
settings." + getProxyConfig();
+ }
+
+ return "Check the URL, the binding, and the credentials.";
+ }
+
+ return exception.getMessage();
+ }
+
+ private String getProxyConfig() {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("<br><br><hr><br><em>Current proxy settings:</em><br><br>");
+
+ if (System.getProperty(HTTP_PROXY_HOST) == null &&
System.getProperty(HTTPS_PROXY_HOST) == null) {
+ sb.append("<b>- no proxy settings -</b>");
+ } else {
+ sb.append("<table>");
+ if (System.getProperty(HTTP_PROXY_HOST) != null) {
+ sb.append("<tr><td><b>HTTP proxy:</b></td><td>");
+ sb.append(System.getProperty(HTTP_PROXY_HOST) + ":" +
System.getProperty(HTTP_PROXY_PORT));
+ sb.append("</td></tr>");
+ }
+
+ if (System.getProperty(HTTPS_PROXY_HOST) != null) {
+ sb.append("<tr><td><b>HTTPS proxy:</b></td><td>");
+ sb.append(System.getProperty(HTTPS_PROXY_HOST) + ":" +
System.getProperty(HTTPS_PROXY_PORT));
+ sb.append("</td></tr>");
+ }
+
+ if (System.getProperty(HTTP_NON_PROXY_HOSTS) != null) {
+ sb.append("<tr><td><b>Non proxy hosts:</b></td><td>");
+ sb.append(System.getProperty(HTTP_NON_PROXY_HOSTS));
+ sb.append("</td></tr>");
+ }
+ }
+
+ return sb.toString();
+ }
+}
Propchange:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ConnectionErrorDialog.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
URL:
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java?rev=1541979&r1=1541978&r2=1541979&view=diff
==============================================================================
---
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
(original)
+++
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/LoginDialog.java
Thu Nov 14 17:00:32 2013
@@ -155,7 +155,7 @@ public class LoginDialog extends JDialog
loginButton.setEnabled(false);
getRootPane().setDefaultButton(loadRepositoryButton);
- ClientHelper.showError(getOwner(), ex);
+ new ConnectionErrorDialog(LoginDialog.this, ex);
} finally {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
@@ -180,8 +180,7 @@ public class LoginDialog extends JDialog
loginButton.setEnabled(false);
getRootPane().setDefaultButton(loadRepositoryButton);
- ClientHelper.showError(getOwner(), ex);
-
+ new ConnectionErrorDialog(LoginDialog.this, ex);
} finally {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
getRootPane().setDefaultButton(loadRepositoryButton);