From 07950ff5cf218a741e474d9160ed2263aa70cda8 Mon Sep 17 00:00:00 2001 From: Karl Mortensen Date: Fri, 2 Oct 2015 09:55:12 -0400 Subject: [PATCH] add connection testing buttons for multi user settings --- Core/nbproject/project.properties | 8 + Core/nbproject/project.xml | 48 +- .../autopsy/corecomponents/Bundle.properties | 44 +- .../MultiUserSettingsPanel.form | 209 +++++--- .../MultiUserSettingsPanel.java | 486 ++++++++++++------ .../MultiUserSettingsPanelController.java | 2 +- .../SolrServiceConnectionTester.java | 64 +++ .../events/MessageServiceConnectionInfo.java | 3 +- Core/src/org/sleuthkit/autopsy/images/bad.png | Bin 0 -> 619 bytes .../src/org/sleuthkit/autopsy/images/good.png | Bin 0 -> 724 bytes CoreLibs/ivy.xml | 4 + 11 files changed, 614 insertions(+), 254 deletions(-) create mode 100755 Core/src/org/sleuthkit/autopsy/coreutils/SolrServiceConnectionTester.java create mode 100755 Core/src/org/sleuthkit/autopsy/images/bad.png create mode 100755 Core/src/org/sleuthkit/autopsy/images/good.png diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 86ed71097f..c9f8567892 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -1,13 +1,19 @@ file.reference.activemq-all-5.11.1.jar=release/modules/ext/activemq-all-5.11.1.jar +file.reference.c3p0-0.9.5.jar=release/modules/ext/c3p0-0.9.5.jar +file.reference.httpclient-4.3.1.jar=release/modules/ext/httpclient-4.3.1.jar +file.reference.httpcore-4.3.jar=release/modules/ext/httpcore-4.3.jar file.reference.jdom-2.0.5-contrib.jar=release/modules/ext/jdom-2.0.5-contrib.jar file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar file.reference.jython-standalone-2.7.0.jar=release/modules/ext/jython-standalone-2.7.0.jar +file.reference.mchange-commons-java-0.2.9.jar=release/modules/ext/mchange-commons-java-0.2.9.jar file.reference.metadata-extractor-2.8.1.jar=release/modules/ext/metadata-extractor-2.8.1.jar +file.reference.noggit-0.5.jar=release/modules/ext/noggit-0.5.jar file.reference.postgresql-9.4-1201-jdbc41.jar=release/modules/ext/postgresql-9.4-1201-jdbc41.jar file.reference.opencv-248.jar=release/modules/ext/opencv-248.jar file.reference.Rejistry-1.0-SNAPSHOT.jar=release/modules/ext/Rejistry-1.0-SNAPSHOT.jar file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar +file.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1.jar file.reference.sqlite-jdbc-3.8.11.jar=release/modules/ext/sqlite-jdbc-3.8.11.jar file.reference.StixLib.jar=release/modules/ext/StixLib.jar file.reference.tika-core-1.5.jar=release/modules/ext/tika-core-1.5.jar @@ -16,10 +22,12 @@ file.reference.xmpcore-5.1.2.jar=release/modules/ext/xmpcore-5.1.2.jar javac.source=1.8 javac.compilerargs=-Xlint -Xlint:-serial javadoc.reference.metadata-extractor-2.8.1.jar=release/modules/ext/metadata-extractor-2.8.1-src.zip +javadoc.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1-javadoc.jar license.file=../LICENSE-2.0.txt nbm.homepage=http://www.sleuthkit.org/ nbm.module.author=Brian Carrier nbm.needs.restart=true source.reference.metadata-extractor-2.8.1.jar=release/modules/ext/metadata-extractor-2.8.1-src.zip!/Source/ +source.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1-sources.jar spec.version.base=10.3 diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml index 78bb7e701e..ea045b73c1 100644 --- a/Core/nbproject/project.xml +++ b/Core/nbproject/project.xml @@ -205,6 +205,14 @@ org.sleuthkit.autopsy.report org.sleuthkit.datamodel + + ext/xmpcore-5.1.2.jar + release/modules/ext/xmpcore-5.1.2.jar + + + ext/httpcore-4.3.jar + release/modules/ext/httpcore-4.3.jar + ext/jdom-2.0.5.jar release/modules/ext/jdom-2.0.5.jar @@ -213,18 +221,6 @@ ext/postgresql-9.4-1201-jdbc41.jar release/modules/ext/postgresql-9.4-1201-jdbc41.jar - - ext/mchange-commons-java-0.2.9.jar - release/modules/ext/mchange-commons-java-0.2.9.jar - - - ext/c3p0-0.9.5.jar - release/modules/ext/c3p0-0.9.5.jar - - - ext/xmpcore-5.1.2.jar - release/modules/ext/xmpcore-5.1.2.jar - ext/StixLib.jar release/modules/ext/StixLib.jar @@ -233,17 +229,17 @@ ext/sqlite-jdbc-3.8.11.jar release/modules/ext/sqlite-jdbc-3.8.11.jar + + ext/activemq-all-5.11.1.jar + release/modules/ext/activemq-all-5.11.1.jar + ext/opencv-248.jar release/modules/ext/opencv-248.jar - ext/Rejistry-1.0-SNAPSHOT.jar - release/modules/ext/Rejistry-1.0-SNAPSHOT.jar - - - ext/activemq-all-5.11.1.jar - release/modules/ext/activemq-all-5.11.1.jar + ext/httpclient-4.3.1.jar + release/modules/ext/httpclient-4.3.1.jar ext/Rejistry-1.0-SNAPSHOT.jar @@ -257,6 +253,10 @@ ext/sevenzipjbinding.jar release/modules/ext/sevenzipjbinding.jar + + ext/mchange-commons-java-0.2.9.jar + release/modules/ext/mchange-commons-java-0.2.9.jar + ext/sevenzipjbinding-AllPlatforms.jar release/modules/ext/sevenzipjbinding-AllPlatforms.jar @@ -266,8 +266,8 @@ release/modules/ext/tika-core-1.5.jar - ext/metadata-extractor-2.8.1.jar - release/modules/ext/metadata-extractor-2.8.1.jar + ext/noggit-0.5.jar + release/modules/ext/noggit-0.5.jar ext/metadata-extractor-2.8.1.jar @@ -277,10 +277,18 @@ ext/jdom-2.0.5-contrib.jar release/modules/ext/jdom-2.0.5-contrib.jar + + ext/c3p0-0.9.5.jar + release/modules/ext/c3p0-0.9.5.jar + ext/Tsk_DataModel.jar release/modules/ext/Tsk_DataModel.jar + + ext/solr-solrj-4.9.1.jar + release/modules/ext/solr-solrj-4.9.1.jar + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index 539b2354f9..988b154ec2 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -150,15 +150,6 @@ FXVideoPanel.progress.errorWritingVideoToDisk=Error writing video to disk OptionsCategory_Name_Multi_User_Settings=Multi-user OptionsCategory_Keywords_Multi_User_Options=Multi-user Options MultiUserSettingsPanel.lbSolrSettings.text=Solr Settings -MultiUserSettingsPanel.tbPassword.toolTipText=Password -MultiUserSettingsPanel.tbPassword.text= -MultiUserSettingsPanel.tbUsername.toolTipText=User Name -MultiUserSettingsPanel.tbUsername.text= -MultiUserSettingsPanel.tbPortNumber.toolTipText=Port Number -MultiUserSettingsPanel.tbPortNumber.text= -MultiUserSettingsPanel.tbHostnameOrIp.toolTipText=Hostname or IP Address -MultiUserSettingsPanel.tbHostnameOrIp.text= -MultiUserSettingsPanel.lbMessagingSettings.text=Message Service Settings MultiUserSettingsPanel.cbEnableMultiUser.text=Enable Multi-user cases MultiUserSettingsPanel.lbDatabaseSettings.text=Database Settings MultiUserSettingsPanel.validationErrMsg.incomplete=Fill in all values @@ -166,16 +157,6 @@ MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort=Invalid database por MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort=Invalid message service port number MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort=Invalid Solr server port number MultiUserSettingsPanel.validationErrMsg.invalidMessgeServiceURI=Message service host and/or port not valid -MultiUserSettingsPanel.msgHostTextField.text= -MultiUserSettingsPanel.msgHostTextField.toolTipText=Hostname or IP Address -MultiUserSettingsPanel.msgUserNameTextField.toolTipText=Hostname or IP Address -MultiUserSettingsPanel.msgUserNameTextField.text= -MultiUserSettingsPanel.msgPasswordField.toolTipText=Password -MultiUserSettingsPanel.msgPasswordField.text= -MultiUserSettingsPanel.msgPortTextField.toolTipText=Hostname or IP Address -MultiUserSettingsPanel.msgPortTextField.text= -MultiUserSettingsPanel.tbIndexingServerHost.toolTipText=Hostname or IP Address -MultiUserSettingsPanel.tbIndexingServerPort.toolTipText=Port Number AutopsyOptionsPanel.jCheckBoxEnableProcTimeout.text= AutopsyOptionsPanel.jFormattedTextFieldProcTimeOutHrs.text=60 AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=hour(s) @@ -185,3 +166,28 @@ DataContentViewerHex.goToOffsetTextField.text= DataContentViewerHex.goToOffsetTextField.msgDlg=Invalid Offset: {0} DataContentViewerHex.setDataView.invalidOffset.negativeOffsetValue=Cannot jump to the resultant offset MultiUserSettingsPanel.tbOops.text= +MultiUserSettingsPanel.lbTestDatabase.text= +MultiUserSettingsPanel.bnTestDatabase.text=Test +MultiUserSettingsPanel.tbDbHostname.toolTipText=Hostname or IP Address +MultiUserSettingsPanel.tbDbHostname.text= +MultiUserSettingsPanel.tbDbPort.toolTipText=Port Number +MultiUserSettingsPanel.tbDbPort.text= +MultiUserSettingsPanel.tbDbUsername.toolTipText=User Name +MultiUserSettingsPanel.tbDbUsername.text= +MultiUserSettingsPanel.tbDbPassword.toolTipText=Password +MultiUserSettingsPanel.tbDbPassword.text= +MultiUserSettingsPanel.lbTestSolr.text= +MultiUserSettingsPanel.bnTestSolr.text=Test +MultiUserSettingsPanel.tbSolrHostname.toolTipText=Hostname or IP Address +MultiUserSettingsPanel.tbSolrPort.toolTipText=Port Number +MultiUserSettingsPanel.lbTestMessageService.text= +MultiUserSettingsPanel.bnTestMessageService.text=Test +MultiUserSettingsPanel.lbMessageServiceSettings.text=ActiveMQ Message Service Settings +MultiUserSettingsPanel.tbMsgHost.toolTipText=Hostname or IP Address +MultiUserSettingsPanel.tbMsgHost.text= +MultiUserSettingsPanel.tbMsgPort.toolTipText=Port Number +MultiUserSettingsPanel.tbMsgPort.text= +MultiUserSettingsPanel.tbMsgUsername.toolTipText=User Name +MultiUserSettingsPanel.tbMsgUsername.text= +MultiUserSettingsPanel.tbMsgPassword.toolTipText=Password +MultiUserSettingsPanel.tbMsgPassword.text= diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.form index 931c284260..6749df0a5d 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.form @@ -78,17 +78,20 @@ - + - - - - - + + - + + + + + + + @@ -98,70 +101,74 @@ - - - + + + + + + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -176,6 +183,24 @@ + + + + + + + + + + + + + + + + + + @@ -190,15 +215,18 @@ - + - + + - + + + + - - + @@ -208,11 +236,17 @@ - - - + + + + + + + + + - + @@ -229,23 +263,40 @@ - + - + - + - + + + + + + + + + + + + + + + + + + @@ -263,17 +314,20 @@ - + - - - + + + + + + + - - - - + + + @@ -283,80 +337,103 @@ - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.java index c3fc3ed39f..3386306eef 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanel.java @@ -5,6 +5,7 @@ */ package org.sleuthkit.autopsy.corecomponents; +import org.sleuthkit.autopsy.coreutils.SolrServiceConnectionTester; import java.awt.Color; import java.util.ArrayList; import java.util.Collection; @@ -17,24 +18,33 @@ import org.sleuthkit.datamodel.TskData.DbType; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo; import org.sleuthkit.autopsy.coreutils.Logger; +import java.awt.Cursor; +import javax.swing.ImageIcon; +import org.openide.util.ImageUtilities; public final class MultiUserSettingsPanel extends javax.swing.JPanel { - private static final String HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbHostnameOrIp.toolTipText"); - private static final String PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPortNumber.toolTipText"); - private static final String USER_NAME_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbUsername.toolTipText"); - private static final String PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPassword.toolTipText"); + private static final String HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText"); + private static final String PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText"); + private static final String USER_NAME_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText"); + private static final String PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText"); private static final String INCOMPLETE_SETTINGS_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.incomplete"); private static final String INVALID_DB_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort"); private static final String INVALID_MESSAGE_SERVICE_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort"); private static final String INVALID_INDEXING_SERVER_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort"); + private static final long serialVersionUID = 1L; private final MultiUserSettingsPanelController controller; private final Collection textBoxes = new ArrayList<>(); private final TextBoxChangedListener textBoxChangedListener; private static final Logger logger = Logger.getLogger(MultiUserSettingsPanel.class.getName()); + private final ImageIcon goodIcon; + private final ImageIcon badIcon; + // private final ImageIcon untestedIcon; /** * Creates new form AutopsyMultiUserSettingsPanel + * + * @param theController Controller to notify of changes. */ public MultiUserSettingsPanel(MultiUserSettingsPanelController theController) { initComponents(); @@ -44,32 +54,53 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { * Add text prompts to all of the text fields. */ Collection textPrompts = new ArrayList<>(); - textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbHostnameOrIp)); - textPrompts.add(new TextPrompt(PORT_PROMPT, tbPortNumber)); - textPrompts.add(new TextPrompt(USER_NAME_PROMPT, tbUsername)); - textPrompts.add(new TextPrompt(PASSWORD_PROMPT, tbPassword)); - textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, msgHostTextField)); - textPrompts.add(new TextPrompt(PORT_PROMPT, msgPortTextField)); - textPrompts.add(new TextPrompt(USER_NAME_PROMPT, msgUserNameTextField)); - textPrompts.add(new TextPrompt(PASSWORD_PROMPT, msgPasswordField)); - textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbIndexingServerHost)); - textPrompts.add(new TextPrompt(PORT_PROMPT, tbIndexingServerPort)); + textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbDbHostname)); + textPrompts.add(new TextPrompt(PORT_PROMPT, tbDbPort)); + textPrompts.add(new TextPrompt(USER_NAME_PROMPT, tbDbUsername)); + textPrompts.add(new TextPrompt(PASSWORD_PROMPT, tbDbPassword)); + textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbMsgHost)); + textPrompts.add(new TextPrompt(PORT_PROMPT, tbMsgPort)); + textPrompts.add(new TextPrompt(USER_NAME_PROMPT, tbMsgUsername)); + textPrompts.add(new TextPrompt(PASSWORD_PROMPT, tbMsgPassword)); + textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbSolrHostname)); + textPrompts.add(new TextPrompt(PORT_PROMPT, tbSolrPort)); configureTextPrompts(textPrompts); + /* Set each textbox with a "statusIcon" property enabling the + DocumentListeners to know which icon to erase when changes are made */ + + tbDbHostname.getDocument().putProperty("statusIcon", lbTestDatabase); + tbDbPort.getDocument().putProperty("statusIcon", lbTestDatabase); + tbDbUsername.getDocument().putProperty("statusIcon", lbTestDatabase); + tbDbPassword.getDocument().putProperty("statusIcon", lbTestDatabase); + + tbSolrHostname.getDocument().putProperty("statusIcon", lbTestSolr); + tbSolrPort.getDocument().putProperty("statusIcon", lbTestSolr); + + tbMsgHost.getDocument().putProperty("statusIcon", lbTestMessageService); + tbMsgPort.getDocument().putProperty("statusIcon", lbTestMessageService); + tbMsgUsername.getDocument().putProperty("statusIcon", lbTestMessageService); + tbMsgPassword.getDocument().putProperty("statusIcon", lbTestMessageService); + /// Register for notifications when the text boxes get updated. textBoxChangedListener = new TextBoxChangedListener(); - textBoxes.add(tbHostnameOrIp); - textBoxes.add(tbPortNumber); - textBoxes.add(tbUsername); - textBoxes.add(tbPassword); - textBoxes.add(msgHostTextField); - textBoxes.add(msgPortTextField); - textBoxes.add(msgUserNameTextField); - textBoxes.add(msgPasswordField); - textBoxes.add(tbIndexingServerHost); - textBoxes.add(tbIndexingServerPort); + textBoxes.add(tbDbHostname); + textBoxes.add(tbDbPort); + textBoxes.add(tbDbUsername); + textBoxes.add(tbDbPassword); + textBoxes.add(tbMsgHost); + textBoxes.add(tbMsgPort); + textBoxes.add(tbMsgUsername); + textBoxes.add(tbMsgPassword); + textBoxes.add(tbSolrHostname); + textBoxes.add(tbSolrPort); + addDocumentListeners(textBoxes, textBoxChangedListener); - + goodIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/good.png", false)); + badIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/bad.png", false)); + lbTestDatabase.setIcon(null); + lbTestSolr.setIcon(null); + lbTestMessageService.setIcon(null); enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected()); } @@ -110,46 +141,62 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { pnOverallPanel = new javax.swing.JPanel(); pnDatabaseSettings = new javax.swing.JPanel(); - tbHostnameOrIp = new javax.swing.JTextField(); - tbPortNumber = new javax.swing.JTextField(); - tbUsername = new javax.swing.JTextField(); - tbPassword = new javax.swing.JPasswordField(); + tbDbHostname = new javax.swing.JTextField(); + tbDbPort = new javax.swing.JTextField(); + tbDbUsername = new javax.swing.JTextField(); + tbDbPassword = new javax.swing.JPasswordField(); lbDatabaseSettings = new javax.swing.JLabel(); + bnTestDatabase = new javax.swing.JButton(); + lbTestDatabase = new javax.swing.JLabel(); pnSolrSettings = new javax.swing.JPanel(); lbSolrSettings = new javax.swing.JLabel(); - tbIndexingServerHost = new javax.swing.JTextField(); - tbIndexingServerPort = new javax.swing.JTextField(); + tbSolrHostname = new javax.swing.JTextField(); + tbSolrPort = new javax.swing.JTextField(); + bnTestSolr = new javax.swing.JButton(); + lbTestSolr = new javax.swing.JLabel(); pnMessagingSettings = new javax.swing.JPanel(); - lbMessagingSettings = new javax.swing.JLabel(); - msgHostTextField = new javax.swing.JTextField(); - msgUserNameTextField = new javax.swing.JTextField(); - msgPortTextField = new javax.swing.JTextField(); - msgPasswordField = new javax.swing.JPasswordField(); + lbMessageServiceSettings = new javax.swing.JLabel(); + tbMsgHost = new javax.swing.JTextField(); + tbMsgUsername = new javax.swing.JTextField(); + tbMsgPort = new javax.swing.JTextField(); + tbMsgPassword = new javax.swing.JPasswordField(); + bnTestMessageService = new javax.swing.JButton(); + lbTestMessageService = new javax.swing.JLabel(); cbEnableMultiUser = new javax.swing.JCheckBox(); tbOops = new javax.swing.JTextField(); pnDatabaseSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - tbHostnameOrIp.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbHostnameOrIp.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbHostnameOrIp.text")); // NOI18N - tbHostnameOrIp.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbHostnameOrIp.toolTipText")); // NOI18N + tbDbHostname.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbDbHostname.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.text")); // NOI18N + tbDbHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText")); // NOI18N - tbPortNumber.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbPortNumber.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPortNumber.text")); // NOI18N - tbPortNumber.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPortNumber.toolTipText")); // NOI18N + tbDbPort.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbDbPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.text")); // NOI18N + tbDbPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText")); // NOI18N - tbUsername.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbUsername.text")); // NOI18N - tbUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbUsername.toolTipText")); // NOI18N + tbDbUsername.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbDbUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.text")); // NOI18N + tbDbUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText")); // NOI18N - tbPassword.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPassword.text")); // NOI18N - tbPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbPassword.toolTipText")); // NOI18N + tbDbPassword.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbDbPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.text")); // NOI18N + tbDbPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText")); // NOI18N lbDatabaseSettings.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbDatabaseSettings.text")); // NOI18N lbDatabaseSettings.setVerticalAlignment(javax.swing.SwingConstants.TOP); + org.openide.awt.Mnemonics.setLocalizedText(bnTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestDatabase.text")); // NOI18N + bnTestDatabase.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnTestDatabaseActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(lbTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestDatabase.text")); // NOI18N + lbTestDatabase.setAutoscrolls(true); + javax.swing.GroupLayout pnDatabaseSettingsLayout = new javax.swing.GroupLayout(pnDatabaseSettings); pnDatabaseSettings.setLayout(pnDatabaseSettingsLayout); pnDatabaseSettingsLayout.setHorizontalGroup( @@ -157,29 +204,35 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { .addGroup(pnDatabaseSettingsLayout.createSequentialGroup() .addContainerGap() .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tbHostnameOrIp) - .addComponent(tbPortNumber) - .addComponent(tbUsername) - .addComponent(tbPassword) + .addComponent(tbDbHostname) .addGroup(pnDatabaseSettingsLayout.createSequentialGroup() .addComponent(lbDatabaseSettings) - .addGap(0, 0, Short.MAX_VALUE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(bnTestDatabase) + .addGap(18, 18, 18) + .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(tbDbPort) + .addComponent(tbDbUsername) + .addComponent(tbDbPassword)) .addContainerGap()) ); pnDatabaseSettingsLayout.setVerticalGroup( pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnDatabaseSettingsLayout.createSequentialGroup() .addContainerGap() - .addComponent(lbDatabaseSettings) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) - .addComponent(tbHostnameOrIp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lbDatabaseSettings) + .addComponent(bnTestDatabase) + .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(tbDbHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(tbPortNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbDbPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(tbUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbDbUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(tbPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addComponent(tbDbPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(13, 13, 13)) ); pnSolrSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -187,11 +240,20 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { lbSolrSettings.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(lbSolrSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolrSettings.text")); // NOI18N - tbIndexingServerHost.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbIndexingServerHost.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbIndexingServerHost.toolTipText")); // NOI18N + tbSolrHostname.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbSolrHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolrHostname.toolTipText")); // NOI18N - tbIndexingServerPort.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - tbIndexingServerPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbIndexingServerPort.toolTipText")); // NOI18N + tbSolrPort.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbSolrPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolrPort.toolTipText")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(bnTestSolr, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestSolr.text")); // NOI18N + bnTestSolr.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnTestSolrActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(lbTestSolr, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestSolr.text")); // NOI18N javax.swing.GroupLayout pnSolrSettingsLayout = new javax.swing.GroupLayout(pnSolrSettings); pnSolrSettings.setLayout(pnSolrSettingsLayout); @@ -200,45 +262,61 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { .addGroup(pnSolrSettingsLayout.createSequentialGroup() .addContainerGap() .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(tbSolrHostname) .addGroup(pnSolrSettingsLayout.createSequentialGroup() .addComponent(lbSolrSettings) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(tbIndexingServerHost, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(tbIndexingServerPort, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(bnTestSolr) + .addGap(18, 18, 18) + .addComponent(lbTestSolr, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(tbSolrPort)) .addContainerGap()) ); pnSolrSettingsLayout.setVerticalGroup( pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnSolrSettingsLayout.createSequentialGroup() .addContainerGap() - .addComponent(lbSolrSettings) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(tbIndexingServerHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lbSolrSettings) + .addComponent(bnTestSolr)) + .addComponent(lbTestSolr, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(tbSolrHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(tbIndexingServerPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbSolrPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(45, 45, 45)) ); pnMessagingSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - lbMessagingSettings.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(lbMessagingSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbMessagingSettings.text")); // NOI18N + lbMessageServiceSettings.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(lbMessageServiceSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbMessageServiceSettings.text")); // NOI18N - msgHostTextField.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - msgHostTextField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgHostTextField.text")); // NOI18N - msgHostTextField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgHostTextField.toolTipText")); // NOI18N + tbMsgHost.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbMsgHost.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHost.text")); // NOI18N + tbMsgHost.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHost.toolTipText")); // NOI18N - msgUserNameTextField.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - msgUserNameTextField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgUserNameTextField.text")); // NOI18N - msgUserNameTextField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgUserNameTextField.toolTipText")); // NOI18N + tbMsgUsername.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbMsgUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.text")); // NOI18N + tbMsgUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.toolTipText")); // NOI18N - msgPortTextField.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - msgPortTextField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPortTextField.text")); // NOI18N - msgPortTextField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPortTextField.toolTipText")); // NOI18N + tbMsgPort.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbMsgPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.text")); // NOI18N + tbMsgPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.toolTipText")); // NOI18N - msgPasswordField.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N - msgPasswordField.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPasswordField.text")); // NOI18N - msgPasswordField.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.msgPasswordField.toolTipText")); // NOI18N + tbMsgPassword.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N + tbMsgPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.text")); // NOI18N + tbMsgPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.toolTipText")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(bnTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestMessageService.text")); // NOI18N + bnTestMessageService.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnTestMessageServiceActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(lbTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestMessageService.text")); // NOI18N javax.swing.GroupLayout pnMessagingSettingsLayout = new javax.swing.GroupLayout(pnMessagingSettings); pnMessagingSettings.setLayout(pnMessagingSettingsLayout); @@ -247,28 +325,35 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { .addGroup(pnMessagingSettingsLayout.createSequentialGroup() .addContainerGap() .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(tbMsgHost) .addGroup(pnMessagingSettingsLayout.createSequentialGroup() - .addComponent(lbMessagingSettings) - .addGap(0, 334, Short.MAX_VALUE)) - .addComponent(msgHostTextField, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(msgUserNameTextField, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(msgPortTextField, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(msgPasswordField)) + .addComponent(lbMessageServiceSettings) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 229, Short.MAX_VALUE) + .addComponent(bnTestMessageService) + .addGap(18, 18, 18) + .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(tbMsgPort) + .addComponent(tbMsgUsername) + .addComponent(tbMsgPassword)) .addContainerGap()) ); pnMessagingSettingsLayout.setVerticalGroup( pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnMessagingSettingsLayout.createSequentialGroup() .addContainerGap() - .addComponent(lbMessagingSettings) + .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lbMessageServiceSettings) + .addComponent(bnTestMessageService)) + .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(msgHostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbMsgHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(msgPortTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbMsgPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(msgUserNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbMsgUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(msgPasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tbMsgPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); @@ -280,7 +365,6 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { }); tbOops.setEditable(false); - tbOops.setBackground(new java.awt.Color(240, 240, 240)); tbOops.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N tbOops.setForeground(new java.awt.Color(255, 0, 0)); tbOops.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbOops.text")); // NOI18N @@ -343,34 +427,114 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { private void cbEnableMultiUserItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cbEnableMultiUserItemStateChanged if (!cbEnableMultiUser.isSelected()) { tbOops.setText(""); + bnTestDatabase.setEnabled(false); + bnTestSolr.setEnabled(false); + bnTestMessageService.setEnabled(false); } enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected()); controller.changed(); }//GEN-LAST:event_cbEnableMultiUserItemStateChanged + private void bnTestDatabaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestDatabaseActionPerformed + lbTestDatabase.setIcon(null); + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + CaseDbConnectionInfo dbInfo = new CaseDbConnectionInfo( + this.tbDbHostname.getText(), + this.tbDbPort.getText(), + this.tbDbUsername.getText(), + new String(this.tbDbPassword.getPassword()), + DbType.POSTGRESQL); + if (dbInfo.canConnect()) { + lbTestDatabase.setIcon(goodIcon); + } else { + lbTestDatabase.setIcon(badIcon); + } + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + }//GEN-LAST:event_bnTestDatabaseActionPerformed + + private void bnTestMessageServiceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestMessageServiceActionPerformed + lbTestMessageService.setIcon(null); + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + MessageServiceConnectionInfo messagingConnectionInfo = new MessageServiceConnectionInfo( + this.tbMsgUsername.getText(), + new String(this.tbMsgPassword.getPassword()), + this.tbMsgHost.getText(), + this.tbMsgPort.getText()); + if (messagingConnectionInfo.canConnect()) { + lbTestMessageService.setIcon(goodIcon); + } else { + lbTestMessageService.setIcon(badIcon); + } + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + }//GEN-LAST:event_bnTestMessageServiceActionPerformed + + private void bnTestSolrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestSolrActionPerformed + lbTestSolr.setIcon(null); + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + if (SolrServiceConnectionTester.canConnect(tbSolrHostname.getText(), tbSolrPort.getText())) { + lbTestSolr.setIcon(goodIcon); + } else { + lbTestSolr.setIcon(badIcon); + } + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + }//GEN-LAST:event_bnTestSolrActionPerformed + void load() { CaseDbConnectionInfo dbInfo = UserPreferences.getDatabaseConnectionInfo(); - tbHostnameOrIp.setText(dbInfo.getHost().trim()); - tbPortNumber.setText(dbInfo.getPort().trim()); - tbUsername.setText(dbInfo.getUserName().trim()); - tbPassword.setText(dbInfo.getPassword()); + tbDbHostname.setText(dbInfo.getHost().trim()); + tbDbPort.setText(dbInfo.getPort().trim()); + tbDbUsername.setText(dbInfo.getUserName().trim()); + tbDbPassword.setText(dbInfo.getPassword()); MessageServiceConnectionInfo msgServiceInfo = UserPreferences.getMessageServiceConnectionInfo(); - msgHostTextField.setText(msgServiceInfo.getHost().trim()); - msgPortTextField.setText(msgServiceInfo.getPort().trim()); - msgUserNameTextField.setText(msgServiceInfo.getUserName().trim()); - msgPasswordField.setText(msgServiceInfo.getPassword()); + tbMsgHost.setText(msgServiceInfo.getHost().trim()); + tbMsgPort.setText(msgServiceInfo.getPort().trim()); + tbMsgUsername.setText(msgServiceInfo.getUserName().trim()); + tbMsgPassword.setText(msgServiceInfo.getPassword()); String indexingServerHost = UserPreferences.getIndexingServerHost().trim(); if (!indexingServerHost.isEmpty()) { - tbIndexingServerHost.setText(indexingServerHost); + tbSolrHostname.setText(indexingServerHost); } String indexingServerPort = UserPreferences.getIndexingServerPort().trim(); if (portNumberIsValid(indexingServerPort)) { - tbIndexingServerPort.setText(indexingServerPort); + tbSolrPort.setText(indexingServerPort); } + lbTestDatabase.setIcon(null); + lbTestSolr.setIcon(null); + lbTestMessageService.setIcon(null); + + bnTestDatabase.setEnabled(false); + bnTestSolr.setEnabled(false); + bnTestMessageService.setEnabled(false); + cbEnableMultiUser.setSelected(UserPreferences.getIsMultiUserModeEnabled()); + this.valid(); // trigger validation to enable buttons based on current settings + } + + /** + * Tests whether or not values have been entered in all of the database + * settings text fields. + * + * @return True or false. + */ + private boolean databaseFieldsArePopulated() { + return !tbDbHostname.getText().isEmpty() + && !tbDbPort.getText().isEmpty() + && !tbDbUsername.getText().isEmpty() + && tbDbPassword.getPassword().length != 0; + } + + /** + * Tests whether or not values have been entered in all of the Solr settings + * text fields. + * + * @return True or false. + */ + private boolean solrFieldsArePopulated() { + return !tbSolrHostname.getText().isEmpty() + && !tbSolrPort.getText().isEmpty(); } /** @@ -380,14 +544,13 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { * @return True or false. */ private boolean messageServiceFieldsArePopulated() { - return !msgHostTextField.getText().isEmpty() - && !msgPortTextField.getText().isEmpty() - && !msgUserNameTextField.getText().isEmpty() - && msgPasswordField.getPassword().length != 0; + return !tbMsgHost.getText().isEmpty() + && !tbMsgPort.getText().isEmpty() + && !tbMsgUsername.getText().isEmpty() + && tbMsgPassword.getPassword().length != 0; } void store() { - DbType dbType = DbType.SQLITE; if (cbEnableMultiUser.isSelected()) { @@ -397,23 +560,23 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { UserPreferences.setIsMultiUserModeEnabled(cbEnableMultiUser.isSelected()); CaseDbConnectionInfo info = new CaseDbConnectionInfo( - tbHostnameOrIp.getText().trim(), - tbPortNumber.getText().trim(), - tbUsername.getText().trim(), - new String(tbPassword.getPassword()), + tbDbHostname.getText().trim(), + tbDbPort.getText().trim(), + tbDbUsername.getText().trim(), + new String(tbDbPassword.getPassword()), dbType); UserPreferences.setDatabaseConnectionInfo(info); MessageServiceConnectionInfo msgServiceInfo = new MessageServiceConnectionInfo( - msgUserNameTextField.getText().trim(), - new String(msgPasswordField.getPassword()), - msgHostTextField.getText().trim(), - msgPortTextField.getText().trim()); + tbMsgUsername.getText().trim(), + new String(tbMsgPassword.getPassword()), + tbMsgHost.getText().trim(), + tbMsgPort.getText().trim()); UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo); - UserPreferences.setIndexingServerHost(tbIndexingServerHost.getText().trim()); - UserPreferences.setIndexingServerPort(Integer.parseInt(tbIndexingServerPort.getText().trim())); + UserPreferences.setIndexingServerHost(tbSolrHostname.getText().trim()); + UserPreferences.setIndexingServerPort(Integer.parseInt(tbSolrPort.getText().trim())); } @@ -424,26 +587,40 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { */ boolean valid() { tbOops.setText(""); + if (cbEnableMultiUser.isSelected()) { - return settingsAreComplete() && databaseSettingsAreValid() && indexingServerSettingsAreValid() && messageServiceSettingsAreValid(); + return checkFieldsAndEnableButtons() + && databaseSettingsAreValid() + && indexingServerSettingsAreValid() + && messageServiceSettingsAreValid(); } else { return true; } } /** - * Tests whether or not all of the settings components are populated. + * Tests whether or not all of the settings components are populated and + * sets the test buttons appropriately. * * @return True or false. */ - boolean settingsAreComplete() { + boolean checkFieldsAndEnableButtons() { boolean result = true; - if (tbHostnameOrIp.getText().isEmpty() - || tbPortNumber.getText().isEmpty() - || tbUsername.getText().isEmpty() - || tbPassword.getPassword().length == 0 - || tbIndexingServerHost.getText().isEmpty() - || !messageServiceFieldsArePopulated()) { + + boolean dbPopulated = databaseFieldsArePopulated(); + boolean solrPopulated = solrFieldsArePopulated(); + boolean messageServicePopulated = messageServiceFieldsArePopulated(); + + // PostgreSQL Database + bnTestDatabase.setEnabled(dbPopulated); + + // Solr Indexing + bnTestSolr.setEnabled(solrPopulated); + + // ActiveMQ Messaging + bnTestMessageService.setEnabled(messageServicePopulated); + + if (!dbPopulated || !solrPopulated || !messageServicePopulated) { // We don't even have everything filled out result = false; tbOops.setText(INCOMPLETE_SETTINGS_MSG); @@ -457,7 +634,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { * @return True or false. */ boolean databaseSettingsAreValid() { - if (portNumberIsValid(tbPortNumber.getText())) { + if (portNumberIsValid(tbDbPort.getText())) { return true; } else { tbOops.setText(INVALID_DB_PORT_MSG); @@ -471,7 +648,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { * @return True or false. */ boolean messageServiceSettingsAreValid() { - if (!portNumberIsValid(msgPortTextField.getText())) { + if (!portNumberIsValid(tbMsgPort.getText())) { tbOops.setText(INVALID_MESSAGE_SERVICE_PORT_MSG); return false; } @@ -485,7 +662,7 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { * @return True or false. */ boolean indexingServerSettingsAreValid() { - if (!portNumberIsValid(tbIndexingServerPort.getText())) { + if (!portNumberIsValid(tbSolrPort.getText())) { tbOops.setText(INVALID_INDEXING_SERVER_PORT_MSG); return false; } @@ -514,25 +691,31 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { } // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton bnTestDatabase; + private javax.swing.JButton bnTestMessageService; + private javax.swing.JButton bnTestSolr; private javax.swing.JCheckBox cbEnableMultiUser; private javax.swing.JLabel lbDatabaseSettings; - private javax.swing.JLabel lbMessagingSettings; + private javax.swing.JLabel lbMessageServiceSettings; private javax.swing.JLabel lbSolrSettings; - private javax.swing.JTextField msgHostTextField; - private javax.swing.JPasswordField msgPasswordField; - private javax.swing.JTextField msgPortTextField; - private javax.swing.JTextField msgUserNameTextField; + private javax.swing.JLabel lbTestDatabase; + private javax.swing.JLabel lbTestMessageService; + private javax.swing.JLabel lbTestSolr; private javax.swing.JPanel pnDatabaseSettings; private javax.swing.JPanel pnMessagingSettings; private javax.swing.JPanel pnOverallPanel; private javax.swing.JPanel pnSolrSettings; - private javax.swing.JTextField tbHostnameOrIp; - private javax.swing.JTextField tbIndexingServerHost; - private javax.swing.JTextField tbIndexingServerPort; + private javax.swing.JTextField tbDbHostname; + private javax.swing.JPasswordField tbDbPassword; + private javax.swing.JTextField tbDbPort; + private javax.swing.JTextField tbDbUsername; + private javax.swing.JTextField tbMsgHost; + private javax.swing.JPasswordField tbMsgPassword; + private javax.swing.JTextField tbMsgPort; + private javax.swing.JTextField tbMsgUsername; private javax.swing.JTextField tbOops; - private javax.swing.JPasswordField tbPassword; - private javax.swing.JTextField tbPortNumber; - private javax.swing.JTextField tbUsername; + private javax.swing.JTextField tbSolrHostname; + private javax.swing.JTextField tbSolrPort; // End of variables declaration//GEN-END:variables /** @@ -543,17 +726,28 @@ public final class MultiUserSettingsPanel extends javax.swing.JPanel { @Override public void changedUpdate(DocumentEvent e) { + Object statusIcon = e.getDocument().getProperty("statusIcon"); + if (statusIcon != null) { + ((javax.swing.JLabel) statusIcon).setIcon(null); + } controller.changed(); } @Override public void insertUpdate(DocumentEvent e) { + Object statusIcon = e.getDocument().getProperty("statusIcon"); + if (statusIcon != null) { + ((javax.swing.JLabel) statusIcon).setIcon(null); + } controller.changed(); } @Override - public void removeUpdate(DocumentEvent e) { + Object statusIcon = e.getDocument().getProperty("statusIcon"); + if (statusIcon != null) { + ((javax.swing.JLabel) statusIcon).setIcon(null); + } controller.changed(); } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java index b2e3a81350..80b3f9bb58 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java @@ -87,7 +87,7 @@ public final class MultiUserSettingsPanelController extends OptionsPanelControll @Override public void removePropertyChangeListener(PropertyChangeListener l) { /** - * Note the NetBeans Framework does not appear to call this at all We + * Note the NetBeans Framework does not appear to call this at all. We * are using NetBeans 7.3.1 Build 201306052037. Perhaps in a future * version of the Framework this will be resolved, but for now, simply * don't unregister anything and add one time only in the diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/SolrServiceConnectionTester.java b/Core/src/org/sleuthkit/autopsy/coreutils/SolrServiceConnectionTester.java new file mode 100755 index 0000000000..6e360e1c68 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/coreutils/SolrServiceConnectionTester.java @@ -0,0 +1,64 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2015 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed 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.sleuthkit.autopsy.coreutils; + +import java.io.IOException; +import java.util.logging.Level; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.request.CoreAdminRequest; +import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.response.CoreAdminResponse; + +/** + * Checks if we can communicate with Solr. + */ +public class SolrServiceConnectionTester { + + /** + * Checks if we can communicate with Solr using the passed-in host and port. + * Closes the connection upon exit. + * + * @param host the remote hostname or IP address of the Solr server + * @param port the remote port for Solr + * + * @return true if communication with Solr is functional, false otherwise + */ + public static boolean canConnect(String host, String port) { + try { + // if the port value is invalid, return false + Integer.parseInt(port); + } catch (NumberFormatException ex) { + Logger.getLogger(SolrServiceConnectionTester.class.getName()).log(Level.INFO, "Solr port is not valid."); //NON-NLS + return false; + } + HttpSolrServer solrServer = null; + try { + solrServer = new HttpSolrServer("http://" + host + ":" + port + "/solr"); //NON-NLS + CoreAdminResponse status = CoreAdminRequest.getStatus(null, solrServer); + return true; // if we get here, it's at least up and responding + } catch (SolrServerException | IOException ignore) { + Logger.getLogger(SolrServiceConnectionTester.class.getName()).log(Level.INFO, "Could not communicate with Solr."); //NON-NLS + } finally { + if (solrServer != null) { + solrServer.shutdown(); + } + } + return false; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/events/MessageServiceConnectionInfo.java b/Core/src/org/sleuthkit/autopsy/events/MessageServiceConnectionInfo.java index 61457f9acd..acb20776bc 100644 --- a/Core/src/org/sleuthkit/autopsy/events/MessageServiceConnectionInfo.java +++ b/Core/src/org/sleuthkit/autopsy/events/MessageServiceConnectionInfo.java @@ -24,7 +24,6 @@ import javax.annotation.concurrent.Immutable; import javax.jms.Connection; import javax.jms.JMSException; import org.apache.activemq.ActiveMQConnectionFactory; -import org.sleuthkit.autopsy.core.UserPreferences; /** * Connection info for a Java Message Service (JMS) provider. Thread-safe. @@ -112,7 +111,7 @@ public final class MessageServiceConnectionInfo { public boolean canConnect() { try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(getUserName(), getPassword(), getURI()); - Connection connection = connectionFactory.createConnection(); + Connection connection = connectionFactory.createConnection(getUserName(), getPassword()); connection.start(); connection.close(); return true; diff --git a/Core/src/org/sleuthkit/autopsy/images/bad.png b/Core/src/org/sleuthkit/autopsy/images/bad.png new file mode 100755 index 0000000000000000000000000000000000000000..e8f8f55fc105d35466e0bf8d6f04134425b24c92 GIT binary patch literal 619 zcmV-x0+juUP)YuW6o${8Ar@w?BW7qI5mRc2X;Nrn8$PV@YumI*cdol=0!y_&!;d9&)2>-I{Q+uY zr4?Zzkp$zSq_CLSL1rie1D(0vp;H2u>cX46Ig>NF&pG!!2f=?HG%mR(2#B6}LP(fK zKnzo)--U;b2Kgu8quag0O-#JtYA_E=1G3`qQ+hpcP(!P-te)!nHCCfhwOzWUn z0;LtWZ01tXg<8j;Z_I_HKrTI+R#Ne#91TW8JU`7;ul=m;PH$CyJhs|ao-Hj8WYC4r z1T7}-!!nc)MnE)Beai(YB()laHos380a;w!sv)P1YS!k&(92_2?TrT5v`X%=E_V8$E7MsOQc!no)rgsMpO$rb~ znx$SzTE!+Dt2H= zl6+;~PXSRD8)o5><1;;jHvL`Gj?8DJ7yk74_!t{^`ruUtU*NUq$R?J_nf?quR*&`@ zqAX(S``lm9hd(j+Vh`pr|L6_Q^cyTSck9~%h(SgPu5Ui*zy$`64#J-28dg=`=1kAP zqZL + + + +