| | |
| | | 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 org.opends.quicksetup.i18n.ResourceProvider; |
| | | |
| | | import javax.swing.*; |
| | | import java.awt.*; |
| | | import java.awt.event.ActionListener; |
| | | import java.awt.event.ActionEvent; |
| | | import java.net.Proxy; |
| | | import java.net.SocketAddress; |
| | | import java.net.URL; |
| | | import java.net.*; |
| | | import java.util.logging.Level; |
| | | import java.util.logging.Logger; |
| | | import java.lang.reflect.InvocationTargetException; |
| | | |
| | | /** |
| | | * This panel represents the big error message the pops up when the |
| | | * 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 ChooseVersionPanel chooseVersionPanel; |
| | | |
| | | private static final long serialVersionUID = 4614415561629811272L; |
| | | |
| | | /** |
| | | * Creates an instance. |
| | | * @param rbm RemoteBuildManager that is having trouble. |
| | | * |
| | | * @param rbm RemoteBuildManager that is having trouble. |
| | | * @param reason Throwable indicating the error when downloading |
| | | * @param chooseVersionPanel ChooseVersionPanel where the error occurred |
| | | */ |
| | | public BuildListDownloadErrorPanel(ChooseVersionPanel chooseVersionPanel, |
| | | RemoteBuildManager rbm, |
| | | public BuildListDownloadErrorPanel(RemoteBuildManager rbm, |
| | | Throwable reason) { |
| | | this.chooseVersionPanel = chooseVersionPanel; |
| | | this.rbm = rbm; |
| | | this.reason = reason; |
| | | layoutPanel(); |
| | |
| | | } |
| | | |
| | | String html = |
| | | chooseVersionPanel.getMsg("upgrade-choose-version-build-list-error", |
| | | new String[]{ |
| | | baseContext, |
| | | reason.getLocalizedMessage(), |
| | | proxyString}); |
| | | getMsg("upgrade-choose-version-build-list-error", |
| | | new String[]{ |
| | | baseContext, |
| | | reason.getLocalizedMessage(), |
| | | proxyString}); |
| | | |
| | | /* This helps with debugger the HTML rendering |
| | | StringBuffer content = new StringBuffer(); |
| | |
| | | CustomHTMLEditorKit ek = new CustomHTMLEditorKit(); |
| | | ek.addActionListener(new ActionListener() { |
| | | public void actionPerformed(ActionEvent ev) { |
| | | chooseVersionPanel.specifyProxy(getParent()); |
| | | specifyProxy(getParent()); |
| | | |
| | | // Since the proxy info may change we need |
| | | // to regenerate the text |
| | |
| | | add(UIFactory.makeHtmlPane(html, ek, UIFactory.INSTRUCTIONS_FONT)); |
| | | } |
| | | |
| | | /** |
| | | * Returns a localized message for a key value. In the properties file we |
| | | * have something of type: |
| | | * key=value |
| | | * <p/> |
| | | * For instance if we pass as key "mykey" and as arguments {"value1"} and |
| | | * in the properties file we have: |
| | | * mykey=value with argument {0}. |
| | | * <p/> |
| | | * This method will return "value with argument value1". |
| | | * |
| | | * @param key the key in the properties file. |
| | | * @param args the arguments to be passed to generate the resulting value. |
| | | * @return the value associated to the key in the properties file. |
| | | * @see org.opends.quicksetup.i18n.ResourceProvider#getMsg(String,String[]) |
| | | */ |
| | | public String getMsg(String key, String[] args) { |
| | | return getI18n().getMsg(key, args); |
| | | } |
| | | |
| | | /** |
| | | * Returns a ResourceProvider instance. |
| | | * |
| | | * @return a ResourceProvider instance. |
| | | */ |
| | | public ResourceProvider getI18n() { |
| | | return ResourceProvider.getInstance(); |
| | | } |
| | | |
| | | /** |
| | | * 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 (InterruptedException e) { |
| | | LOG.log(Level.INFO, "error", e); |
| | | } catch (InvocationTargetException e) { |
| | | LOG.log(Level.INFO, "error", e); |
| | | } catch (Throwable t) { |
| | | LOG.log(Level.INFO, "error", 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(); |
| | | // } |
| | | // } |
| | | |
| | | } |