Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
AddNewOrganizationDialog.java
Go to the documentation of this file.
1/*
2 * Central Repository
3 *
4 * Copyright 2015-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 */
19package org.sleuthkit.autopsy.centralrepository.optionspanel;
20
21import java.util.ArrayList;
22import java.util.Collection;
23import java.util.logging.Level;
24import javax.swing.JFrame;
25import javax.swing.JTextField;
26import javax.swing.event.DocumentEvent;
27import javax.swing.event.DocumentListener;
28import org.netbeans.spi.options.OptionsPanelController;
29import org.openide.util.NbBundle.Messages;
30import org.openide.windows.WindowManager;
31import org.sleuthkit.autopsy.coreutils.Logger;
32import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
33import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoOrganization;
34import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
35
39@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
40class AddNewOrganizationDialog extends javax.swing.JDialog {
41
42 private static final Logger logger = Logger.getLogger(AddNewOrganizationDialog.class.getName());
43 private static final long serialVersionUID = 1L;
44
45 private final Collection<JTextField> textBoxes;
46 private final TextBoxChangedListener textBoxChangedListener;
47 private boolean hasChanged;
48 private CentralRepoOrganization newOrg;
49 private final CentralRepoOrganization organizationToEdit;
50
54 @Messages({"AddNewOrganizationDialog.addNewOrg.msg=Add New Organization"})
55 AddNewOrganizationDialog(javax.swing.JDialog parent) {
56 super(parent,
57 Bundle.AddNewOrganizationDialog_addNewOrg_msg(),
58 true); // NON-NLS
59 textBoxes = new ArrayList<>();
60 textBoxChangedListener = new TextBoxChangedListener();
61 hasChanged = false;
62 newOrg = null;
63 initComponents();
64 customizeComponents();
65 organizationToEdit = null;
66 display();
67 }
68
69 // populates the dialog with existing case information to edit
70 public AddNewOrganizationDialog(javax.swing.JDialog parent, CentralRepoOrganization orgToEdit) {
71 super(parent,
72 Bundle.AddNewOrganizationDialog_addNewOrg_msg(),
73 true); // NON-NLS
74 organizationToEdit = orgToEdit;
75 textBoxes = new ArrayList<>();
76 textBoxChangedListener = new TextBoxChangedListener();
77 hasChanged = false;
78 newOrg = null;
79 initComponents();
80 customizeComponents();
81 tfOrganizationName.setText(orgToEdit.getName());
82 tfPocName.setText(orgToEdit.getPocName());
83 tfPocEmail.setText(orgToEdit.getPocEmail());
84 tfPocPhone.setText(orgToEdit.getPocPhone());
85 display();
86 }
87
88 private void display() {
89 this.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
90 setVisible(true);
91 }
92
93 private void customizeComponents() {
94 setTextBoxListeners();
95 enableOkButton(false);
96 }
97
101 private void setTextBoxListeners() {
102 textBoxes.add(tfOrganizationName);
103 textBoxes.add(tfPocEmail);
104 textBoxes.add(tfPocPhone);
105 textBoxes.add(tfPocName);
106 addDocumentListeners(textBoxes, textBoxChangedListener);
107 }
108
115 private static void addDocumentListeners(Collection<JTextField> textFields, TextBoxChangedListener listener) {
116 textFields.forEach((textField) -> {
117 textField.getDocument().addDocumentListener(listener);
118 });
119 }
120
127 private boolean requiredFieldsArePopulated() {
128 return !tfOrganizationName.getText().trim().isEmpty();
129 }
130
136 @Messages({"AddNewOrganizationDialog.validation.incompleteFields=Organization Name is required."})
137 private boolean checkFields() {
138 boolean result = true;
139
140 boolean isPopulated = requiredFieldsArePopulated();
141
142 if (!isPopulated) {
143 // We don't even have everything filled out
144 result = false;
145 lbWarningMsg.setText(Bundle.AddNewOrganizationDialog_validation_incompleteFields());
146 }
147 return result;
148 }
149
155 public boolean valid() {
156 lbWarningMsg.setText("");
157
158 return enableOkButton(checkFields());
159 }
160
168 private boolean enableOkButton(Boolean enable) {
169 bnOK.setEnabled(enable);
170 return enable;
171 }
172
177 private class TextBoxChangedListener implements DocumentListener {
178
179 @Override
180 public void changedUpdate(DocumentEvent e) {
181 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
182 valid();
183 }
184
185 @Override
186 public void insertUpdate(DocumentEvent e) {
187 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
188 valid();
189 }
190
191 @Override
192 public void removeUpdate(DocumentEvent e) {
193 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
194 valid();
195 }
196 }
197
202 public boolean isChanged() {
203 return hasChanged;
204 }
205
211 public CentralRepoOrganization getNewOrg() {
212 return newOrg;
213 }
214
220 @SuppressWarnings("unchecked")
221 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
222 private void initComponents() {
223
224 bnOK = new javax.swing.JButton();
225 bnCancel = new javax.swing.JButton();
226 lbOrganizationName = new javax.swing.JLabel();
227 lbPocHeading = new javax.swing.JLabel();
228 lbPocName = new javax.swing.JLabel();
229 lbPocEmail = new javax.swing.JLabel();
230 lbPocPhone = new javax.swing.JLabel();
231 tfPocName = new javax.swing.JTextField();
232 tfPocEmail = new javax.swing.JTextField();
233 tfPocPhone = new javax.swing.JTextField();
234 tfOrganizationName = new javax.swing.JTextField();
235 lbWarningMsg = new javax.swing.JLabel();
236
237 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
238
239 org.openide.awt.Mnemonics.setLocalizedText(bnOK, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.bnOK.text")); // NOI18N
240 bnOK.addActionListener(new java.awt.event.ActionListener() {
241 public void actionPerformed(java.awt.event.ActionEvent evt) {
242 bnOKActionPerformed(evt);
243 }
244 });
245
246 org.openide.awt.Mnemonics.setLocalizedText(bnCancel, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.bnCancel.text")); // NOI18N
247 bnCancel.addActionListener(new java.awt.event.ActionListener() {
248 public void actionPerformed(java.awt.event.ActionEvent evt) {
249 bnCancelActionPerformed(evt);
250 }
251 });
252
253 org.openide.awt.Mnemonics.setLocalizedText(lbOrganizationName, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.lbOrganizationName.text")); // NOI18N
254
255 org.openide.awt.Mnemonics.setLocalizedText(lbPocHeading, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.lbPocHeading.text")); // NOI18N
256
257 org.openide.awt.Mnemonics.setLocalizedText(lbPocName, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.lbPocName.text")); // NOI18N
258
259 org.openide.awt.Mnemonics.setLocalizedText(lbPocEmail, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.lbPocEmail.text")); // NOI18N
260
261 org.openide.awt.Mnemonics.setLocalizedText(lbPocPhone, org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.lbPocPhone.text")); // NOI18N
262
263 tfPocName.setToolTipText(org.openide.util.NbBundle.getMessage(AddNewOrganizationDialog.class, "AddNewOrganizationDialog.tfName.tooltip")); // NOI18N
264
265 lbWarningMsg.setFont(lbWarningMsg.getFont().deriveFont(lbWarningMsg.getFont().getStyle() | java.awt.Font.BOLD, lbWarningMsg.getFont().getSize()+1));
266 lbWarningMsg.setForeground(new java.awt.Color(255, 0, 0));
267
268 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
269 getContentPane().setLayout(layout);
270 layout.setHorizontalGroup(
271 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
272 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
273 .addContainerGap(258, Short.MAX_VALUE)
274 .addComponent(bnOK)
275 .addGap(18, 18, 18)
276 .addComponent(bnCancel)
277 .addGap(12, 12, 12))
278 .addGroup(layout.createSequentialGroup()
279 .addGap(39, 39, 39)
280 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
281 .addComponent(lbPocEmail)
282 .addComponent(lbPocName)
283 .addComponent(lbPocPhone))
284 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
285 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
286 .addComponent(tfPocPhone)
287 .addComponent(tfPocName)
288 .addComponent(tfPocEmail))
289 .addContainerGap())
290 .addGroup(layout.createSequentialGroup()
291 .addGap(18, 18, 18)
292 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
293 .addGroup(layout.createSequentialGroup()
294 .addComponent(lbOrganizationName)
295 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
296 .addComponent(tfOrganizationName))
297 .addGroup(layout.createSequentialGroup()
298 .addComponent(lbPocHeading)
299 .addGap(0, 0, Short.MAX_VALUE))
300 .addComponent(lbWarningMsg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
301 .addContainerGap())
302 );
303 layout.setVerticalGroup(
304 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
305 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
306 .addContainerGap()
307 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
308 .addComponent(lbOrganizationName)
309 .addComponent(tfOrganizationName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
310 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
311 .addComponent(lbPocHeading)
312 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
313 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
314 .addComponent(lbPocName)
315 .addComponent(tfPocName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
316 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
317 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
318 .addComponent(lbPocEmail)
319 .addComponent(tfPocEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
320 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
321 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
322 .addComponent(lbPocPhone)
323 .addComponent(tfPocPhone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
324 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
325 .addComponent(lbWarningMsg, javax.swing.GroupLayout.DEFAULT_SIZE, 22, Short.MAX_VALUE)
326 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
327 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
328 .addComponent(bnOK)
329 .addComponent(bnCancel))
330 .addContainerGap())
331 );
332
333 pack();
334 }// </editor-fold>//GEN-END:initComponents
335
336 private void bnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnCancelActionPerformed
337 dispose();
338 }//GEN-LAST:event_bnCancelActionPerformed
339
340 @Messages({"AddNewOrganizationDialog.bnOk.addFailed.text=Failed to add new organization."})
341 private void bnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOKActionPerformed
342
343 try {
344 CentralRepository dbManager = CentralRepository.getInstance();
345 if (organizationToEdit != null) {
346 // make a copy in case the update fails
347 newOrg = dbManager.getOrganizationByID(organizationToEdit.getOrgID());
348 newOrg.setName(tfOrganizationName.getText());
349 newOrg.setPocName(tfPocName.getText());
350 newOrg.setPocEmail(tfPocEmail.getText());
351 newOrg.setPocPhone(tfPocPhone.getText());
352 dbManager.updateOrganization(newOrg);
353 } else {
354 newOrg = new CentralRepoOrganization(
355 tfOrganizationName.getText(),
356 tfPocName.getText(),
357 tfPocEmail.getText(),
358 tfPocPhone.getText());
359 newOrg = dbManager.newOrganization(newOrg);
360 }
361 hasChanged = true;
362 dispose();
363 } catch (CentralRepoException ex) {
364 lbWarningMsg.setText(Bundle.AddNewOrganizationDialog_bnOk_addFailed_text());
365 logger.log(Level.SEVERE, "Failed adding new organization.", ex);
366 newOrg = null;
367 }
368 }//GEN-LAST:event_bnOKActionPerformed
369
370
371 // Variables declaration - do not modify//GEN-BEGIN:variables
372 private javax.swing.JButton bnCancel;
373 private javax.swing.JButton bnOK;
374 private javax.swing.JLabel lbOrganizationName;
375 private javax.swing.JLabel lbPocEmail;
376 private javax.swing.JLabel lbPocHeading;
377 private javax.swing.JLabel lbPocName;
378 private javax.swing.JLabel lbPocPhone;
379 private javax.swing.JLabel lbWarningMsg;
380 private javax.swing.JTextField tfOrganizationName;
381 private javax.swing.JTextField tfPocEmail;
382 private javax.swing.JTextField tfPocName;
383 private javax.swing.JTextField tfPocPhone;
384 // End of variables declaration//GEN-END:variables
385}
synchronized static Logger getLogger(String name)
Definition Logger.java:124

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.