Autopsy  4.17.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
MultiUserSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013-2018 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.corecomponents;
20 
21 import java.awt.Color;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import javax.swing.JTextField;
25 import javax.swing.event.DocumentEvent;
26 import javax.swing.event.DocumentListener;
27 import org.openide.util.NbBundle;
28 import org.sleuthkit.datamodel.CaseDbConnectionInfo;
29 import org.sleuthkit.datamodel.TskData.DbType;
34 import java.awt.Cursor;
35 import java.io.IOException;
36 import java.util.logging.Level;
37 import javax.swing.ImageIcon;
38 import javax.swing.JOptionPane;
39 import javax.swing.SwingUtilities;
40 import org.openide.util.ImageUtilities;
41 import org.openide.util.Lookup;
48 import org.sleuthkit.datamodel.SleuthkitCase;
49 import org.sleuthkit.datamodel.TskCoreException;
50 
54 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
55 public final class MultiUserSettingsPanel extends javax.swing.JPanel {
56 
57  private static final String HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText");
58  private static final String PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText");
59  private static final String USER_NAME_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText");
60  private static final String PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText");
61  private static final String USER_NAME_PROMPT_OPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.toolTipText");
62  private static final String PASSWORD_PROMPT_OPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.toolTipText");
63  private static final String INCOMPLETE_SETTINGS_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.incomplete");
64  private static final String INVALID_DB_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort");
65  private static final String INVALID_MESSAGE_SERVICE_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort");
66  private static final String INVALID_INDEXING_SERVER_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort");
67  private static final String INVALID_SOLR4_SERVER_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidSolr4ServerPort");
68  private static final String SOLR_SERVER_NOT_CONFIGURED_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.solrNotConfigured");
69  private static final String INVALID_ZK_SERVER_HOST_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidZkServerHostName");
70  private static final String INVALID_ZK_SERVER_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidZkServerPort");
71  private static final String SOLR8_HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr8Hostname.toolTipText");
72  private static final String SOLR8_PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr8Port.toolTipText");
73  private static final String SOLR4_HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr4Hostname.toolTipText");
74  private static final String SOLR4_PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr4Port.toolTipText");
75  private static final String ZK_HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbZkHostname.toolTipText");
76  private static final String ZK_PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbZkPort.toolTipText");
77 
78  private static final long serialVersionUID = 1L;
80  private final Collection<JTextField> textBoxes = new ArrayList<>();
81  private final TextBoxChangedListener textBoxChangedListener;
82  private static final Logger logger = Logger.getLogger(MultiUserSettingsPanel.class.getName());
83  private final ImageIcon goodIcon;
84  private final ImageIcon badIcon;
85  private static final boolean isWindowsOS = PlatformUtil.isWindowsOS();
86 
93  initComponents();
94  controller = theController;
95  setSize(555, 600);
96 
100  Collection<TextPrompt> textPrompts = new ArrayList<>();
101  textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbDbHostname));
102  textPrompts.add(new TextPrompt(PORT_PROMPT, tbDbPort));
103  textPrompts.add(new TextPrompt(USER_NAME_PROMPT, tbDbUsername));
104  textPrompts.add(new TextPrompt(PASSWORD_PROMPT, tbDbPassword));
105  textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbMsgHostname));
106  textPrompts.add(new TextPrompt(PORT_PROMPT, tbMsgPort));
107  textPrompts.add(new TextPrompt(USER_NAME_PROMPT_OPT, tbMsgUsername));
108  textPrompts.add(new TextPrompt(PASSWORD_PROMPT_OPT, tbMsgPassword));
109  textPrompts.add(new TextPrompt(SOLR8_HOST_NAME_OR_IP_PROMPT, tbSolr8Hostname));
110  textPrompts.add(new TextPrompt(SOLR8_PORT_PROMPT, tbSolr8Port));
111  textPrompts.add(new TextPrompt(SOLR4_HOST_NAME_OR_IP_PROMPT, tbSolr4Hostname));
112  textPrompts.add(new TextPrompt(SOLR4_PORT_PROMPT, tbSolr4Port));
113  textPrompts.add(new TextPrompt(ZK_HOST_NAME_OR_IP_PROMPT, tbZkHostname));
114  textPrompts.add(new TextPrompt(ZK_PORT_PROMPT, tbZkPort));
115  configureTextPrompts(textPrompts);
116 
117  /*
118  * Set each textbox with a "statusIcon" property enabling the
119  * DocumentListeners to know which icon to erase when changes are made
120  */
121  tbDbHostname.getDocument().putProperty("statusIcon", lbTestDatabase);
122  tbDbPort.getDocument().putProperty("statusIcon", lbTestDatabase);
123  tbDbUsername.getDocument().putProperty("statusIcon", lbTestDatabase);
124  tbDbPassword.getDocument().putProperty("statusIcon", lbTestDatabase);
125 
126  tbSolr8Hostname.getDocument().putProperty("statusIcon", lbTestSolr8);
127  tbSolr8Port.getDocument().putProperty("statusIcon", lbTestSolr8);
128  tbSolr4Hostname.getDocument().putProperty("statusIcon", lbTestSolr4);
129  tbSolr4Port.getDocument().putProperty("statusIcon", lbTestSolr4);
130  tbZkHostname.getDocument().putProperty("statusIcon", lbTestZK);
131  tbZkPort.getDocument().putProperty("statusIcon", lbTestZK);
132 
133  tbMsgHostname.getDocument().putProperty("statusIcon", lbTestMessageService);
134  tbMsgPort.getDocument().putProperty("statusIcon", lbTestMessageService);
135  tbMsgUsername.getDocument().putProperty("statusIcon", lbTestMessageService);
136  tbMsgPassword.getDocument().putProperty("statusIcon", lbTestMessageService);
137 
139  textBoxChangedListener = new TextBoxChangedListener();
140  textBoxes.add(tbDbHostname);
141  textBoxes.add(tbDbPort);
142  textBoxes.add(tbDbUsername);
143  textBoxes.add(tbDbPassword);
144  textBoxes.add(tbMsgHostname);
145  textBoxes.add(tbMsgPort);
146  textBoxes.add(tbMsgUsername);
147  textBoxes.add(tbMsgPassword);
148  textBoxes.add(tbSolr8Hostname);
149  textBoxes.add(tbSolr8Port);
150  textBoxes.add(tbSolr4Hostname);
151  textBoxes.add(tbSolr4Port);
152  textBoxes.add(tbZkHostname);
153  textBoxes.add(tbZkPort);
154 
155  // as the user enters Solr 8 settings, we fill in the ZK settings with the embedded Solr 8 ZK connection info.
156  tbSolr8Hostname.getDocument().addDocumentListener(new MyDocumentListener());
157 
158  addDocumentListeners(textBoxes, textBoxChangedListener);
159  goodIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/good.png", false));
160  badIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/bad.png", false));
161  enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected());
162  }
163 
170  private static void configureTextPrompts(Collection<TextPrompt> textPrompts) {
171  float alpha = 0.9f; // Mostly opaque
172  for (TextPrompt textPrompt : textPrompts) {
173  textPrompt.setForeground(Color.LIGHT_GRAY);
174  textPrompt.changeAlpha(alpha);
175  }
176  }
177 
184  private static void addDocumentListeners(Collection<JTextField> textFields, TextBoxChangedListener listener) {
185  for (JTextField textField : textFields) {
186  textField.getDocument().addDocumentListener(listener);
187  }
188  }
189 
195  @SuppressWarnings("unchecked")
196  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
197  private void initComponents() {
198 
199  jScrollPane = new javax.swing.JScrollPane();
200  pnOverallPanel = new javax.swing.JPanel();
201  pnDatabaseSettings = new javax.swing.JPanel();
202  tbDbHostname = new javax.swing.JTextField();
203  tbDbPort = new javax.swing.JTextField();
204  tbDbUsername = new javax.swing.JTextField();
205  tbDbPassword = new javax.swing.JPasswordField();
206  lbDatabaseSettings = new javax.swing.JLabel();
207  bnTestDatabase = new javax.swing.JButton();
208  lbTestDatabase = new javax.swing.JLabel();
209  lbTestDbWarning = new javax.swing.JLabel();
210  pnSolrSettings = new javax.swing.JPanel();
211  lbSolr8Settings = new javax.swing.JLabel();
212  tbSolr8Hostname = new javax.swing.JTextField();
213  tbSolr8Port = new javax.swing.JTextField();
214  bnTestSolr8 = new javax.swing.JButton();
215  lbTestSolr8 = new javax.swing.JLabel();
216  lbWarning = new javax.swing.JLabel();
217  tbSolr4Hostname = new javax.swing.JTextField();
218  tbSolr4Port = new javax.swing.JTextField();
219  lbSolr4Settings = new javax.swing.JLabel();
220  lbZkSettings = new javax.swing.JLabel();
221  tbZkHostname = new javax.swing.JTextField();
222  tbZkPort = new javax.swing.JTextField();
223  lbSolrNote1 = new javax.swing.JLabel();
224  lbSolrNote2 = new javax.swing.JLabel();
225  bnTestSolr4 = new javax.swing.JButton();
226  lbTestSolr4 = new javax.swing.JLabel();
227  lbTestZK = new javax.swing.JLabel();
228  bnTestZK = new javax.swing.JButton();
229  pnMessagingSettings = new javax.swing.JPanel();
230  lbMessageServiceSettings = new javax.swing.JLabel();
231  tbMsgHostname = new javax.swing.JTextField();
232  tbMsgUsername = new javax.swing.JTextField();
233  tbMsgPort = new javax.swing.JTextField();
234  tbMsgPassword = new javax.swing.JPasswordField();
235  bnTestMessageService = new javax.swing.JButton();
236  lbTestMessageService = new javax.swing.JLabel();
237  lbTestMessageWarning = new javax.swing.JLabel();
238  cbEnableMultiUser = new javax.swing.JCheckBox();
239  tbOops = new javax.swing.JTextField();
240 
241  pnDatabaseSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
242 
243  tbDbHostname.setFont(tbDbHostname.getFont().deriveFont(tbDbHostname.getFont().getSize()+1f));
244  tbDbHostname.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.text")); // NOI18N
245  tbDbHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText")); // NOI18N
246 
247  tbDbPort.setFont(tbDbPort.getFont().deriveFont(tbDbPort.getFont().getSize()+1f));
248  tbDbPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.text")); // NOI18N
249  tbDbPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText")); // NOI18N
250 
251  tbDbUsername.setFont(tbDbUsername.getFont().deriveFont(tbDbUsername.getFont().getSize()+1f));
252  tbDbUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.text")); // NOI18N
253  tbDbUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText")); // NOI18N
254 
255  tbDbPassword.setFont(tbDbPassword.getFont().deriveFont(tbDbPassword.getFont().getSize()+1f));
256  tbDbPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.text")); // NOI18N
257  tbDbPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText")); // NOI18N
258 
259  lbDatabaseSettings.setFont(lbDatabaseSettings.getFont().deriveFont(lbDatabaseSettings.getFont().getSize()+1f));
260  org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbDatabaseSettings.text")); // NOI18N
261  lbDatabaseSettings.setVerticalAlignment(javax.swing.SwingConstants.TOP);
262 
263  org.openide.awt.Mnemonics.setLocalizedText(bnTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestDatabase.text")); // NOI18N
264  bnTestDatabase.addActionListener(new java.awt.event.ActionListener() {
265  public void actionPerformed(java.awt.event.ActionEvent evt) {
266  bnTestDatabaseActionPerformed(evt);
267  }
268  });
269 
270  org.openide.awt.Mnemonics.setLocalizedText(lbTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestDatabase.text")); // NOI18N
271  lbTestDatabase.setAutoscrolls(true);
272 
273  lbTestDbWarning.setForeground(new java.awt.Color(255, 0, 0));
274  org.openide.awt.Mnemonics.setLocalizedText(lbTestDbWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestDbWarning.text")); // NOI18N
275 
276  javax.swing.GroupLayout pnDatabaseSettingsLayout = new javax.swing.GroupLayout(pnDatabaseSettings);
277  pnDatabaseSettings.setLayout(pnDatabaseSettingsLayout);
278  pnDatabaseSettingsLayout.setHorizontalGroup(
279  pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
280  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
281  .addContainerGap()
282  .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
283  .addComponent(tbDbHostname)
284  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
285  .addComponent(lbDatabaseSettings)
286  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 231, Short.MAX_VALUE)
287  .addComponent(bnTestDatabase)
288  .addGap(18, 18, 18)
289  .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
290  .addComponent(tbDbPort)
291  .addComponent(tbDbUsername)
292  .addComponent(tbDbPassword)
293  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
294  .addComponent(lbTestDbWarning)
295  .addGap(0, 0, Short.MAX_VALUE)))
296  .addContainerGap())
297  );
298  pnDatabaseSettingsLayout.setVerticalGroup(
299  pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
300  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnDatabaseSettingsLayout.createSequentialGroup()
301  .addContainerGap()
302  .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
303  .addComponent(bnTestDatabase)
304  .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
305  .addComponent(lbDatabaseSettings, javax.swing.GroupLayout.Alignment.TRAILING))
306  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
307  .addComponent(tbDbHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
308  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
309  .addComponent(tbDbPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
310  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
311  .addComponent(tbDbUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
312  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
313  .addComponent(tbDbPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
314  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
315  .addComponent(lbTestDbWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
316  .addContainerGap())
317  );
318 
319  pnSolrSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
320 
321  lbSolr8Settings.setFont(lbSolr8Settings.getFont().deriveFont(lbSolr8Settings.getFont().getSize()+1f));
322  org.openide.awt.Mnemonics.setLocalizedText(lbSolr8Settings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolr8Settings.text")); // NOI18N
323 
324  tbSolr8Hostname.setFont(tbSolr8Hostname.getFont().deriveFont(tbSolr8Hostname.getFont().getSize()+1f));
325  tbSolr8Hostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr8Hostname.toolTipText")); // NOI18N
326 
327  tbSolr8Port.setFont(tbSolr8Port.getFont().deriveFont(tbSolr8Port.getFont().getSize()+1f));
328  tbSolr8Port.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr8Port.toolTipText")); // NOI18N
329 
330  org.openide.awt.Mnemonics.setLocalizedText(bnTestSolr8, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestSolr8.text")); // NOI18N
331  bnTestSolr8.addActionListener(new java.awt.event.ActionListener() {
332  public void actionPerformed(java.awt.event.ActionEvent evt) {
333  bnTestSolr8ActionPerformed(evt);
334  }
335  });
336 
337  org.openide.awt.Mnemonics.setLocalizedText(lbTestSolr8, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestSolr8.text")); // NOI18N
338 
339  lbWarning.setForeground(new java.awt.Color(255, 0, 0));
340  org.openide.awt.Mnemonics.setLocalizedText(lbWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbWarning.text")); // NOI18N
341 
342  tbSolr4Hostname.setFont(tbSolr4Hostname.getFont().deriveFont(tbSolr4Hostname.getFont().getSize()+1f));
343  tbSolr4Hostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr4Hostname.toolTipText")); // NOI18N
344 
345  tbSolr4Port.setFont(tbSolr4Port.getFont().deriveFont(tbSolr4Port.getFont().getSize()+1f));
346  tbSolr4Port.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr4Port.toolTipText")); // NOI18N
347 
348  lbSolr4Settings.setFont(lbSolr4Settings.getFont().deriveFont(lbSolr4Settings.getFont().getSize()+1f));
349  org.openide.awt.Mnemonics.setLocalizedText(lbSolr4Settings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolr4Settings.text")); // NOI18N
350 
351  lbZkSettings.setFont(lbZkSettings.getFont().deriveFont(lbZkSettings.getFont().getSize()+1f));
352  org.openide.awt.Mnemonics.setLocalizedText(lbZkSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbZkSettings.text")); // NOI18N
353 
354  tbZkHostname.setFont(tbZkHostname.getFont().deriveFont(tbZkHostname.getFont().getSize()+1f));
355  tbZkHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbZkHostname.toolTipText")); // NOI18N
356 
357  tbZkPort.setFont(tbZkPort.getFont().deriveFont(tbZkPort.getFont().getSize()+1f));
358  tbZkPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbZkPort.toolTipText")); // NOI18N
359 
360  lbSolrNote1.setFont(lbSolrNote1.getFont().deriveFont(lbSolrNote1.getFont().getSize()+1f));
361  lbSolrNote1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N
362  org.openide.awt.Mnemonics.setLocalizedText(lbSolrNote1, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolrNote1.text")); // NOI18N
363 
364  lbSolrNote2.setFont(lbSolrNote2.getFont().deriveFont(lbSolrNote2.getFont().getSize()+1f));
365  org.openide.awt.Mnemonics.setLocalizedText(lbSolrNote2, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolrNote2.text")); // NOI18N
366 
367  org.openide.awt.Mnemonics.setLocalizedText(bnTestSolr4, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestSolr4.text")); // NOI18N
368  bnTestSolr4.addActionListener(new java.awt.event.ActionListener() {
369  public void actionPerformed(java.awt.event.ActionEvent evt) {
370  bnTestSolr4ActionPerformed(evt);
371  }
372  });
373 
374  org.openide.awt.Mnemonics.setLocalizedText(lbTestSolr4, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestSolr4.text")); // NOI18N
375 
376  org.openide.awt.Mnemonics.setLocalizedText(lbTestZK, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestZK.text")); // NOI18N
377 
378  org.openide.awt.Mnemonics.setLocalizedText(bnTestZK, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestZK.text")); // NOI18N
379  bnTestZK.addActionListener(new java.awt.event.ActionListener() {
380  public void actionPerformed(java.awt.event.ActionEvent evt) {
381  bnTestZKActionPerformed(evt);
382  }
383  });
384 
385  javax.swing.GroupLayout pnSolrSettingsLayout = new javax.swing.GroupLayout(pnSolrSettings);
386  pnSolrSettings.setLayout(pnSolrSettingsLayout);
387  pnSolrSettingsLayout.setHorizontalGroup(
388  pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
389  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
390  .addContainerGap()
391  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
392  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
393  .addComponent(lbSolr4Settings)
394  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
395  .addComponent(bnTestSolr4)
396  .addGap(18, 18, 18)
397  .addComponent(lbTestSolr4, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
398  .addComponent(tbSolr8Hostname)
399  .addComponent(tbSolr8Port)
400  .addComponent(tbSolr4Hostname)
401  .addComponent(tbSolr4Port)
402  .addComponent(tbZkHostname)
403  .addComponent(tbZkPort)
404  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
405  .addComponent(lbZkSettings)
406  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 164, Short.MAX_VALUE)
407  .addComponent(bnTestZK)
408  .addGap(18, 18, 18)
409  .addComponent(lbTestZK, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
410  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
411  .addComponent(lbSolr8Settings)
412  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
413  .addComponent(bnTestSolr8)
414  .addGap(18, 18, 18)
415  .addComponent(lbTestSolr8, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
416  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
417  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
418  .addComponent(lbSolrNote1)
419  .addComponent(lbSolrNote2)
420  .addComponent(lbWarning))
421  .addGap(0, 0, Short.MAX_VALUE)))
422  .addContainerGap())
423  );
424  pnSolrSettingsLayout.setVerticalGroup(
425  pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
426  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
427  .addGap(8, 8, 8)
428  .addComponent(lbSolrNote1)
429  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
430  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
431  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
432  .addComponent(lbSolrNote2)
433  .addGap(28, 28, 28)
434  .addComponent(lbSolr8Settings))
435  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
436  .addComponent(lbTestSolr8, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
437  .addGap(5, 5, 5))
438  .addComponent(bnTestSolr8))
439  .addGap(6, 6, 6)
440  .addComponent(tbSolr8Hostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
441  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
442  .addComponent(tbSolr8Port, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
443  .addGap(18, 18, 18)
444  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
445  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
446  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
447  .addComponent(lbSolr4Settings, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
448  .addComponent(bnTestSolr4))
449  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
450  .addComponent(tbSolr4Hostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
451  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
452  .addComponent(tbSolr4Port, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
453  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
454  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
455  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
456  .addComponent(lbZkSettings)
457  .addComponent(bnTestZK))
458  .addComponent(lbTestZK, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
459  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
460  .addComponent(tbZkHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
461  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
462  .addComponent(tbZkPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
463  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
464  .addComponent(lbWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
465  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
466  .addComponent(lbTestSolr4, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
467  .addGap(0, 0, Short.MAX_VALUE)))
468  .addContainerGap())
469  );
470 
471  tbSolr4Port.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolr4Port.toolTipText")); // NOI18N
472 
473  pnMessagingSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
474 
475  lbMessageServiceSettings.setFont(lbMessageServiceSettings.getFont().deriveFont((float)12));
476  org.openide.awt.Mnemonics.setLocalizedText(lbMessageServiceSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbMessageServiceSettings.text")); // NOI18N
477 
478  tbMsgHostname.setFont(tbMsgHostname.getFont().deriveFont(tbMsgHostname.getFont().getSize()+1f));
479  tbMsgHostname.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHostname.text")); // NOI18N
480  tbMsgHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHostname.toolTipText")); // NOI18N
481 
482  tbMsgUsername.setFont(tbMsgUsername.getFont().deriveFont(tbMsgUsername.getFont().getSize()+1f));
483  tbMsgUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.text")); // NOI18N
484  tbMsgUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.toolTipText")); // NOI18N
485 
486  tbMsgPort.setFont(tbMsgPort.getFont().deriveFont(tbMsgPort.getFont().getSize()+1f));
487  tbMsgPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.text")); // NOI18N
488  tbMsgPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.toolTipText")); // NOI18N
489 
490  tbMsgPassword.setFont(tbMsgPassword.getFont().deriveFont(tbMsgPassword.getFont().getSize()+1f));
491  tbMsgPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.text")); // NOI18N
492  tbMsgPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.toolTipText")); // NOI18N
493 
494  org.openide.awt.Mnemonics.setLocalizedText(bnTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestMessageService.text")); // NOI18N
495  bnTestMessageService.addActionListener(new java.awt.event.ActionListener() {
496  public void actionPerformed(java.awt.event.ActionEvent evt) {
497  bnTestMessageServiceActionPerformed(evt);
498  }
499  });
500 
501  org.openide.awt.Mnemonics.setLocalizedText(lbTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestMessageService.text")); // NOI18N
502 
503  lbTestMessageWarning.setForeground(new java.awt.Color(255, 0, 0));
504  org.openide.awt.Mnemonics.setLocalizedText(lbTestMessageWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestMessageWarning.text")); // NOI18N
505 
506  javax.swing.GroupLayout pnMessagingSettingsLayout = new javax.swing.GroupLayout(pnMessagingSettings);
507  pnMessagingSettings.setLayout(pnMessagingSettingsLayout);
508  pnMessagingSettingsLayout.setHorizontalGroup(
509  pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
510  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
511  .addContainerGap()
512  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
513  .addComponent(tbMsgHostname)
514  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
515  .addComponent(lbMessageServiceSettings)
516  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
517  .addComponent(bnTestMessageService)
518  .addGap(18, 18, 18)
519  .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
520  .addComponent(tbMsgPort)
521  .addComponent(tbMsgUsername)
522  .addComponent(tbMsgPassword)
523  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
524  .addComponent(lbTestMessageWarning)
525  .addGap(0, 0, Short.MAX_VALUE)))
526  .addContainerGap())
527  );
528  pnMessagingSettingsLayout.setVerticalGroup(
529  pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
530  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
531  .addContainerGap()
532  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
533  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
534  .addComponent(bnTestMessageService)
535  .addComponent(lbMessageServiceSettings))
536  .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
537  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
538  .addComponent(tbMsgHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
539  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
540  .addComponent(tbMsgPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
541  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
542  .addComponent(tbMsgUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
543  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
544  .addComponent(tbMsgPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
545  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
546  .addComponent(lbTestMessageWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
547  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
548  );
549 
550  org.openide.awt.Mnemonics.setLocalizedText(cbEnableMultiUser, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.cbEnableMultiUser.text")); // NOI18N
551  cbEnableMultiUser.addItemListener(new java.awt.event.ItemListener() {
552  public void itemStateChanged(java.awt.event.ItemEvent evt) {
553  cbEnableMultiUserItemStateChanged(evt);
554  }
555  });
556 
557  tbOops.setEditable(false);
558  tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, tbOops.getFont().getSize()+1));
559  tbOops.setForeground(new java.awt.Color(255, 0, 0));
560  tbOops.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbOops.text")); // NOI18N
561  tbOops.setBorder(null);
562 
563  javax.swing.GroupLayout pnOverallPanelLayout = new javax.swing.GroupLayout(pnOverallPanel);
564  pnOverallPanel.setLayout(pnOverallPanelLayout);
565  pnOverallPanelLayout.setHorizontalGroup(
566  pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
567  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnOverallPanelLayout.createSequentialGroup()
568  .addContainerGap()
569  .addGroup(pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
570  .addGroup(pnOverallPanelLayout.createSequentialGroup()
571  .addComponent(cbEnableMultiUser)
572  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
573  .addComponent(tbOops))
574  .addComponent(pnDatabaseSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
575  .addComponent(pnMessagingSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
576  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
577  .addComponent(pnSolrSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
578  .addGap(39, 39, 39))
579  );
580  pnOverallPanelLayout.setVerticalGroup(
581  pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
582  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnOverallPanelLayout.createSequentialGroup()
583  .addGroup(pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
584  .addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
585  .addComponent(cbEnableMultiUser))
586  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
587  .addGroup(pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
588  .addGroup(pnOverallPanelLayout.createSequentialGroup()
589  .addComponent(pnDatabaseSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
590  .addGap(18, 18, 18)
591  .addComponent(pnMessagingSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
592  .addComponent(pnSolrSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
593  .addContainerGap(234, Short.MAX_VALUE))
594  );
595 
596  jScrollPane.setViewportView(pnOverallPanel);
597 
598  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
599  this.setLayout(layout);
600  layout.setHorizontalGroup(
601  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
602  .addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1250, Short.MAX_VALUE)
603  );
604  layout.setVerticalGroup(
605  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
606  .addGroup(layout.createSequentialGroup()
607  .addContainerGap()
608  .addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 695, Short.MAX_VALUE)
609  .addContainerGap())
610  );
611  }// </editor-fold>//GEN-END:initComponents
612 
619  private static void enableMultiUserComponents(Collection<JTextField> textFields, boolean enabled) {
620  for (JTextField textField : textFields) {
621  textField.setEnabled(enabled);
622  }
623  }
624 
625  private void cbEnableMultiUserItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cbEnableMultiUserItemStateChanged
626  if (!cbEnableMultiUser.isSelected()) {
627  tbOops.setText("");
628  bnTestDatabase.setEnabled(false);
629  lbTestDatabase.setIcon(null);
630  bnTestSolr8.setEnabled(false);
631  lbTestSolr8.setIcon(null);
632  bnTestSolr4.setEnabled(false);
633  lbTestSolr4.setIcon(null);
634  bnTestZK.setEnabled(false);
635  lbTestZK.setIcon(null);
636  bnTestMessageService.setEnabled(false);
637  lbTestMessageService.setIcon(null);
638  lbTestDbWarning.setText("");
639  lbWarning.setText("");
640  lbTestMessageWarning.setText("");
641  }
642  enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected());
643  controller.changed();
644  }//GEN-LAST:event_cbEnableMultiUserItemStateChanged
645 
646  private void bnTestDatabaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestDatabaseActionPerformed
647  lbTestDatabase.setIcon(null);
648  lbTestDatabase.paintImmediately(lbTestDatabase.getVisibleRect());
649  lbTestDbWarning.setText("");
650  lbTestDbWarning.paintImmediately(lbTestDbWarning.getVisibleRect());
651  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
652  try {
653  CaseDbConnectionInfo info = new CaseDbConnectionInfo(
654  this.tbDbHostname.getText().trim(),
655  this.tbDbPort.getText().trim(),
656  this.tbDbUsername.getText().trim(),
657  new String(this.tbDbPassword.getPassword()),
658  DbType.POSTGRESQL);
659 
660  SleuthkitCase.tryConnect(info);
661  lbTestDatabase.setIcon(goodIcon);
662  lbTestDbWarning.setText("");
663  } catch (TskCoreException ex) {
664  lbTestDatabase.setIcon(badIcon);
665  lbTestDbWarning.setText(ex.getMessage());
666  } finally {
667  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
668  }
669  }//GEN-LAST:event_bnTestDatabaseActionPerformed
670 
671  private void bnTestMessageServiceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestMessageServiceActionPerformed
672  lbTestMessageService.setIcon(null);
673  lbTestMessageService.paintImmediately(lbTestMessageService.getVisibleRect());
674  lbTestMessageWarning.setText("");
675  lbTestMessageWarning.paintImmediately(lbTestMessageWarning.getVisibleRect());
676  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
677 
678  int port;
679  try {
680  port = Integer.parseInt(this.tbMsgPort.getText().trim());
681  } catch (NumberFormatException ex) {
682  lbTestMessageService.setIcon(badIcon);
683  lbTestMessageWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
684  return;
685  }
686 
688  this.tbMsgHostname.getText().trim(),
689  port,
690  this.tbMsgUsername.getText().trim(),
691  new String(this.tbMsgPassword.getPassword()));
692  try {
693  info.tryConnect();
694  lbTestMessageService.setIcon(goodIcon);
695  lbTestMessageWarning.setText("");
696  } catch (MessageServiceException ex) {
697  lbTestMessageService.setIcon(badIcon);
698  lbTestMessageWarning.setText(ex.getMessage());
699  } finally {
700  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
701  }
702  }//GEN-LAST:event_bnTestMessageServiceActionPerformed
703 
704  private void bnTestSolr8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestSolr8ActionPerformed
705  lbTestSolr8.setIcon(null);
706  lbTestSolr8.paintImmediately(lbTestSolr8.getVisibleRect());
707  lbWarning.setText("");
708  lbWarning.paintImmediately(lbWarning.getVisibleRect());
709  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
710 
711  KeywordSearchService kwsService = Lookup.getDefault().lookup(KeywordSearchService.class);
712  try {
713  if (kwsService != null) {
714  // test Solr 8 connectivity
715  if (tbSolr8Port.getText().trim().isEmpty() || tbSolr8Hostname.getText().trim().isEmpty()) {
716  lbTestSolr8.setIcon(badIcon);
717  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.Solr8ConnectionInfoMissing.error"));
718  return;
719  }
720  int port = Integer.parseInt(tbSolr8Port.getText().trim());
721  kwsService.tryConnect(tbSolr8Hostname.getText().trim(), port);
722  lbTestSolr8.setIcon(goodIcon);
723  lbWarning.setText("");
724  } else {
725  lbTestSolr8.setIcon(badIcon);
726  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.KeywordSearchNull"));
727  }
728  } catch (NumberFormatException ex) {
729  lbTestSolr8.setIcon(badIcon);
730  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
731  } catch (KeywordSearchServiceException ex) {
732  lbTestSolr8.setIcon(badIcon);
733  lbWarning.setText(ex.getMessage());
734  } finally {
735  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
736  }
737  }//GEN-LAST:event_bnTestSolr8ActionPerformed
738 
739  private void bnTestSolr4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestSolr4ActionPerformed
740  lbTestSolr4.setIcon(null);
741  lbTestSolr4.paintImmediately(lbTestSolr4.getVisibleRect());
742  lbWarning.setText("");
743  lbWarning.paintImmediately(lbWarning.getVisibleRect());
744  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
745 
746  KeywordSearchService kwsService = Lookup.getDefault().lookup(KeywordSearchService.class);
747  try {
748  if (kwsService != null) {
749  // test Solr 4 conenctivity
750  if (tbSolr4Port.getText().trim().isEmpty() || tbSolr4Hostname.getText().trim().isEmpty()) {
751  lbTestSolr4.setIcon(badIcon);
752  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.Solr4ConnectionInfoMissing.error"));
753  return;
754  }
755  int port = Integer.parseInt(tbSolr4Port.getText().trim());
756  kwsService.tryConnect(tbSolr4Hostname.getText().trim(), port);
757  lbTestSolr4.setIcon(goodIcon);
758  lbWarning.setText("");
759  } else {
760  lbTestSolr4.setIcon(badIcon);
761  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.KeywordSearchNull"));
762  }
763  } catch (NumberFormatException ex) {
764  lbTestSolr4.setIcon(badIcon);
765  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
766  } catch (KeywordSearchServiceException ex) {
767  lbTestSolr4.setIcon(badIcon);
768  lbWarning.setText(ex.getMessage());
769  } finally {
770  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
771  }
772  }//GEN-LAST:event_bnTestSolr4ActionPerformed
773 
774  private void bnTestZKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestZKActionPerformed
775  lbTestZK.setIcon(null);
776  lbTestZK.paintImmediately(lbTestZK.getVisibleRect());
777  lbWarning.setText("");
778  lbWarning.paintImmediately(lbWarning.getVisibleRect());
779  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
780 
781  try {
782  // test ZooKeeper connectivity (ZK settings are mandatory)
783  if (tbZkPort.getText().trim().isEmpty() || tbZkHostname.getText().trim().isEmpty()) {
784  lbTestZK.setIcon(badIcon);
785  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.UnableToConnectToZK"));
786  return;
787  }
788 
789  if (false == CoordinationServiceUtils.isZooKeeperAccessible(tbZkHostname.getText().trim(), tbZkPort.getText().trim())) {
790  lbTestZK.setIcon(badIcon);
791  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.UnableToConnectToZK"));
792  return;
793  }
794 
795  lbTestZK.setIcon(goodIcon);
796  lbWarning.setText("");
797  } catch (NumberFormatException ex) {
798  lbTestZK.setIcon(badIcon);
799  lbWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
800  } catch (InterruptedException | IOException ex) {
801  // ZK exceptions
802  lbTestZK.setIcon(badIcon);
803  lbWarning.setText(ex.getMessage());
804  } finally {
805  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
806  }
807  }//GEN-LAST:event_bnTestZKActionPerformed
808 
809  void load() {
810  lbTestDatabase.setIcon(null);
811  lbTestSolr8.setIcon(null);
812  lbTestSolr4.setIcon(null);
813  lbTestZK.setIcon(null);
814  lbTestMessageService.setIcon(null);
815  lbTestDbWarning.setText("");
816  lbWarning.setText("");
817  lbTestMessageWarning.setText("");
818 
819  try {
820  CaseDbConnectionInfo dbInfo = UserPreferences.getDatabaseConnectionInfo();
821  tbDbHostname.setText(dbInfo.getHost().trim());
822  tbDbPort.setText(dbInfo.getPort().trim());
823  tbDbUsername.setText(dbInfo.getUserName().trim());
824  tbDbPassword.setText(dbInfo.getPassword());
825  } catch (UserPreferencesException ex) {
826  logger.log(Level.SEVERE, "Error accessing case database connection info", ex); //NON-NLS
827  }
828 
829  try {
830  MessageServiceConnectionInfo msgServiceInfo = UserPreferences.getMessageServiceConnectionInfo();
831  tbMsgHostname.setText(msgServiceInfo.getHost().trim());
832  tbMsgPort.setText(Integer.toString(msgServiceInfo.getPort()));
833  tbMsgUsername.setText(msgServiceInfo.getUserName().trim());
834  tbMsgPassword.setText(msgServiceInfo.getPassword());
835  } catch (UserPreferencesException ex) {
836  logger.log(Level.SEVERE, "Error accessing case database connection info", ex); //NON-NLS
837  }
838 
839  populateSolrAndZkSettings();
840 
841  bnTestDatabase.setEnabled(false);
842  bnTestSolr8.setEnabled(false);
843  bnTestSolr4.setEnabled(false);
844  bnTestZK.setEnabled(false);
845  bnTestMessageService.setEnabled(false);
846 
847  cbEnableMultiUser.setSelected(UserPreferences.getIsMultiUserModeEnabled());
848  this.valid(); // trigger validation to enable buttons based on current settings
849  }
850 
851  private void populateSolrAndZkSettings() {
852 
853  String indexingServerHost = UserPreferences.getIndexingServerHost().trim();
854  if (!indexingServerHost.isEmpty()) {
855  tbSolr8Hostname.setText(indexingServerHost);
856  }
857  String indexingServerPort = UserPreferences.getIndexingServerPort().trim();
858  if (portNumberIsValid(indexingServerPort)) {
859  tbSolr8Port.setText(indexingServerPort);
860  }
861 
862  String solr4ServerHost = UserPreferences.getSolr4ServerHost().trim();
863  if (!solr4ServerHost.isEmpty()) {
864  tbSolr4Hostname.setText(solr4ServerHost);
865  }
866  String solr4ServerPort = UserPreferences.getSolr4ServerPort().trim();
867  if (portNumberIsValid(solr4ServerPort)) {
868  tbSolr4Port.setText(solr4ServerPort);
869  }
870 
871  // if there are existing valid ZK settings, use those
872  String zkServerPort = UserPreferences.getZkServerPort().trim();
873  if (portNumberIsValid(zkServerPort)) {
874  tbZkPort.setText(zkServerPort); // gets default ZK port, which is Solr port number + 1000
875  }
876  String zkServerHost = UserPreferences.getZkServerHost().trim();
877  if (!zkServerHost.isEmpty()) {
878  tbZkHostname.setText(zkServerHost);
879  return;
880  }
881 
882  // If there are no previous Solr 4 settings, use Solr 8 settings
883  // to fill in the ZK settings with the embedded Solr 8 ZK connection info.
884  if (solr4ServerHost.isEmpty() && !indexingServerHost.isEmpty()) {
885  tbZkHostname.setText(indexingServerHost);
886  tbZkPort.setText(zkServerPort); // gets default ZK port, which is Solr port number + 1000
887  return;
888  }
889 
890  // If there are existing Solr 4 settings and no Solr 8 settings,
891  // pre-populate the ZK settings with the Solr 4 embedded ZK settings.
892  if (!solr4ServerHost.isEmpty() && indexingServerHost.isEmpty()) {
893  tbZkHostname.setText(solr4ServerHost);
894  tbZkPort.setText(zkServerPort); // gets default ZK port, which is Solr port number + 1000
895  return;
896  }
897  }
898 
905  private boolean databaseFieldsArePopulated() {
906  return !tbDbHostname.getText().trim().isEmpty()
907  && !tbDbPort.getText().trim().isEmpty()
908  && !tbDbUsername.getText().trim().isEmpty()
909  && tbDbPassword.getPassword().length != 0;
910  }
911 
918  private boolean solr4FieldsArePopulated() {
919 
920  // check if Solr 4 settings are set
921  if (!tbSolr4Hostname.getText().trim().isEmpty()
922  && !tbSolr4Port.getText().trim().isEmpty()) {
923  return true;
924  } else {
925  return false;
926  }
927  }
928 
935  private boolean solr8FieldsArePopulated() {
936 
937  // check if Solr 8 settings are set
938  if (!tbSolr8Hostname.getText().trim().isEmpty()
939  && !tbSolr8Port.getText().trim().isEmpty()) {
940  return true;
941  } else {
942  return false;
943  }
944  }
945 
952  private boolean ZooKeeperFieldsArePopulated() {
953  // check if ZK settings are set
954  return (!tbZkHostname.getText().trim().isEmpty()
955  && !tbZkPort.getText().trim().isEmpty());
956  }
957 
965 
966  if ((tbMsgHostname.getText().trim().isEmpty())
967  || (tbMsgPort.getText().trim().isEmpty())) {
968  return false;
969  }
970 
971  // user name and pw are optional, but make sure they are both set or both empty
972  boolean isUserSet = (tbMsgUsername.getText().trim().isEmpty() == false);
973  boolean isPwSet = (tbMsgPassword.getPassword().length != 0);
974  return (isUserSet == isPwSet);
975  }
976 
977  void store() {
978  boolean prevSelected = UserPreferences.getIsMultiUserModeEnabled();
979  CaseDbConnectionInfo prevConn = null;
980  try {
982  } catch (UserPreferencesException ex) {
983  logger.log(Level.SEVERE, "There was an error while fetching previous connection settings while trying to save", ex); //NON-NLS
984  }
985 
986  boolean multiUserCasesEnabled = cbEnableMultiUser.isSelected();
987  UserPreferences.setIsMultiUserModeEnabled(multiUserCasesEnabled);
988 
989  CaseDbConnectionInfo info = null;
990 
991  if (multiUserCasesEnabled == true) {
992 
993  // Check if aplication restart is required.
994  boolean needsRestart = false;
995  // don't check if entring multi user data for the first time
996  if (prevSelected == true) {
997  needsRestart = isRestartRequired();
998  }
999 
1000  /*
1001  * Currently only supporting multi-user cases with PostgreSQL case
1002  * databases.
1003  */
1004  DbType dbType = DbType.POSTGRESQL;
1005  info = new CaseDbConnectionInfo(
1006  tbDbHostname.getText().trim(),
1007  tbDbPort.getText().trim(),
1008  tbDbUsername.getText().trim(),
1009  new String(tbDbPassword.getPassword()),
1010  dbType);
1011  try {
1012  UserPreferences.setDatabaseConnectionInfo(info);
1013  } catch (UserPreferencesException ex) {
1014  logger.log(Level.SEVERE, "Error saving case database connection info", ex); //NON-NLS
1015  }
1016 
1017  int msgServicePort = 0;
1018  try {
1019  msgServicePort = Integer.parseInt(this.tbMsgPort.getText().trim());
1020  } catch (NumberFormatException ex) {
1021  logger.log(Level.SEVERE, "Could not parse messaging service port setting", ex);
1022  }
1023 
1024  MessageServiceConnectionInfo msgServiceInfo = new MessageServiceConnectionInfo(
1025  tbMsgHostname.getText().trim(),
1026  msgServicePort,
1027  tbMsgUsername.getText().trim(),
1028  new String(tbMsgPassword.getPassword()));
1029 
1030  try {
1031  UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo);
1032  } catch (UserPreferencesException ex) {
1033  logger.log(Level.SEVERE, "Error saving messaging service connection info", ex); //NON-NLS
1034  }
1035 
1036  UserPreferences.setIndexingServerHost(tbSolr8Hostname.getText().trim());
1037  String solr8port = tbSolr8Port.getText().trim();
1038  if (!solr8port.isEmpty()) {
1039  UserPreferences.setIndexingServerPort(Integer.parseInt(solr8port));
1040  }
1041  UserPreferences.setSolr4ServerHost(tbSolr4Hostname.getText().trim());
1042  UserPreferences.setSolr4ServerPort(tbSolr4Port.getText().trim());
1043  UserPreferences.setZkServerHost(tbZkHostname.getText().trim());
1044  UserPreferences.setZkServerPort(tbZkPort.getText().trim());
1045 
1046  if (needsRestart) {
1047  SwingUtilities.invokeLater(() -> {
1048  JOptionPane.showMessageDialog(this,
1049  NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.MustRestart"),
1050  NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.restartRequiredLabel.text"),
1051  JOptionPane.WARNING_MESSAGE);
1052  });
1053  }
1054  }
1055 
1056  // trigger changes to whether or not user can use multi user settings for central repository
1057  if (prevSelected != multiUserCasesEnabled || !areCaseDbConnectionEqual(prevConn, info)) {
1058  GlobalSettingsPanel.onMultiUserChange(this, prevSelected, multiUserCasesEnabled);
1059  }
1060  }
1061 
1062  private boolean isRestartRequired() {
1063  // if ZK was previously configured
1064  if (!UserPreferences.getZkServerHost().isEmpty()) {
1065  // Restart is required any time ZK info has changed
1066  if (!(tbZkHostname.getText().trim().equalsIgnoreCase(UserPreferences.getZkServerHost()))
1067  || !(tbZkPort.getText().trim().equals(UserPreferences.getZkServerPort()))) {
1068  return true;
1069  }
1070  }
1071  return false;
1072  }
1073 
1074  private static boolean arePropsEqual(Object a, Object b) {
1075  if (a == null || b == null) {
1076  return (a == null && b == null);
1077  } else {
1078  return a.equals(b);
1079  }
1080  }
1081 
1082  private static boolean areCaseDbConnectionEqual(CaseDbConnectionInfo a, CaseDbConnectionInfo b) {
1083  if (a == null || b == null) {
1084  return (a == null && b == null);
1085  }
1086 
1087  return arePropsEqual(a.getDbType(), b.getDbType())
1088  && arePropsEqual(a.getHost(), b.getHost())
1089  && arePropsEqual(a.getPassword(), b.getPassword())
1090  && arePropsEqual(a.getPort(), b.getPort())
1091  && arePropsEqual(a.getUserName(), b.getUserName());
1092  }
1093 
1099  boolean valid() {
1100  tbOops.setText("");
1101 
1102  if (cbEnableMultiUser.isSelected()) {
1103  return checkFieldsAndEnableButtons()
1104  && databaseSettingsAreValid()
1105  && indexingServerSettingsAreValid()
1106  && messageServiceSettingsAreValid();
1107  } else {
1108  return true;
1109  }
1110  }
1111 
1118  boolean checkFieldsAndEnableButtons() {
1119  boolean result = true;
1120 
1121  boolean dbPopulated = databaseFieldsArePopulated();
1122  boolean solr4Populated = solr4FieldsArePopulated();
1123  boolean solr8Populated = solr8FieldsArePopulated();
1124  boolean zkPopulated = ZooKeeperFieldsArePopulated();
1125  boolean messageServicePopulated = messageServiceFieldsArePopulated();
1126 
1127  // PostgreSQL Database
1128  bnTestDatabase.setEnabled(dbPopulated);
1129 
1130  // Solr Indexing
1131  bnTestSolr8.setEnabled(solr8Populated);
1132  bnTestSolr4.setEnabled(solr4Populated);
1133  bnTestZK.setEnabled(zkPopulated);
1134 
1135  // ActiveMQ Messaging
1136  bnTestMessageService.setEnabled(messageServicePopulated);
1137 
1138  if (dbPopulated && messageServicePopulated && zkPopulated && (solr8Populated || solr4Populated)) {
1139  result = true;
1140  } else {
1141  // We don't even have everything filled out
1142  result = false;
1143  tbOops.setText(INCOMPLETE_SETTINGS_MSG);
1144  }
1145  return result;
1146  }
1147 
1153  boolean databaseSettingsAreValid() {
1154  if (portNumberIsValid(tbDbPort.getText().trim())) {
1155  return true;
1156  } else {
1157  tbOops.setText(INVALID_DB_PORT_MSG);
1158  return false;
1159  }
1160  }
1161 
1167  boolean messageServiceSettingsAreValid() {
1168  if (!portNumberIsValid(tbMsgPort.getText().trim())) {
1169  tbOops.setText(INVALID_MESSAGE_SERVICE_PORT_MSG);
1170  return false;
1171  }
1172 
1173  return true;
1174  }
1175 
1181  boolean indexingServerSettingsAreValid() {
1182 
1183  String solr8Port = tbSolr8Port.getText().trim();
1184  if (!solr8Port.isEmpty() && !portNumberIsValid(solr8Port)) {
1185  // if the port is specified, it has to be valid
1186  tbOops.setText(INVALID_INDEXING_SERVER_PORT_MSG);
1187  return false;
1188  }
1189 
1190  String solr4Port = tbSolr4Port.getText().trim();
1191  if (!solr4Port.isEmpty() && !portNumberIsValid(solr4Port)) {
1192  // if the port is specified, it has to be valid
1193  tbOops.setText(INVALID_SOLR4_SERVER_PORT_MSG);
1194  return false;
1195  }
1196 
1197  // either Solr 8 or/and Solr 4 seetings must be specified
1198  boolean solrConfigured = false;
1199 
1200  // check if Solr 8 settings are set
1201  if (!tbSolr8Hostname.getText().trim().isEmpty()
1202  && !tbSolr8Port.getText().trim().isEmpty()) {
1203  solrConfigured = true;
1204  }
1205 
1206  // check if Solr 4 settings are set
1207  if (!tbSolr4Hostname.getText().trim().isEmpty()
1208  && !tbSolr4Port.getText().trim().isEmpty()) {
1209  solrConfigured = true;
1210  }
1211 
1212  if (!solrConfigured) {
1213  tbOops.setText(SOLR_SERVER_NOT_CONFIGURED_MSG);
1214  return false;
1215  }
1216 
1217  // ZK settings are mandatory
1218  if (tbZkHostname.getText().trim().isEmpty()) {
1219  tbOops.setText(INVALID_ZK_SERVER_HOST_MSG);
1220  return false;
1221  }
1222 
1223  // ZK settings are mandatory
1224  String zkPort = tbZkPort.getText().trim();
1225  if (zkPort.isEmpty() || !portNumberIsValid(zkPort)) {
1226  // if the port is specified, it has to be valid
1227  tbOops.setText(INVALID_ZK_SERVER_PORT_MSG);
1228  return false;
1229  }
1230 
1231  return true;
1232  }
1233 
1242  private static boolean portNumberIsValid(String portNumber) {
1243  try {
1244  int value = Integer.parseInt(portNumber);
1245  if (value < 0 || value > 65535) { // invalid port numbers
1246  return false;
1247  }
1248  } catch (NumberFormatException detailsNotImportant) {
1249  return false;
1250  }
1251  return true;
1252  }
1253 
1254  // Variables declaration - do not modify//GEN-BEGIN:variables
1255  private javax.swing.JButton bnTestDatabase;
1256  private javax.swing.JButton bnTestMessageService;
1257  private javax.swing.JButton bnTestSolr4;
1258  private javax.swing.JButton bnTestSolr8;
1259  private javax.swing.JButton bnTestZK;
1260  private javax.swing.JCheckBox cbEnableMultiUser;
1261  private javax.swing.JScrollPane jScrollPane;
1262  private javax.swing.JLabel lbDatabaseSettings;
1263  private javax.swing.JLabel lbMessageServiceSettings;
1264  private javax.swing.JLabel lbSolr4Settings;
1265  private javax.swing.JLabel lbSolr8Settings;
1266  private javax.swing.JLabel lbSolrNote1;
1267  private javax.swing.JLabel lbSolrNote2;
1268  private javax.swing.JLabel lbTestDatabase;
1269  private javax.swing.JLabel lbTestDbWarning;
1270  private javax.swing.JLabel lbTestMessageService;
1271  private javax.swing.JLabel lbTestMessageWarning;
1272  private javax.swing.JLabel lbTestSolr4;
1273  private javax.swing.JLabel lbTestSolr8;
1274  private javax.swing.JLabel lbTestZK;
1275  private javax.swing.JLabel lbWarning;
1276  private javax.swing.JLabel lbZkSettings;
1277  private javax.swing.JPanel pnDatabaseSettings;
1278  private javax.swing.JPanel pnMessagingSettings;
1279  private javax.swing.JPanel pnOverallPanel;
1280  private javax.swing.JPanel pnSolrSettings;
1281  private javax.swing.JTextField tbDbHostname;
1282  private javax.swing.JPasswordField tbDbPassword;
1283  private javax.swing.JTextField tbDbPort;
1284  private javax.swing.JTextField tbDbUsername;
1285  private javax.swing.JTextField tbMsgHostname;
1286  private javax.swing.JPasswordField tbMsgPassword;
1287  private javax.swing.JTextField tbMsgPort;
1288  private javax.swing.JTextField tbMsgUsername;
1289  private javax.swing.JTextField tbOops;
1290  private javax.swing.JTextField tbSolr4Hostname;
1291  private javax.swing.JTextField tbSolr4Port;
1292  private javax.swing.JTextField tbSolr8Hostname;
1293  private javax.swing.JTextField tbSolr8Port;
1294  private javax.swing.JTextField tbZkHostname;
1295  private javax.swing.JTextField tbZkPort;
1296  // End of variables declaration//GEN-END:variables
1297 
1302  class TextBoxChangedListener implements DocumentListener {
1303 
1304  @Override
1305  public void changedUpdate(DocumentEvent e) {
1306  Object statusIcon = e.getDocument().getProperty("statusIcon");
1307  if (statusIcon != null) {
1308  ((javax.swing.JLabel) statusIcon).setIcon(null);
1309  }
1310  controller.changed();
1311  }
1312 
1313  @Override
1314  public void insertUpdate(DocumentEvent e) {
1315  Object statusIcon = e.getDocument().getProperty("statusIcon");
1316  if (statusIcon != null) {
1317  ((javax.swing.JLabel) statusIcon).setIcon(null);
1318  }
1319  controller.changed();
1320  }
1321 
1322  @Override
1323  public void removeUpdate(DocumentEvent e) {
1324  Object statusIcon = e.getDocument().getProperty("statusIcon");
1325  if (statusIcon != null) {
1326  ((javax.swing.JLabel) statusIcon).setIcon(null);
1327  }
1328  controller.changed();
1329  }
1330  }
1331 
1332  private class MyDocumentListener implements DocumentListener {
1333 
1334  @Override
1335  public void changedUpdate(DocumentEvent e) {
1336  tbZkHostname.setText(tbSolr8Hostname.getText().trim());
1337  }
1338 
1339  @Override
1340  public void removeUpdate(DocumentEvent e) {
1341  tbZkHostname.setText(tbSolr8Hostname.getText().trim());
1342  }
1343 
1344  @Override
1345  public void insertUpdate(DocumentEvent e) {
1346  tbZkHostname.setText(tbSolr8Hostname.getText().trim());
1347  }
1348  };
1349 }
static void configureTextPrompts(Collection< TextPrompt > textPrompts)
static boolean areCaseDbConnectionEqual(CaseDbConnectionInfo a, CaseDbConnectionInfo b)
static CaseDbConnectionInfo getDatabaseConnectionInfo()
MultiUserSettingsPanel(MultiUserSettingsPanelController theController)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124
static void enableMultiUserComponents(Collection< JTextField > textFields, boolean enabled)
void bnTestMessageServiceActionPerformed(java.awt.event.ActionEvent evt)
static void addDocumentListeners(Collection< JTextField > textFields, TextBoxChangedListener listener)

Copyright © 2012-2021 Basis Technology. Generated on: Tue Jan 19 2021
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.