/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* Copyright (C) 2010 jruiz
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* RESTfulReconnectorErrorPanel.java
*
* Created on 25.08.2010, 12:55:35
*/
package Sirius.navigator.connection;
import Sirius.navigator.Navigator;
import com.google.common.io.Files;
import org.openide.util.Exceptions;
import java.awt.BorderLayout;
import java.awt.Container;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.prefs.Preferences;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileFilter;
import de.cismet.lookupoptions.options.ProxyOptionsPanel;
import de.cismet.netutil.Proxy;
import de.cismet.reconnector.DefaultReconnectorErrorPanel;
import de.cismet.reconnector.ReconnectorErrorPanelWithApply;
import static Sirius.navigator.connection.DefaultSSLConfigProvider.CLIENT_CERT_KEYSTORE_FILE_NAME;
import static Sirius.navigator.connection.DefaultSSLConfigProvider.CLIENT_CERT_PASS_PREFS_KEY;
import static Sirius.navigator.connection.DefaultSSLConfigProvider.FILE_SEP;
import static Sirius.navigator.connection.DefaultSSLConfigProvider.SERVER_CERT_FILE_NAME;
/**
* DOCUMENT ME!
*
* @author jruiz
* @version $Revision$, $Date$
*/
public class RESTfulReconnectorErrorPanel extends javax.swing.JPanel implements ReconnectorErrorPanelWithApply {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(RESTfulReconnector.class);
//~ Instance fields --------------------------------------------------------
private final JFileChooser fileChooser;
private final ProxyOptionsPanel panProxyOptions;
private final RESTfulReconnector reconnector;
private DefaultReconnectorErrorPanel errPan;
private final Preferences cidsPrefs;
private FileFilter keystoreFileFilter = new FileFilter() {
@Override
public boolean accept(final File f) {
if ((f.isFile() && f.getName().endsWith(".keystore")) || f.isDirectory()) { // NOI18N
return true;
} else {
return false;
}
}
@Override
public String getDescription() {
return ".keystore";
}
};
private FileFilter derFileFilter = new FileFilter() {
@Override
public boolean accept(final File f) {
if ((f.isFile() && f.getName().endsWith(".der")) || f.isDirectory()) { // NOI18N
return true;
} else {
return false;
}
}
@Override
public String getDescription() {
return ".der";
}
};
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cmdCheck;
private javax.swing.JButton cmdGetClientCert;
private javax.swing.JButton cmdGetServerCert;
private javax.swing.JPanel errPanWrapper;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel5;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JLabel lblClientCertIndicator;
private javax.swing.JLabel lblServerCertIndicator;
private javax.swing.JPanel panCertOptionsWrapper;
private javax.swing.JPanel panProxyOptionsWrapper;
private javax.swing.JToggleButton tbCerts;
private javax.swing.JToggleButton tbProxy;
private javax.swing.JPasswordField txtClientCertPass;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form RESTfulReconnectorErrorPanel.
*
* @param panProxyOptions DOCUMENT ME!
* @param reconnector DOCUMENT ME!
*/
public RESTfulReconnectorErrorPanel(final ProxyOptionsPanel panProxyOptions, final RESTfulReconnector reconnector) {
initComponents();
panCertOptionsWrapper.setVisible(false);
this.reconnector = reconnector;
this.panProxyOptions = panProxyOptions;
panProxyOptionsWrapper.add(panProxyOptions, BorderLayout.CENTER);
panProxyOptionsWrapper.setVisible(false);
cidsPrefs = Preferences.userNodeForPackage(DefaultSSLConfigProvider.class);
txtClientCertPass.setText(cidsPrefs.get(CLIENT_CERT_PASS_PREFS_KEY, ""));
txtClientCertPass.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(final DocumentEvent e) {
updatePass();
}
@Override
public void removeUpdate(final DocumentEvent e) {
updatePass();
}
@Override
public void changedUpdate(final DocumentEvent e) {
updatePass();
}
});
fileChooser = new JFileChooser();
fileChooser.setMultiSelectionEnabled(false);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.addChoosableFileFilter(keystoreFileFilter);
fileChooser.addChoosableFileFilter(derFileFilter);
checkGUIState();
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*/
private void updatePass() {
cidsPrefs.put(CLIENT_CERT_PASS_PREFS_KEY, new String(txtClientCertPass.getPassword()));
}
/**
* DOCUMENT ME!
*/
private void checkGUIState() {
if (DefaultSSLConfigProvider.LOCAL_SERVER_CERT_FILE.exists()) {
lblServerCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.found"));
} else {
final InputStream classPathServerCertIS = DefaultSSLConfigProvider.class.getResourceAsStream(
SERVER_CERT_FILE_NAME);
if (classPathServerCertIS != null) {
lblServerCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.classpath"));
try {
classPathServerCertIS.close();
} catch (IOException ex) {
LOG.warn("Problems closing testStream", ex);
}
} else {
lblServerCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.notfound"));
}
}
if (DefaultSSLConfigProvider.CLIENT_CERT_KEYSTORE_FILE.exists()) {
lblClientCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.found"));
txtClientCertPass.setEnabled(true);
} else {
lblClientCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.notfound"));
txtClientCertPass.setEnabled(false);
}
}
/**
* DOCUMENT ME!
*
* @param message DOCUMENT ME!
* @param exception DOCUMENT ME!
*/
public void setError(final String message, final Throwable exception) {
errPan = new DefaultReconnectorErrorPanel(message, exception);
errPanWrapper.removeAll();
errPanWrapper.add(errPan);
}
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
panProxyOptionsWrapper = new javax.swing.JPanel();
jSeparator1 = new javax.swing.JSeparator();
jSeparator2 = new javax.swing.JSeparator();
errPanWrapper = new javax.swing.JPanel();
tbProxy = new javax.swing.JToggleButton();
tbCerts = new javax.swing.JToggleButton();
panCertOptionsWrapper = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
lblServerCertIndicator = new javax.swing.JLabel();
lblClientCertIndicator = new javax.swing.JLabel();
cmdGetServerCert = new javax.swing.JButton();
cmdGetClientCert = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
cmdCheck = new javax.swing.JButton();
txtClientCertPass = new javax.swing.JPasswordField();
setLayout(new java.awt.GridBagLayout());
panProxyOptionsWrapper.setLayout(new java.awt.BorderLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(panProxyOptionsWrapper, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(6, 0, 6, 0);
add(jSeparator1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(6, 0, 6, 0);
add(jSeparator2, gridBagConstraints);
errPanWrapper.setLayout(new java.awt.BorderLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(errPanWrapper, gridBagConstraints);
tbProxy.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Sirius/navigator/connection/proxy.png"))); // NOI18N
tbProxy.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.tbProxy.text")); // NOI18N
tbProxy.setFocusPainted(false);
tbProxy.setMaximumSize(null);
tbProxy.setMinimumSize(null);
tbProxy.setPreferredSize(null);
tbProxy.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
tbProxyActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(tbProxy, gridBagConstraints);
tbCerts.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Sirius/navigator/connection/cert.png"))); // NOI18N
tbCerts.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.tbCerts.text")); // NOI18N
tbCerts.setFocusPainted(false);
tbCerts.setMaximumSize(null);
tbCerts.setMinimumSize(null);
tbCerts.setPreferredSize(null);
tbCerts.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
tbCertsActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
add(tbCerts, gridBagConstraints);
panCertOptionsWrapper.setPreferredSize(new java.awt.Dimension(400, 87));
panCertOptionsWrapper.setLayout(new java.awt.GridBagLayout());
jLabel1.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
panCertOptionsWrapper.add(jLabel1, gridBagConstraints);
jLabel2.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.jLabel2.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 0);
panCertOptionsWrapper.add(jLabel2, gridBagConstraints);
lblServerCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.lblServerCertIndicator.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(5, 10, 0, 10);
panCertOptionsWrapper.add(lblServerCertIndicator, gridBagConstraints);
lblClientCertIndicator.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.lblClientCertIndicator.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(5, 10, 5, 10);
panCertOptionsWrapper.add(lblClientCertIndicator, gridBagConstraints);
cmdGetServerCert.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.cmdGetServerCert.text")); // NOI18N
cmdGetServerCert.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdGetServerCertActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
panCertOptionsWrapper.add(cmdGetServerCert, gridBagConstraints);
cmdGetClientCert.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.cmdGetClientCert.text")); // NOI18N
cmdGetClientCert.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdGetClientCertActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 0);
panCertOptionsWrapper.add(cmdGetClientCert, gridBagConstraints);
jLabel5.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.jLabel5.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
panCertOptionsWrapper.add(jLabel5, gridBagConstraints);
cmdCheck.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.cmdCheck.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
panCertOptionsWrapper.add(cmdCheck, gridBagConstraints);
txtClientCertPass.setColumns(20);
txtClientCertPass.setText(org.openide.util.NbBundle.getMessage(
RESTfulReconnectorErrorPanel.class,
"RESTfulReconnectorErrorPanel.txtClientCertPass.text")); // NOI18N
txtClientCertPass.setMinimumSize(new java.awt.Dimension(100, 28));
txtClientCertPass.setPreferredSize(new java.awt.Dimension(100, 28));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 5, 10);
panCertOptionsWrapper.add(txtClientCertPass, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(panCertOptionsWrapper, gridBagConstraints);
} // </editor-fold>//GEN-END:initComponents
@Override
public void apply() {
final Proxy proxy = panProxyOptions.getProxy();
reconnector.setProxy(proxy);
if (proxy == null) {
LOG.warn("proxy configuration not saved to preferences, proxy is null");
} else {
proxy.toPreferences();
}
}
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void tbProxyActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_tbProxyActionPerformed
panProxyOptionsWrapper.setVisible(tbProxy.isSelected());
// hochpendeln bis JDialog
Container parent = this;
do {
parent = parent.getParent();
} while ((parent != null) && !(parent instanceof JDialog));
if (parent != null) {
((JDialog)parent).pack();
}
} //GEN-LAST:event_tbProxyActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void tbCertsActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_tbCertsActionPerformed
panCertOptionsWrapper.setVisible(tbCerts.isSelected());
// hochpendeln bis JDialog
Container parent = this;
do {
parent = parent.getParent();
} while ((parent != null) && !(parent instanceof JDialog));
if (parent != null) {
((JDialog)parent).pack();
}
} //GEN-LAST:event_tbCertsActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdGetServerCertActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdGetServerCertActionPerformed
fileChooser.setFileFilter(derFileFilter);
final int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
final File fileToLoad = fileChooser.getSelectedFile();
try {
Files.copy(fileToLoad, new File(DefaultSSLConfigProvider.CIDS_DIR + FILE_SEP + SERVER_CERT_FILE_NAME));
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
checkGUIState();
}
} //GEN-LAST:event_cmdGetServerCertActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdGetClientCertActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdGetClientCertActionPerformed
fileChooser.setFileFilter(keystoreFileFilter);
final int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
final File fileToLoad = fileChooser.getSelectedFile();
try {
Files.copy(
fileToLoad,
new File(DefaultSSLConfigProvider.CIDS_DIR + FILE_SEP + CLIENT_CERT_KEYSTORE_FILE_NAME));
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
checkGUIState();
}
} //GEN-LAST:event_cmdGetClientCertActionPerformed
}