| /* |
| * 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.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><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." |
| + "<br><br>Some servers return a HTML login page if the credentials are incorrect." |
| + "<br>Check your credentials." + 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." |
| + "<br><br>Some servers return a HTML login page if the credentials are incorrect." |
| + "<br>Check your credentials." + 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." |
| + "<br><br>Some servers return a HTML login page if the credentials are incorrect." |
| + "<br>Check your credentials." + 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." |
| + "<br><br>Some servers return a HTML login page if the credentials are incorrect." |
| + "<br>Check your credentials." + 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(); |
| } |
| } |