Autopsy  4.12.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;
33 import java.awt.Cursor;
34 import java.util.logging.Level;
35 import javax.swing.ImageIcon;
36 import org.openide.util.ImageUtilities;
37 import org.openide.util.Lookup;
43 import org.sleuthkit.datamodel.SleuthkitCase;
44 import org.sleuthkit.datamodel.TskCoreException;
45 
49 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
50 public final class MultiUserSettingsPanel extends javax.swing.JPanel {
51 
52  private static final String HOST_NAME_OR_IP_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText");
53  private static final String PORT_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText");
54  private static final String USER_NAME_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText");
55  private static final String PASSWORD_PROMPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText");
56  private static final String USER_NAME_PROMPT_OPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.toolTipText");
57  private static final String PASSWORD_PROMPT_OPT = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.toolTipText");
58  private static final String INCOMPLETE_SETTINGS_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.incomplete");
59  private static final String INVALID_DB_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidDatabasePort");
60  private static final String INVALID_MESSAGE_SERVICE_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidMessageServicePort");
61  private static final String INVALID_INDEXING_SERVER_PORT_MSG = NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.validationErrMsg.invalidIndexingServerPort");
62  private static final long serialVersionUID = 1L;
64  private final Collection<JTextField> textBoxes = new ArrayList<>();
65  private final TextBoxChangedListener textBoxChangedListener;
66  private static final Logger logger = Logger.getLogger(MultiUserSettingsPanel.class.getName());
67  private final ImageIcon goodIcon;
68  private final ImageIcon badIcon;
69  private static final boolean isWindowsOS = PlatformUtil.isWindowsOS();
70 
77  initComponents();
78  controller = theController;
79  setSize(555, 600);
80 
84  Collection<TextPrompt> textPrompts = new ArrayList<>();
85  textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbDbHostname));
86  textPrompts.add(new TextPrompt(PORT_PROMPT, tbDbPort));
87  textPrompts.add(new TextPrompt(USER_NAME_PROMPT, tbDbUsername));
88  textPrompts.add(new TextPrompt(PASSWORD_PROMPT, tbDbPassword));
89  textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbMsgHostname));
90  textPrompts.add(new TextPrompt(PORT_PROMPT, tbMsgPort));
91  textPrompts.add(new TextPrompt(USER_NAME_PROMPT_OPT, tbMsgUsername));
92  textPrompts.add(new TextPrompt(PASSWORD_PROMPT_OPT, tbMsgPassword));
93  textPrompts.add(new TextPrompt(HOST_NAME_OR_IP_PROMPT, tbSolrHostname));
94  textPrompts.add(new TextPrompt(PORT_PROMPT, tbSolrPort));
95  configureTextPrompts(textPrompts);
96 
97  /*
98  * Set each textbox with a "statusIcon" property enabling the
99  * DocumentListeners to know which icon to erase when changes are made
100  */
101  tbDbHostname.getDocument().putProperty("statusIcon", lbTestDatabase);
102  tbDbPort.getDocument().putProperty("statusIcon", lbTestDatabase);
103  tbDbUsername.getDocument().putProperty("statusIcon", lbTestDatabase);
104  tbDbPassword.getDocument().putProperty("statusIcon", lbTestDatabase);
105 
106  tbSolrHostname.getDocument().putProperty("statusIcon", lbTestSolr);
107  tbSolrPort.getDocument().putProperty("statusIcon", lbTestSolr);
108 
109  tbMsgHostname.getDocument().putProperty("statusIcon", lbTestMessageService);
110  tbMsgPort.getDocument().putProperty("statusIcon", lbTestMessageService);
111  tbMsgUsername.getDocument().putProperty("statusIcon", lbTestMessageService);
112  tbMsgPassword.getDocument().putProperty("statusIcon", lbTestMessageService);
113 
115  textBoxChangedListener = new TextBoxChangedListener();
116  textBoxes.add(tbDbHostname);
117  textBoxes.add(tbDbPort);
118  textBoxes.add(tbDbUsername);
119  textBoxes.add(tbDbPassword);
120  textBoxes.add(tbMsgHostname);
121  textBoxes.add(tbMsgPort);
122  textBoxes.add(tbMsgUsername);
123  textBoxes.add(tbMsgPassword);
124  textBoxes.add(tbSolrHostname);
125  textBoxes.add(tbSolrPort);
126 
127  addDocumentListeners(textBoxes, textBoxChangedListener);
128  goodIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/good.png", false));
129  badIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/bad.png", false));
130  enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected());
131  }
132 
139  private static void configureTextPrompts(Collection<TextPrompt> textPrompts) {
140  float alpha = 0.9f; // Mostly opaque
141  for (TextPrompt textPrompt : textPrompts) {
142  textPrompt.setForeground(Color.LIGHT_GRAY);
143  textPrompt.changeAlpha(alpha);
144  }
145  }
146 
153  private static void addDocumentListeners(Collection<JTextField> textFields, TextBoxChangedListener listener) {
154  for (JTextField textField : textFields) {
155  textField.getDocument().addDocumentListener(listener);
156  }
157  }
158 
164  @SuppressWarnings("unchecked")
165  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
166  private void initComponents() {
167 
168  jScrollPane = new javax.swing.JScrollPane();
169  pnOverallPanel = new javax.swing.JPanel();
170  pnDatabaseSettings = new javax.swing.JPanel();
171  tbDbHostname = new javax.swing.JTextField();
172  tbDbPort = new javax.swing.JTextField();
173  tbDbUsername = new javax.swing.JTextField();
174  tbDbPassword = new javax.swing.JPasswordField();
175  lbDatabaseSettings = new javax.swing.JLabel();
176  bnTestDatabase = new javax.swing.JButton();
177  lbTestDatabase = new javax.swing.JLabel();
178  lbTestDbWarning = new javax.swing.JLabel();
179  pnSolrSettings = new javax.swing.JPanel();
180  lbSolrSettings = new javax.swing.JLabel();
181  tbSolrHostname = new javax.swing.JTextField();
182  tbSolrPort = new javax.swing.JTextField();
183  bnTestSolr = new javax.swing.JButton();
184  lbTestSolr = new javax.swing.JLabel();
185  lbTestSolrWarning = new javax.swing.JLabel();
186  pnMessagingSettings = new javax.swing.JPanel();
187  lbMessageServiceSettings = new javax.swing.JLabel();
188  tbMsgHostname = new javax.swing.JTextField();
189  tbMsgUsername = new javax.swing.JTextField();
190  tbMsgPort = new javax.swing.JTextField();
191  tbMsgPassword = new javax.swing.JPasswordField();
192  bnTestMessageService = new javax.swing.JButton();
193  lbTestMessageService = new javax.swing.JLabel();
194  lbTestMessageWarning = new javax.swing.JLabel();
195  cbEnableMultiUser = new javax.swing.JCheckBox();
196  tbOops = new javax.swing.JTextField();
197 
198  pnDatabaseSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
199 
200  tbDbHostname.setFont(tbDbHostname.getFont().deriveFont(tbDbHostname.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
201  tbDbHostname.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.text")); // NOI18N
202  tbDbHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbHostname.toolTipText")); // NOI18N
203 
204  tbDbPort.setFont(tbDbPort.getFont().deriveFont(tbDbPort.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
205  tbDbPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.text")); // NOI18N
206  tbDbPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPort.toolTipText")); // NOI18N
207 
208  tbDbUsername.setFont(tbDbUsername.getFont().deriveFont(tbDbUsername.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
209  tbDbUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.text")); // NOI18N
210  tbDbUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbUsername.toolTipText")); // NOI18N
211 
212  tbDbPassword.setFont(tbDbPassword.getFont().deriveFont(tbDbPassword.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
213  tbDbPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.text")); // NOI18N
214  tbDbPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbDbPassword.toolTipText")); // NOI18N
215 
216  lbDatabaseSettings.setFont(lbDatabaseSettings.getFont().deriveFont(lbDatabaseSettings.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
217  org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbDatabaseSettings.text")); // NOI18N
218  lbDatabaseSettings.setVerticalAlignment(javax.swing.SwingConstants.TOP);
219 
220  bnTestDatabase.setFont(bnTestDatabase.getFont().deriveFont(bnTestDatabase.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
221  org.openide.awt.Mnemonics.setLocalizedText(bnTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestDatabase.text")); // NOI18N
222  bnTestDatabase.addActionListener(new java.awt.event.ActionListener() {
223  public void actionPerformed(java.awt.event.ActionEvent evt) {
224  bnTestDatabaseActionPerformed(evt);
225  }
226  });
227 
228  org.openide.awt.Mnemonics.setLocalizedText(lbTestDatabase, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestDatabase.text")); // NOI18N
229  lbTestDatabase.setAutoscrolls(true);
230 
231  lbTestDbWarning.setForeground(new java.awt.Color(255, 0, 0));
232  org.openide.awt.Mnemonics.setLocalizedText(lbTestDbWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestDbWarning.text")); // NOI18N
233 
234  javax.swing.GroupLayout pnDatabaseSettingsLayout = new javax.swing.GroupLayout(pnDatabaseSettings);
235  pnDatabaseSettings.setLayout(pnDatabaseSettingsLayout);
236  pnDatabaseSettingsLayout.setHorizontalGroup(
237  pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
238  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
239  .addContainerGap()
240  .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
241  .addComponent(tbDbHostname)
242  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
243  .addComponent(lbDatabaseSettings)
244  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
245  .addComponent(bnTestDatabase)
246  .addGap(18, 18, 18)
247  .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
248  .addComponent(tbDbPort)
249  .addComponent(tbDbUsername)
250  .addComponent(tbDbPassword)
251  .addGroup(pnDatabaseSettingsLayout.createSequentialGroup()
252  .addComponent(lbTestDbWarning)
253  .addGap(0, 0, Short.MAX_VALUE)))
254  .addContainerGap())
255  );
256  pnDatabaseSettingsLayout.setVerticalGroup(
257  pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
258  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnDatabaseSettingsLayout.createSequentialGroup()
259  .addContainerGap()
260  .addGroup(pnDatabaseSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
261  .addComponent(bnTestDatabase)
262  .addComponent(lbTestDatabase, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
263  .addComponent(lbDatabaseSettings))
264  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
265  .addComponent(tbDbHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
266  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
267  .addComponent(tbDbPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
268  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
269  .addComponent(tbDbUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
270  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
271  .addComponent(tbDbPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
272  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
273  .addComponent(lbTestDbWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
274  .addContainerGap())
275  );
276 
277  pnSolrSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
278 
279  lbSolrSettings.setFont(lbSolrSettings.getFont().deriveFont(lbSolrSettings.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
280  org.openide.awt.Mnemonics.setLocalizedText(lbSolrSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbSolrSettings.text")); // NOI18N
281 
282  tbSolrHostname.setFont(tbSolrHostname.getFont().deriveFont(tbSolrHostname.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
283  tbSolrHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolrHostname.toolTipText")); // NOI18N
284 
285  tbSolrPort.setFont(tbSolrPort.getFont().deriveFont(tbSolrPort.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
286  tbSolrPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbSolrPort.toolTipText")); // NOI18N
287 
288  bnTestSolr.setFont(bnTestSolr.getFont().deriveFont(bnTestSolr.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
289  org.openide.awt.Mnemonics.setLocalizedText(bnTestSolr, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestSolr.text")); // NOI18N
290  bnTestSolr.addActionListener(new java.awt.event.ActionListener() {
291  public void actionPerformed(java.awt.event.ActionEvent evt) {
292  bnTestSolrActionPerformed(evt);
293  }
294  });
295 
296  org.openide.awt.Mnemonics.setLocalizedText(lbTestSolr, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestSolr.text")); // NOI18N
297 
298  lbTestSolrWarning.setForeground(new java.awt.Color(255, 0, 0));
299  org.openide.awt.Mnemonics.setLocalizedText(lbTestSolrWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestSolrWarning.text")); // NOI18N
300 
301  javax.swing.GroupLayout pnSolrSettingsLayout = new javax.swing.GroupLayout(pnSolrSettings);
302  pnSolrSettings.setLayout(pnSolrSettingsLayout);
303  pnSolrSettingsLayout.setHorizontalGroup(
304  pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
305  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
306  .addContainerGap()
307  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
308  .addComponent(tbSolrHostname)
309  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
310  .addComponent(lbSolrSettings)
311  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
312  .addComponent(bnTestSolr)
313  .addGap(18, 18, 18)
314  .addComponent(lbTestSolr, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
315  .addComponent(tbSolrPort)
316  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
317  .addComponent(lbTestSolrWarning)
318  .addGap(0, 0, Short.MAX_VALUE)))
319  .addContainerGap())
320  );
321  pnSolrSettingsLayout.setVerticalGroup(
322  pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
323  .addGroup(pnSolrSettingsLayout.createSequentialGroup()
324  .addContainerGap()
325  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
326  .addGroup(pnSolrSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
327  .addComponent(bnTestSolr, javax.swing.GroupLayout.Alignment.TRAILING)
328  .addComponent(lbSolrSettings))
329  .addComponent(lbTestSolr, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
330  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
331  .addComponent(tbSolrHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
332  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
333  .addComponent(tbSolrPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
334  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
335  .addComponent(lbTestSolrWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
336  .addContainerGap())
337  );
338 
339  pnMessagingSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder());
340 
341  lbMessageServiceSettings.setFont(lbMessageServiceSettings.getFont().deriveFont(lbMessageServiceSettings.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
342  org.openide.awt.Mnemonics.setLocalizedText(lbMessageServiceSettings, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbMessageServiceSettings.text")); // NOI18N
343 
344  tbMsgHostname.setFont(tbMsgHostname.getFont().deriveFont(tbMsgHostname.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
345  tbMsgHostname.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHostname.text")); // NOI18N
346  tbMsgHostname.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgHostname.toolTipText")); // NOI18N
347 
348  tbMsgUsername.setFont(tbMsgUsername.getFont().deriveFont(tbMsgUsername.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
349  tbMsgUsername.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.text")); // NOI18N
350  tbMsgUsername.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgUsername.toolTipText")); // NOI18N
351 
352  tbMsgPort.setFont(tbMsgPort.getFont().deriveFont(tbMsgPort.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
353  tbMsgPort.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.text")); // NOI18N
354  tbMsgPort.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPort.toolTipText")); // NOI18N
355 
356  tbMsgPassword.setFont(tbMsgPassword.getFont().deriveFont(tbMsgPassword.getFont().getStyle() & ~java.awt.Font.BOLD, 12));
357  tbMsgPassword.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.text")); // NOI18N
358  tbMsgPassword.setToolTipText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbMsgPassword.toolTipText")); // NOI18N
359 
360  bnTestMessageService.setFont(bnTestMessageService.getFont().deriveFont(bnTestMessageService.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
361  org.openide.awt.Mnemonics.setLocalizedText(bnTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.bnTestMessageService.text")); // NOI18N
362  bnTestMessageService.addActionListener(new java.awt.event.ActionListener() {
363  public void actionPerformed(java.awt.event.ActionEvent evt) {
364  bnTestMessageServiceActionPerformed(evt);
365  }
366  });
367 
368  org.openide.awt.Mnemonics.setLocalizedText(lbTestMessageService, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestMessageService.text")); // NOI18N
369 
370  lbTestMessageWarning.setForeground(new java.awt.Color(255, 0, 0));
371  org.openide.awt.Mnemonics.setLocalizedText(lbTestMessageWarning, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.lbTestMessageWarning.text")); // NOI18N
372 
373  javax.swing.GroupLayout pnMessagingSettingsLayout = new javax.swing.GroupLayout(pnMessagingSettings);
374  pnMessagingSettings.setLayout(pnMessagingSettingsLayout);
375  pnMessagingSettingsLayout.setHorizontalGroup(
376  pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
377  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
378  .addContainerGap()
379  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
380  .addComponent(tbMsgHostname)
381  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
382  .addComponent(lbMessageServiceSettings)
383  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 229, Short.MAX_VALUE)
384  .addComponent(bnTestMessageService)
385  .addGap(18, 18, 18)
386  .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
387  .addComponent(tbMsgPort)
388  .addComponent(tbMsgUsername)
389  .addComponent(tbMsgPassword)
390  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
391  .addComponent(lbTestMessageWarning)
392  .addGap(0, 0, Short.MAX_VALUE)))
393  .addContainerGap())
394  );
395  pnMessagingSettingsLayout.setVerticalGroup(
396  pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
397  .addGroup(pnMessagingSettingsLayout.createSequentialGroup()
398  .addContainerGap()
399  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
400  .addGroup(pnMessagingSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
401  .addComponent(bnTestMessageService, javax.swing.GroupLayout.Alignment.TRAILING)
402  .addComponent(lbMessageServiceSettings))
403  .addComponent(lbTestMessageService, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
404  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
405  .addComponent(tbMsgHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
406  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
407  .addComponent(tbMsgPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
408  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
409  .addComponent(tbMsgUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
410  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
411  .addComponent(tbMsgPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
412  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
413  .addComponent(lbTestMessageWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
414  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
415  );
416 
417  cbEnableMultiUser.setFont(cbEnableMultiUser.getFont().deriveFont(cbEnableMultiUser.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
418  org.openide.awt.Mnemonics.setLocalizedText(cbEnableMultiUser, org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.cbEnableMultiUser.text")); // NOI18N
419  cbEnableMultiUser.addItemListener(new java.awt.event.ItemListener() {
420  public void itemStateChanged(java.awt.event.ItemEvent evt) {
421  cbEnableMultiUserItemStateChanged(evt);
422  }
423  });
424 
425  tbOops.setEditable(false);
426  tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, 12));
427  tbOops.setForeground(new java.awt.Color(255, 0, 0));
428  tbOops.setText(org.openide.util.NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.tbOops.text")); // NOI18N
429  tbOops.setBorder(null);
430 
431  javax.swing.GroupLayout pnOverallPanelLayout = new javax.swing.GroupLayout(pnOverallPanel);
432  pnOverallPanel.setLayout(pnOverallPanelLayout);
433  pnOverallPanelLayout.setHorizontalGroup(
434  pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
435  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnOverallPanelLayout.createSequentialGroup()
436  .addContainerGap()
437  .addGroup(pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
438  .addGroup(pnOverallPanelLayout.createSequentialGroup()
439  .addComponent(cbEnableMultiUser)
440  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
441  .addComponent(tbOops))
442  .addComponent(pnSolrSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
443  .addComponent(pnDatabaseSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
444  .addComponent(pnMessagingSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
445  .addContainerGap())
446  );
447  pnOverallPanelLayout.setVerticalGroup(
448  pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
449  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnOverallPanelLayout.createSequentialGroup()
450  .addGroup(pnOverallPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
451  .addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
452  .addComponent(cbEnableMultiUser))
453  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
454  .addComponent(pnDatabaseSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
455  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
456  .addComponent(pnSolrSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
457  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
458  .addComponent(pnMessagingSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
459  .addContainerGap(39, Short.MAX_VALUE))
460  );
461 
462  jScrollPane.setViewportView(pnOverallPanel);
463 
464  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
465  this.setLayout(layout);
466  layout.setHorizontalGroup(
467  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
468  .addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 555, Short.MAX_VALUE)
469  );
470  layout.setVerticalGroup(
471  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
472  .addGroup(layout.createSequentialGroup()
473  .addContainerGap()
474  .addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE)
475  .addContainerGap())
476  );
477  }// </editor-fold>//GEN-END:initComponents
478 
485  private static void enableMultiUserComponents(Collection<JTextField> textFields, boolean enabled) {
486  for (JTextField textField : textFields) {
487  textField.setEnabled(enabled);
488  }
489  }
490 
491  private void cbEnableMultiUserItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cbEnableMultiUserItemStateChanged
492  if (!cbEnableMultiUser.isSelected()) {
493  tbOops.setText("");
494  bnTestDatabase.setEnabled(false);
495  lbTestDatabase.setIcon(null);
496  bnTestSolr.setEnabled(false);
497  lbTestSolr.setIcon(null);
498  bnTestMessageService.setEnabled(false);
499  lbTestMessageService.setIcon(null);
500  lbTestDbWarning.setText("");
501  lbTestSolrWarning.setText("");
502  lbTestMessageWarning.setText("");
503  }
504  enableMultiUserComponents(textBoxes, cbEnableMultiUser.isSelected());
505  controller.changed();
506  }//GEN-LAST:event_cbEnableMultiUserItemStateChanged
507 
508  private void bnTestDatabaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestDatabaseActionPerformed
509  lbTestDatabase.setIcon(null);
510  lbTestDatabase.paintImmediately(lbTestDatabase.getVisibleRect());
511  lbTestDbWarning.setText("");
512  lbTestDbWarning.paintImmediately(lbTestDbWarning.getVisibleRect());
513  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
514  try {
515  CaseDbConnectionInfo info = new CaseDbConnectionInfo(
516  this.tbDbHostname.getText().trim(),
517  this.tbDbPort.getText().trim(),
518  this.tbDbUsername.getText().trim(),
519  new String(this.tbDbPassword.getPassword()),
520  DbType.POSTGRESQL);
521 
522  SleuthkitCase.tryConnect(info);
523  lbTestDatabase.setIcon(goodIcon);
524  lbTestDbWarning.setText("");
525  } catch (TskCoreException ex) {
526  lbTestDatabase.setIcon(badIcon);
527  lbTestDbWarning.setText(ex.getMessage());
528  } finally {
529  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
530  }
531  }//GEN-LAST:event_bnTestDatabaseActionPerformed
532 
533  private void bnTestMessageServiceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestMessageServiceActionPerformed
534  lbTestMessageService.setIcon(null);
535  lbTestMessageService.paintImmediately(lbTestMessageService.getVisibleRect());
536  lbTestMessageWarning.setText("");
537  lbTestMessageWarning.paintImmediately(lbTestMessageWarning.getVisibleRect());
538  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
539 
540  int port;
541  try {
542  port = Integer.parseInt(this.tbMsgPort.getText().trim());
543  } catch (NumberFormatException ex) {
544  lbTestMessageService.setIcon(badIcon);
545  lbTestMessageWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
546  return;
547  }
548 
550  this.tbMsgHostname.getText().trim(),
551  port,
552  this.tbMsgUsername.getText().trim(),
553  new String(this.tbMsgPassword.getPassword()));
554  try {
555  info.tryConnect();
556  lbTestMessageService.setIcon(goodIcon);
557  lbTestMessageWarning.setText("");
558  } catch (MessageServiceException ex) {
559  lbTestMessageService.setIcon(badIcon);
560  lbTestMessageWarning.setText(ex.getMessage());
561  } finally {
562  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
563  }
564  }//GEN-LAST:event_bnTestMessageServiceActionPerformed
565 
566  private void bnTestSolrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestSolrActionPerformed
567  lbTestSolr.setIcon(null);
568  lbTestSolr.paintImmediately(lbTestSolr.getVisibleRect());
569  lbTestSolrWarning.setText("");
570  lbTestSolrWarning.paintImmediately(lbTestSolrWarning.getVisibleRect());
571  setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
572 
573  KeywordSearchService kwsService = Lookup.getDefault().lookup(KeywordSearchService.class);
574  try {
575  if (kwsService != null) {
576  int port = Integer.parseInt(tbSolrPort.getText().trim());
577  kwsService.tryConnect(tbSolrHostname.getText().trim(), port);
578  lbTestSolr.setIcon(goodIcon);
579  lbTestSolrWarning.setText("");
580  } else {
581  lbTestSolr.setIcon(badIcon);
582  lbTestSolrWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.KeywordSearchNull"));
583  }
584  } catch (NumberFormatException ex) {
585  lbTestSolr.setIcon(badIcon);
586  lbTestSolrWarning.setText(NbBundle.getMessage(MultiUserSettingsPanel.class, "MultiUserSettingsPanel.InvalidPortNumber"));
587  } catch (KeywordSearchServiceException ex) {
588  lbTestSolr.setIcon(badIcon);
589  lbTestSolrWarning.setText(ex.getMessage());
590  } finally {
591  setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
592  }
593  }//GEN-LAST:event_bnTestSolrActionPerformed
594 
595  void load() {
596  lbTestDatabase.setIcon(null);
597  lbTestSolr.setIcon(null);
598  lbTestMessageService.setIcon(null);
599  lbTestDbWarning.setText("");
600  lbTestSolrWarning.setText("");
601  lbTestMessageWarning.setText("");
602 
603  try {
604  CaseDbConnectionInfo dbInfo = UserPreferences.getDatabaseConnectionInfo();
605  tbDbHostname.setText(dbInfo.getHost().trim());
606  tbDbPort.setText(dbInfo.getPort().trim());
607  tbDbUsername.setText(dbInfo.getUserName().trim());
608  tbDbPassword.setText(dbInfo.getPassword());
609  } catch (UserPreferencesException ex) {
610  logger.log(Level.SEVERE, "Error accessing case database connection info", ex); //NON-NLS
611  }
612 
613  try {
614  MessageServiceConnectionInfo msgServiceInfo = UserPreferences.getMessageServiceConnectionInfo();
615  tbMsgHostname.setText(msgServiceInfo.getHost().trim());
616  tbMsgPort.setText(Integer.toString(msgServiceInfo.getPort()));
617  tbMsgUsername.setText(msgServiceInfo.getUserName().trim());
618  tbMsgPassword.setText(msgServiceInfo.getPassword());
619  } catch (UserPreferencesException ex) {
620  logger.log(Level.SEVERE, "Error accessing case database connection info", ex); //NON-NLS
621  }
622 
623  String indexingServerHost = UserPreferences.getIndexingServerHost().trim();
624  if (!indexingServerHost.isEmpty()) {
625  tbSolrHostname.setText(indexingServerHost);
626  }
627  String indexingServerPort = UserPreferences.getIndexingServerPort().trim();
628  if (portNumberIsValid(indexingServerPort)) {
629  tbSolrPort.setText(indexingServerPort);
630  }
631 
632  lbTestDatabase.setIcon(null);
633  lbTestSolr.setIcon(null);
634  lbTestMessageService.setIcon(null);
635 
636  bnTestDatabase.setEnabled(false);
637  bnTestSolr.setEnabled(false);
638  bnTestMessageService.setEnabled(false);
639 
640  cbEnableMultiUser.setSelected(UserPreferences.getIsMultiUserModeEnabled());
641  this.valid(); // trigger validation to enable buttons based on current settings
642  }
643 
650  private boolean databaseFieldsArePopulated() {
651  return !tbDbHostname.getText().trim().isEmpty()
652  && !tbDbPort.getText().trim().isEmpty()
653  && !tbDbUsername.getText().trim().isEmpty()
654  && tbDbPassword.getPassword().length != 0;
655  }
656 
663  private boolean solrFieldsArePopulated() {
664  return !tbSolrHostname.getText().trim().isEmpty()
665  && !tbSolrPort.getText().trim().isEmpty();
666  }
667 
675 
676  if ((tbMsgHostname.getText().trim().isEmpty())
677  || (tbMsgPort.getText().trim().isEmpty())) {
678  return false;
679  }
680 
681  // user name and pw are optional, but make sure they are both set or both empty
682  boolean isUserSet = (tbMsgUsername.getText().trim().isEmpty() == false);
683  boolean isPwSet = (tbMsgPassword.getPassword().length != 0);
684  return (isUserSet == isPwSet);
685  }
686 
687  void store() {
688 
689  boolean multiUserCasesEnabled = cbEnableMultiUser.isSelected();
690  UserPreferences.setIsMultiUserModeEnabled(multiUserCasesEnabled);
691  if (multiUserCasesEnabled == false) {
692  return;
693  }
694 
695  /*
696  * Currently only supporting multi-user cases with PostgreSQL case
697  * databases.
698  */
699  DbType dbType = DbType.POSTGRESQL;
700  CaseDbConnectionInfo info = new CaseDbConnectionInfo(
701  tbDbHostname.getText().trim(),
702  tbDbPort.getText().trim(),
703  tbDbUsername.getText().trim(),
704  new String(tbDbPassword.getPassword()),
705  dbType);
706  try {
707  UserPreferences.setDatabaseConnectionInfo(info);
708  } catch (UserPreferencesException ex) {
709  logger.log(Level.SEVERE, "Error saving case database connection info", ex); //NON-NLS
710  }
711 
712  int msgServicePort = 0;
713  try {
714  msgServicePort = Integer.parseInt(this.tbMsgPort.getText().trim());
715  } catch (NumberFormatException ex) {
716  logger.log(Level.SEVERE, "Could not parse messaging service port setting", ex);
717  }
718 
719  MessageServiceConnectionInfo msgServiceInfo = new MessageServiceConnectionInfo(
720  tbMsgHostname.getText().trim(),
721  msgServicePort,
722  tbMsgUsername.getText().trim(),
723  new String(tbMsgPassword.getPassword()));
724 
725  try {
726  UserPreferences.setMessageServiceConnectionInfo(msgServiceInfo);
727  } catch (UserPreferencesException ex) {
728  logger.log(Level.SEVERE, "Error saving messaging service connection info", ex); //NON-NLS
729  }
730 
731  UserPreferences.setIndexingServerHost(tbSolrHostname.getText().trim());
732  UserPreferences.setIndexingServerPort(Integer.parseInt(tbSolrPort.getText().trim()));
733 
734  }
735 
741  boolean valid() {
742  tbOops.setText("");
743 
744  if (cbEnableMultiUser.isSelected()) {
745  return checkFieldsAndEnableButtons()
746  && databaseSettingsAreValid()
747  && indexingServerSettingsAreValid()
748  && messageServiceSettingsAreValid();
749  } else {
750  return true;
751  }
752  }
753 
760  boolean checkFieldsAndEnableButtons() {
761  boolean result = true;
762 
763  boolean dbPopulated = databaseFieldsArePopulated();
764  boolean solrPopulated = solrFieldsArePopulated();
765  boolean messageServicePopulated = messageServiceFieldsArePopulated();
766 
767  // PostgreSQL Database
768  bnTestDatabase.setEnabled(dbPopulated);
769 
770  // Solr Indexing
771  bnTestSolr.setEnabled(solrPopulated);
772 
773  // ActiveMQ Messaging
774  bnTestMessageService.setEnabled(messageServicePopulated);
775 
776  if (!dbPopulated || !solrPopulated || !messageServicePopulated) {
777  // We don't even have everything filled out
778  result = false;
779  tbOops.setText(INCOMPLETE_SETTINGS_MSG);
780  }
781  return result;
782  }
783 
789  boolean databaseSettingsAreValid() {
790  if (portNumberIsValid(tbDbPort.getText().trim())) {
791  return true;
792  } else {
793  tbOops.setText(INVALID_DB_PORT_MSG);
794  return false;
795  }
796  }
797 
803  boolean messageServiceSettingsAreValid() {
804  if (!portNumberIsValid(tbMsgPort.getText().trim())) {
805  tbOops.setText(INVALID_MESSAGE_SERVICE_PORT_MSG);
806  return false;
807  }
808 
809  return true;
810  }
811 
817  boolean indexingServerSettingsAreValid() {
818  if (!portNumberIsValid(tbSolrPort.getText().trim())) {
819  tbOops.setText(INVALID_INDEXING_SERVER_PORT_MSG);
820  return false;
821  }
822 
823  return true;
824  }
825 
834  private static boolean portNumberIsValid(String portNumber) {
835  try {
836  int value = Integer.parseInt(portNumber);
837  if (value < 0 || value > 65535) { // invalid port numbers
838  return false;
839  }
840  } catch (NumberFormatException detailsNotImportant) {
841  return false;
842  }
843  return true;
844  }
845 
846  // Variables declaration - do not modify//GEN-BEGIN:variables
847  private javax.swing.JButton bnTestDatabase;
848  private javax.swing.JButton bnTestMessageService;
849  private javax.swing.JButton bnTestSolr;
850  private javax.swing.JCheckBox cbEnableMultiUser;
851  private javax.swing.JScrollPane jScrollPane;
852  private javax.swing.JLabel lbDatabaseSettings;
853  private javax.swing.JLabel lbMessageServiceSettings;
854  private javax.swing.JLabel lbSolrSettings;
855  private javax.swing.JLabel lbTestDatabase;
856  private javax.swing.JLabel lbTestDbWarning;
857  private javax.swing.JLabel lbTestMessageService;
858  private javax.swing.JLabel lbTestMessageWarning;
859  private javax.swing.JLabel lbTestSolr;
860  private javax.swing.JLabel lbTestSolrWarning;
861  private javax.swing.JPanel pnDatabaseSettings;
862  private javax.swing.JPanel pnMessagingSettings;
863  private javax.swing.JPanel pnOverallPanel;
864  private javax.swing.JPanel pnSolrSettings;
865  private javax.swing.JTextField tbDbHostname;
866  private javax.swing.JPasswordField tbDbPassword;
867  private javax.swing.JTextField tbDbPort;
868  private javax.swing.JTextField tbDbUsername;
869  private javax.swing.JTextField tbMsgHostname;
870  private javax.swing.JPasswordField tbMsgPassword;
871  private javax.swing.JTextField tbMsgPort;
872  private javax.swing.JTextField tbMsgUsername;
873  private javax.swing.JTextField tbOops;
874  private javax.swing.JTextField tbSolrHostname;
875  private javax.swing.JTextField tbSolrPort;
876  // End of variables declaration//GEN-END:variables
877 
882  class TextBoxChangedListener implements DocumentListener {
883 
884  @Override
885  public void changedUpdate(DocumentEvent e) {
886  Object statusIcon = e.getDocument().getProperty("statusIcon");
887  if (statusIcon != null) {
888  ((javax.swing.JLabel) statusIcon).setIcon(null);
889  }
890  controller.changed();
891  }
892 
893  @Override
894  public void insertUpdate(DocumentEvent e) {
895  Object statusIcon = e.getDocument().getProperty("statusIcon");
896  if (statusIcon != null) {
897  ((javax.swing.JLabel) statusIcon).setIcon(null);
898  }
899  controller.changed();
900  }
901 
902  @Override
903  public void removeUpdate(DocumentEvent e) {
904  Object statusIcon = e.getDocument().getProperty("statusIcon");
905  if (statusIcon != null) {
906  ((javax.swing.JLabel) statusIcon).setIcon(null);
907  }
908  controller.changed();
909  }
910  }
911 }
static void configureTextPrompts(Collection< TextPrompt > textPrompts)
static CaseDbConnectionInfo getDatabaseConnectionInfo()
MultiUserSettingsPanel(MultiUserSettingsPanelController theController)
static void setIsMultiUserModeEnabled(boolean enabled)
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-2018 Basis Technology. Generated on: Wed Sep 18 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.