19 package org.sleuthkit.autopsy.centralrepository.optionspanel;
21 import java.awt.Dimension;
22 import java.awt.Toolkit;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.logging.Level;
26 import javax.swing.JFrame;
27 import javax.swing.event.TableModelEvent;
28 import javax.swing.event.TableModelListener;
29 import javax.swing.table.DefaultTableModel;
30 import javax.swing.table.TableModel;
31 import org.openide.util.Exceptions;
32 import org.openide.util.NbBundle.Messages;
33 import org.openide.windows.WindowManager;
43 final class ManageCorrelationPropertiesDialog
extends javax.swing.JDialog {
45 private static final Logger LOGGER = Logger.getLogger(ManageCorrelationPropertiesDialog.class.getName());
47 private final List<CorrelationAttribute.Type> correlationTypes;
53 @Messages({
"ManageCorrelationPropertiesDialog.title=Manage Correlation Properties"})
54 ManageCorrelationPropertiesDialog() {
55 super((JFrame) WindowManager.getDefault().getMainWindow(),
56 Bundle.ManageCorrelationPropertiesDialog_title(),
58 this.correlationTypes =
new ArrayList<>();
60 customizeComponents();
65 private void customizeComponents() {
66 lbWarningMsg.setText(
"");
71 private void loadData() {
72 DefaultTableModel model = (DefaultTableModel) tbCorrelatableTypes.getModel();
74 EamDb dbManager = EamDb.getInstance();
75 correlationTypes.clear();
76 correlationTypes.addAll(dbManager.getDefinedCorrelationTypes());
77 }
catch (EamDbException ex) {
78 Exceptions.printStackTrace(ex);
81 correlationTypes.forEach((aType) -> {
82 model.addRow(
new Object[]{aType.getDisplayName(), aType.isEnabled()});
84 model.addTableModelListener(
new TableModelListener() {
86 public void tableChanged(TableModelEvent evt) {
87 int row = evt.getFirstRow();
88 TableModel model = (TableModel) evt.getSource();
89 Object displayName = model.getValueAt(row, 0);
90 Boolean enabled = (Boolean) model.getValueAt(row, 1);
92 correlationTypes.stream().filter((aType) -> (aType.getDisplayName().equals(displayName))).forEachOrdered((aType) -> {
93 aType.setEnabled(enabled);
100 private void display() {
101 this.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
105 @Messages({
"ManageCorrelationPropertiesDialog.noneSelected=There are no correlation properties enabled."})
106 private boolean valid() {
107 lbWarningMsg.setText(
"");
109 int countEnabled = 0;
110 countEnabled = correlationTypes.stream().filter((aType) -> (aType.isEnabled())).map((_item) -> 1).reduce(countEnabled, Integer::sum);
112 if (0 == countEnabled) {
113 lbWarningMsg.setText(Bundle.ManageCorrelationPropertiesDialog_noneSelected());
123 @SuppressWarnings({
"unchecked",
"rawtypes"})
125 private void initComponents() {
127 buttonGroup1 =
new javax.swing.ButtonGroup();
128 okButton =
new javax.swing.JButton();
129 cancelButton =
new javax.swing.JButton();
130 jScrollPane1 =
new javax.swing.JScrollPane();
131 tbCorrelatableTypes =
new javax.swing.JTable();
132 lbWarningMsg =
new javax.swing.JLabel();
133 taInstructions =
new javax.swing.JTextArea();
135 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
137 org.openide.awt.Mnemonics.setLocalizedText(okButton,
org.openide.util.NbBundle.getMessage(ManageCorrelationPropertiesDialog.class,
"ManageCorrelationPropertiesDialog.okButton.text"));
138 okButton.addActionListener(
new java.awt.event.ActionListener() {
139 public void actionPerformed(java.awt.event.ActionEvent evt) {
140 okButtonActionPerformed(evt);
144 org.openide.awt.Mnemonics.setLocalizedText(cancelButton,
org.openide.util.NbBundle.getMessage(ManageCorrelationPropertiesDialog.class,
"ManageCorrelationPropertiesDialog.cancelButton.text"));
145 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
146 public void actionPerformed(java.awt.event.ActionEvent evt) {
147 cancelButtonActionPerformed(evt);
151 jScrollPane1.setMinimumSize(
new java.awt.Dimension(150, 23));
153 tbCorrelatableTypes.setModel(
new javax.swing.table.DefaultTableModel(
158 "Correlation Properties",
"Enable"
161 Class[] types =
new Class [] {
162 java.lang.String.class, java.lang.Boolean.class
164 boolean[] canEdit =
new boolean [] {
168 public Class getColumnClass(
int columnIndex) {
169 return types [columnIndex];
172 public boolean isCellEditable(
int rowIndex,
int columnIndex) {
173 return canEdit [columnIndex];
176 tbCorrelatableTypes.setMaximumSize(
new java.awt.Dimension(400, 0));
177 tbCorrelatableTypes.setMinimumSize(
new java.awt.Dimension(150, 0));
178 jScrollPane1.setViewportView(tbCorrelatableTypes);
180 lbWarningMsg.setFont(
new java.awt.Font(
"Tahoma", 0, 12));
181 lbWarningMsg.setForeground(
new java.awt.Color(255, 0, 0));
182 org.openide.awt.Mnemonics.setLocalizedText(lbWarningMsg,
org.openide.util.NbBundle.getMessage(ManageCorrelationPropertiesDialog.class,
"ManageCorrelationPropertiesDialog.lbWarningMsg.text"));
184 taInstructions.setEditable(
false);
185 taInstructions.setBackground(
new java.awt.Color(240, 240, 240));
186 taInstructions.setColumns(20);
187 taInstructions.setFont(
new java.awt.Font(
"Tahoma", 0, 11));
188 taInstructions.setLineWrap(
true);
189 taInstructions.setRows(5);
190 taInstructions.setText(
org.openide.util.NbBundle.getMessage(ManageCorrelationPropertiesDialog.class,
"ManageArtifactTypesDialog.taInstructionsMsg.text"));
191 taInstructions.setWrapStyleWord(
true);
192 taInstructions.setAutoscrolls(
false);
193 taInstructions.setBorder(null);
194 taInstructions.setFocusable(
false);
195 taInstructions.setRequestFocusEnabled(
false);
196 taInstructions.setVerifyInputWhenFocusTarget(
false);
198 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
199 getContentPane().setLayout(layout);
200 layout.setHorizontalGroup(
201 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
202 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
204 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
205 .addComponent(taInstructions)
206 .addComponent(lbWarningMsg, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
207 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
208 .addGap(0, 0, Short.MAX_VALUE)
209 .addComponent(okButton)
210 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
211 .addComponent(cancelButton))
212 .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
216 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {cancelButton, okButton});
218 layout.setVerticalGroup(
219 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
220 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
222 .addComponent(taInstructions, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
223 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
224 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
225 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
226 .addComponent(lbWarningMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
227 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
228 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
229 .addComponent(okButton)
230 .addComponent(cancelButton))
231 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
237 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
241 @Messages({
"ManageCorrelationPropertiesDialog.okbutton.failure=Error saving updated selections."})
242 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
244 if (0 == correlationTypes.size()) {
249 dbManager = EamDb.getInstance();
250 }
catch (EamDbException ex) {
251 LOGGER.log(Level.SEVERE,
"Failed to connect to central repository database.", ex);
252 lbWarningMsg.setText(Bundle.ManageCorrelationPropertiesDialog_okbutton_failure());
255 correlationTypes.forEach((aType) -> {
257 dbManager.updateCorrelationType(aType);
259 }
catch (EamDbException ex) {
260 LOGGER.log(Level.SEVERE,
"Failed to update correlation properties with selections from dialog.", ex);
261 lbWarningMsg.setText(Bundle.ManageCorrelationPropertiesDialog_okbutton_failure());
268 private javax.swing.ButtonGroup buttonGroup1;
269 private javax.swing.JButton cancelButton;
270 private javax.swing.JScrollPane jScrollPane1;
271 private javax.swing.JLabel lbWarningMsg;
272 private javax.swing.JButton okButton;
273 private javax.swing.JTextArea taInstructions;
274 private javax.swing.JTable tbCorrelatableTypes;