BuildListDownloadErrorPanel.java revision 52e2f87fad88634e1bc5e70af7fc7407d7a92097
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2007 Sun Microsystems, Inc.
*/
package org.opends.quicksetup.upgrader.ui;
import org.opends.messages.Message;
import static org.opends.messages.QuickSetupMessages.*;
import org.opends.quicksetup.upgrader.RemoteBuildManager;
import org.opends.quicksetup.ui.CustomHTMLEditorKit;
import org.opends.quicksetup.ui.UIFactory;
import org.opends.quicksetup.ui.WebProxyDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* This panel represents the big error message the pops up when the
* panel can't download the build information.
*/
class BuildListDownloadErrorPanel extends JPanel {
static private final Logger LOG =
Logger.getLogger(BuildListDownloadErrorPanel.class.getName());
private RemoteBuildManager rbm = null;
private Throwable reason = null;
private static final long serialVersionUID = 4614415561629811272L;
/**
* Creates an instance.
*
* @param rbm RemoteBuildManager that is having trouble.
* @param reason Throwable indicating the error when downloading
*/
public BuildListDownloadErrorPanel(RemoteBuildManager rbm,
Throwable reason) {
this.rbm = rbm;
this.reason = reason;
layoutPanel();
}
private void layoutPanel() {
setLayout(new GridBagLayout());
String proxyString = INFO_GENERAL_NONE.get().toString();
Proxy proxy = rbm.getProxy();
if (proxy != null) {
SocketAddress addr = proxy.address();
proxyString = addr.toString();
}
String baseContext = INFO_GENERAL_UNSPECIFIED.get().toString();
URL url = rbm.getBaseContext();
if (url != null) {
baseContext = url.toString();
}
Message html =
INFO_UPGRADE_CHOOSE_VERSION_BUILD_LIST_ERROR.get(baseContext,
reason.getLocalizedMessage(),
proxyString, baseContext);
/* This helps with debugger the HTML rendering
StringBuffer content = new StringBuffer();
try {
FileInputStream fis = new FileInputStream("/tmp/error-html");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line = null;
while (null != (line = reader.readLine())) {
content.append(line);
}
html = content.toString();
} catch (IOException e) {
e.printStackTrace();
}
*/
CustomHTMLEditorKit ek = new CustomHTMLEditorKit();
ek.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
Component dlg = SwingUtilities.getAncestorOfClass(Window.class,
BuildListDownloadErrorPanel.this);
specifyProxy(dlg);
// Since the proxy info may change we need
// to regenerate the text
removeAll();
layoutPanel();
repaint();
validate();
}
});
add(UIFactory.makeHtmlPane(html, ek, UIFactory.INSTRUCTIONS_FONT));
}
/**
* Displays a dialog prompting the user for proxy information
* after which applys the new proxy information to the available
* RemoteBuildManager.
*
* @param parent Component that will server as parent to the dialog
*/
void specifyProxy(final Component parent) {
Runnable proxySpecifier = new Runnable() {
public void run() {
String host = null;
Integer port = null;
Proxy proxy = rbm.getProxy();
if (proxy != null) {
SocketAddress address = proxy.address();
if (address instanceof InetSocketAddress) {
host = ((InetSocketAddress) address).getHostName();
port = ((InetSocketAddress) address).getPort();
}
}
String user = rbm.getProxyUserName();
char[] pw = rbm.getProxyPassword();
WebProxyDialog dlg;
if (parent instanceof Dialog) {
dlg = new WebProxyDialog((Dialog) parent, host, port, user, pw);
} else if (parent instanceof Frame) {
dlg = new WebProxyDialog((Frame) parent, host, port, user, pw);
} else {
dlg = new WebProxyDialog((Frame) null, host, port, user, pw);
}
dlg.setVisible(true);
SocketAddress address = dlg.getSocketAddress();
if (address != null) {
proxy = new Proxy(Proxy.Type.HTTP, address);
rbm.setProxy(proxy);
rbm.setProxyUserName(dlg.getUserName());
rbm.setProxyPassword(dlg.getPassword());
}
}
};
if (SwingUtilities.isEventDispatchThread()) {
proxySpecifier.run();
} else {
try {
SwingUtilities.invokeAndWait(proxySpecifier);
} catch (Throwable t) {
LOG.log(Level.INFO, "error waiting for event thread", t);
}
}
}
// public static void main(String[] args) {
// String[] options = {"Retry", "Close"};
// try {
// JOptionPane op = new JOptionPane(
// //JOptionPane.showOptionDialog(null,
// new BuildListDownloadErrorPanel(
// new RemoteBuildManager(null,
// new URL("http://builds.opends.org")),
// new IllegalArgumentException("abc")),
// JOptionPane.ERROR_MESSAGE,
// JOptionPane.YES_NO_OPTION,
// null,
// options,
// null);
// op.setBackground(Color.WHITE);
// //op.getRootPane().setBackground(Color.WHITE);
// JDialog dlg = op.createDialog(null, "Network Error");
// dlg.getContentPane().setBackground(Color.WHITE);
// dlg.setVisible(true);
// } catch (MalformedURLException e) {
// e.printStackTrace();
// }
// }
}