Autopsy  4.12.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ConfigVisualPanel2.java
Go to the documentation of this file.
1 /*
2  * Autopsy
3  *
4  * Copyright 2019 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.logicalimager.configuration;
20 
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.List;
26 import javax.swing.JButton;
27 import javax.swing.JOptionPane;
28 import javax.swing.JPanel;
29 import javax.swing.JTable;
30 import javax.swing.table.AbstractTableModel;
31 import org.apache.commons.lang3.tuple.ImmutablePair;
32 import org.openide.util.NbBundle;
33 import org.openide.util.NbBundle.Messages;
34 
38 @NbBundle.Messages({
39  "ConfigVisualPanel2.ok=OK",
40  "ConfigVisualPanel2.cancel=Cancel"
41 })
42 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
43 final class ConfigVisualPanel2 extends JPanel {
44 
45  private static final long serialVersionUID = 1L;
46  private String configFilename;
47  private LogicalImagerConfig config = null;
48  private final JButton okButton = new JButton(Bundle.ConfigVisualPanel2_ok());
49  private final JButton cancelButton = new JButton(Bundle.ConfigVisualPanel2_cancel());
50  private boolean flagEncryptionPrograms = false;
51 
55  ConfigVisualPanel2() {
56  initComponents();
57  if (config != null) {
58  updatePanel(configFilename, config);
59  }
60  }
61 
62  @NbBundle.Messages({
63  "ConfigVisualPanel2.editConfiguration=Configure imager"
64  })
65  @Override
66  public String getName() {
67  return Bundle.ConfigVisualPanel2_editConfiguration();
68  }
69 
75  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
76  private void initComponents() {
77 
78  modifiedDateLabel = new javax.swing.JLabel();
79  modifiedWithinTextField = new javax.swing.JTextField();
80  daysIncludedLabel = new javax.swing.JLabel();
81  fullPathsLabel = new javax.swing.JLabel();
82  flagEncryptionProgramsCheckBox = new javax.swing.JCheckBox();
83  ruleNameLabel = new javax.swing.JLabel();
84  ruleNameEditTextField = new javax.swing.JTextField();
85  newRuleButton = new javax.swing.JButton();
86  descriptionLabel = new javax.swing.JLabel();
87  editRuleButton = new javax.swing.JButton();
88  descriptionEditTextField = new javax.swing.JTextField();
89  deleteRuleButton = new javax.swing.JButton();
90  fullPathsScrollPane = new javax.swing.JScrollPane();
91  fullPathsTable = new javax.swing.JTable();
92  filenamesScrollPane = new javax.swing.JScrollPane();
93  filenamesTable = new javax.swing.JTable();
94  shouldSaveCheckBox = new javax.swing.JCheckBox();
95  shouldAlertCheckBox = new javax.swing.JCheckBox();
96  folderNamesScrollPane = new javax.swing.JScrollPane();
97  folderNamesTable = new javax.swing.JTable();
98  extensionsLabel = new javax.swing.JLabel();
99  extensionsTextField = new javax.swing.JTextField();
100  filenamesLabel = new javax.swing.JLabel();
101  configFileTextField = new javax.swing.JTextField();
102  ruleSetFileLabel = new javax.swing.JLabel();
103  finalizeImageWriter = new javax.swing.JCheckBox();
104  rulesScrollPane = new javax.swing.JScrollPane();
105  rulesTable = new javax.swing.JTable();
106  folderNamesLabel = new javax.swing.JLabel();
107  fileSizeLabel = new javax.swing.JLabel();
108  jSeparator1 = new javax.swing.JSeparator();
109  minSizeLabel = new javax.swing.JLabel();
110  minSizeTextField = new javax.swing.JFormattedTextField();
111  maxSizeLabel = new javax.swing.JLabel();
112  maxSizeTextField = new javax.swing.JFormattedTextField();
113  promptBeforeExit = new javax.swing.JCheckBox();
114  createVHDCheckBox = new javax.swing.JCheckBox();
115 
116  org.openide.awt.Mnemonics.setLocalizedText(modifiedDateLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.modifiedDateLabel.text")); // NOI18N
117 
118  modifiedWithinTextField.setEditable(false);
119  modifiedWithinTextField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
120  modifiedWithinTextField.setEnabled(false);
121  modifiedWithinTextField.setMinimumSize(new java.awt.Dimension(60, 20));
122  modifiedWithinTextField.setPreferredSize(new java.awt.Dimension(60, 20));
123 
124  org.openide.awt.Mnemonics.setLocalizedText(daysIncludedLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.daysIncludedLabel.text")); // NOI18N
125 
126  org.openide.awt.Mnemonics.setLocalizedText(fullPathsLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.fullPathsLabel.text")); // NOI18N
127 
128  org.openide.awt.Mnemonics.setLocalizedText(flagEncryptionProgramsCheckBox, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.flagEncryptionProgramsCheckBox.text")); // NOI18N
129  flagEncryptionProgramsCheckBox.addActionListener(new java.awt.event.ActionListener() {
130  public void actionPerformed(java.awt.event.ActionEvent evt) {
131  flagEncryptionProgramsCheckBoxActionPerformed(evt);
132  }
133  });
134 
135  org.openide.awt.Mnemonics.setLocalizedText(ruleNameLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.ruleNameLabel.text")); // NOI18N
136 
137  ruleNameEditTextField.setEnabled(false);
138 
139  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
140  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.newRuleButton.text")); // NOI18N
141  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
142  public void actionPerformed(java.awt.event.ActionEvent evt) {
143  newRuleButtonActionPerformed(evt);
144  }
145  });
146 
147  org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.descriptionLabel.text")); // NOI18N
148 
149  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
150  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.editRuleButton.text")); // NOI18N
151  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
152  public void actionPerformed(java.awt.event.ActionEvent evt) {
153  editRuleButtonActionPerformed(evt);
154  }
155  });
156 
157  descriptionEditTextField.setEnabled(false);
158 
159  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
160  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.deleteRuleButton.text")); // NOI18N
161  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
162  public void actionPerformed(java.awt.event.ActionEvent evt) {
163  deleteRuleButtonActionPerformed(evt);
164  }
165  });
166 
167  fullPathsTable.setColumnSelectionAllowed(true);
168  fullPathsTable.setEnabled(false);
169  fullPathsTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
170  fullPathsTable.setShowHorizontalLines(false);
171  fullPathsTable.setShowVerticalLines(false);
172  fullPathsTable.getTableHeader().setReorderingAllowed(false);
173  fullPathsScrollPane.setViewportView(fullPathsTable);
174  fullPathsTable.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
175  if (fullPathsTable.getColumnModel().getColumnCount() > 0) {
176  fullPathsTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.fullPathsTable.columnModel.title0")); // NOI18N
177  }
178 
179  filenamesTable.setEnabled(false);
180  filenamesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
181  filenamesTable.setShowHorizontalLines(false);
182  filenamesTable.setShowVerticalLines(false);
183  filenamesTable.getTableHeader().setReorderingAllowed(false);
184  filenamesScrollPane.setViewportView(filenamesTable);
185  if (filenamesTable.getColumnModel().getColumnCount() > 0) {
186  filenamesTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.filenamesTable.columnModel.title0")); // NOI18N
187  }
188 
189  org.openide.awt.Mnemonics.setLocalizedText(shouldSaveCheckBox, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.shouldSaveCheckBox.text")); // NOI18N
190  shouldSaveCheckBox.setToolTipText(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.shouldSaveCheckBox.toolTipText")); // NOI18N
191  shouldSaveCheckBox.setEnabled(false);
192 
193  org.openide.awt.Mnemonics.setLocalizedText(shouldAlertCheckBox, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.shouldAlertCheckBox.text")); // NOI18N
194  shouldAlertCheckBox.setEnabled(false);
195 
196  folderNamesTable.setEnabled(false);
197  folderNamesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
198  folderNamesTable.setShowHorizontalLines(false);
199  folderNamesTable.setShowVerticalLines(false);
200  folderNamesTable.getTableHeader().setReorderingAllowed(false);
201  folderNamesScrollPane.setViewportView(folderNamesTable);
202  if (folderNamesTable.getColumnModel().getColumnCount() > 0) {
203  folderNamesTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.folderNamesTable.columnModel.title0")); // NOI18N
204  }
205 
206  org.openide.awt.Mnemonics.setLocalizedText(extensionsLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.extensionsLabel.text")); // NOI18N
207 
208  extensionsTextField.setEnabled(false);
209 
210  org.openide.awt.Mnemonics.setLocalizedText(filenamesLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.filenamesLabel.text")); // NOI18N
211 
212  configFileTextField.setToolTipText("");
213  configFileTextField.setEnabled(false);
214 
215  org.openide.awt.Mnemonics.setLocalizedText(ruleSetFileLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.ruleSetFileLabel.text")); // NOI18N
216 
217  org.openide.awt.Mnemonics.setLocalizedText(finalizeImageWriter, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.finalizeImageWriter.text")); // NOI18N
218  finalizeImageWriter.addActionListener(new java.awt.event.ActionListener() {
219  public void actionPerformed(java.awt.event.ActionEvent evt) {
220  finalizeImageWriterActionPerformed(evt);
221  }
222  });
223 
224  rulesTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
225  rulesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
226  rulesTable.setShowHorizontalLines(false);
227  rulesTable.setShowVerticalLines(false);
228  rulesTable.getTableHeader().setReorderingAllowed(false);
229  rulesTable.addMouseListener(new java.awt.event.MouseAdapter() {
230  public void mouseReleased(java.awt.event.MouseEvent evt) {
231  rulesTableMouseReleased(evt);
232  }
233  });
234  rulesTable.addKeyListener(new java.awt.event.KeyAdapter() {
235  public void keyReleased(java.awt.event.KeyEvent evt) {
236  rulesTableKeyReleased(evt);
237  }
238  });
239  rulesScrollPane.setViewportView(rulesTable);
240  if (rulesTable.getColumnModel().getColumnCount() > 0) {
241  rulesTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.rulesTable.columnModel.title0")); // NOI18N
242  rulesTable.getColumnModel().getColumn(1).setHeaderValue(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.rulesTable.columnModel.title1")); // NOI18N
243  }
244 
245  org.openide.awt.Mnemonics.setLocalizedText(folderNamesLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.folderNamesLabel.text")); // NOI18N
246 
247  org.openide.awt.Mnemonics.setLocalizedText(fileSizeLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.fileSizeLabel.text")); // NOI18N
248 
249  org.openide.awt.Mnemonics.setLocalizedText(minSizeLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.minSizeLabel.text")); // NOI18N
250 
251  minSizeTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,###; "))));
252  minSizeTextField.setEnabled(false);
253 
254  org.openide.awt.Mnemonics.setLocalizedText(maxSizeLabel, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.maxSizeLabel.text")); // NOI18N
255 
256  maxSizeTextField.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,###; "))));
257  maxSizeTextField.setEnabled(false);
258 
259  promptBeforeExit.setSelected(true);
260  org.openide.awt.Mnemonics.setLocalizedText(promptBeforeExit, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.promptBeforeExit.text")); // NOI18N
261  promptBeforeExit.setActionCommand(org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.promptBeforeExit.actionCommand")); // NOI18N
262  promptBeforeExit.addActionListener(new java.awt.event.ActionListener() {
263  public void actionPerformed(java.awt.event.ActionEvent evt) {
264  promptBeforeExitActionPerformed(evt);
265  }
266  });
267 
268  org.openide.awt.Mnemonics.setLocalizedText(createVHDCheckBox, org.openide.util.NbBundle.getMessage(ConfigVisualPanel2.class, "ConfigVisualPanel2.createVHDCheckBox.text")); // NOI18N
269  createVHDCheckBox.addActionListener(new java.awt.event.ActionListener() {
270  public void actionPerformed(java.awt.event.ActionEvent evt) {
271  createVHDCheckBoxActionPerformed(evt);
272  }
273  });
274 
275  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
276  this.setLayout(layout);
277  layout.setHorizontalGroup(
278  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
279  .addGroup(layout.createSequentialGroup()
280  .addGap(17, 17, 17)
281  .addComponent(ruleSetFileLabel)
282  .addGap(18, 18, 18)
283  .addComponent(configFileTextField)
284  .addContainerGap())
285  .addGroup(layout.createSequentialGroup()
286  .addContainerGap()
287  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
288  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
289  .addComponent(newRuleButton)
290  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
291  .addComponent(editRuleButton)
292  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
293  .addComponent(deleteRuleButton))
294  .addComponent(rulesScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 341, javax.swing.GroupLayout.PREFERRED_SIZE))
295  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
296  .addGroup(layout.createSequentialGroup()
297  .addGap(10, 10, 10)
298  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
299  .addGroup(layout.createSequentialGroup()
300  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
301  .addComponent(extensionsLabel)
302  .addComponent(filenamesLabel)
303  .addComponent(descriptionLabel)
304  .addComponent(ruleNameLabel)
305  .addComponent(fullPathsLabel)
306  .addComponent(folderNamesLabel))
307  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
308  .addGroup(layout.createSequentialGroup()
309  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
310  .addGroup(layout.createSequentialGroup()
311  .addGap(129, 129, 129)
312  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
313  .addComponent(ruleNameEditTextField, javax.swing.GroupLayout.Alignment.LEADING)
314  .addComponent(descriptionEditTextField, javax.swing.GroupLayout.Alignment.LEADING)
315  .addComponent(extensionsTextField, javax.swing.GroupLayout.Alignment.LEADING)
316  .addComponent(fullPathsScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
317  .addComponent(filenamesScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
318  .addComponent(folderNamesScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)))
319  .addGroup(layout.createSequentialGroup()
320  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
321  .addComponent(shouldSaveCheckBox)
322  .addComponent(shouldAlertCheckBox)
323  .addGroup(layout.createSequentialGroup()
324  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
325  .addComponent(modifiedDateLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
326  .addComponent(fileSizeLabel))
327  .addGap(4, 4, 4)
328  .addComponent(minSizeLabel)
329  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
330  .addComponent(minSizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
331  .addGap(18, 18, 18)
332  .addComponent(maxSizeLabel)
333  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
334  .addComponent(maxSizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE))
335  .addGroup(layout.createSequentialGroup()
336  .addGap(129, 129, 129)
337  .addComponent(modifiedWithinTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
338  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
339  .addComponent(daysIncludedLabel)))
340  .addGap(0, 0, Short.MAX_VALUE)))
341  .addContainerGap())))
342  .addGroup(layout.createSequentialGroup()
343  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
344  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
345  .addGroup(layout.createSequentialGroup()
346  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
347  .addComponent(flagEncryptionProgramsCheckBox)
348  .addComponent(finalizeImageWriter)
349  .addComponent(promptBeforeExit)
350  .addComponent(createVHDCheckBox))
351  .addGap(0, 0, Short.MAX_VALUE))
352  .addComponent(jSeparator1)))))
353  );
354 
355  layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteRuleButton, editRuleButton, newRuleButton});
356 
357  layout.setVerticalGroup(
358  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
359  .addGroup(layout.createSequentialGroup()
360  .addContainerGap()
361  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
362  .addComponent(configFileTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
363  .addComponent(ruleSetFileLabel))
364  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
365  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
366  .addGroup(layout.createSequentialGroup()
367  .addComponent(rulesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE)
368  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
369  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
370  .addComponent(newRuleButton)
371  .addComponent(editRuleButton)
372  .addComponent(deleteRuleButton))
373  .addContainerGap())
374  .addGroup(layout.createSequentialGroup()
375  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
376  .addGroup(layout.createSequentialGroup()
377  .addGap(30, 30, 30)
378  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
379  .addComponent(descriptionEditTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
380  .addComponent(descriptionLabel))
381  .addGap(9, 9, 9)
382  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
383  .addComponent(extensionsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
384  .addComponent(extensionsLabel)))
385  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
386  .addComponent(ruleNameEditTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
387  .addComponent(ruleNameLabel)))
388  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
389  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
390  .addComponent(filenamesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
391  .addComponent(filenamesLabel))
392  .addGap(16, 16, 16)
393  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
394  .addComponent(folderNamesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
395  .addComponent(folderNamesLabel))
396  .addGap(18, 18, 18)
397  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
398  .addComponent(fullPathsLabel)
399  .addComponent(fullPathsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
400  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
401  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
402  .addComponent(minSizeLabel)
403  .addComponent(minSizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
404  .addComponent(maxSizeLabel)
405  .addComponent(maxSizeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
406  .addComponent(fileSizeLabel))
407  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
408  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
409  .addComponent(modifiedDateLabel)
410  .addComponent(modifiedWithinTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
411  .addComponent(daysIncludedLabel))
412  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
413  .addComponent(shouldSaveCheckBox)
414  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
415  .addComponent(shouldAlertCheckBox)
416  .addGap(18, 18, 18)
417  .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
418  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
419  .addComponent(flagEncryptionProgramsCheckBox)
420  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
421  .addComponent(finalizeImageWriter)
422  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
423  .addComponent(promptBeforeExit)
424  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
425  .addComponent(createVHDCheckBox))))
426  );
427  }// </editor-fold>//GEN-END:initComponents
428 
429  private void rulesTableKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_rulesTableKeyReleased
430  updateForSelectedRule();
431  }//GEN-LAST:event_rulesTableKeyReleased
432 
433  @NbBundle.Messages({
434  "ConfigVisualPanel2.editRuleSet=Edit Rule",
435  "ConfigVisualPanel2.editRuleError=Edit rule error"
436  })
437  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
438  int row = rulesTable.getSelectedRow();
439  if (row != -1) {
440  String ruleName = (String) rulesTable.getModel().getValueAt(row, 0);
441  LogicalImagerRule rule = getRuleSetFromCurrentConfig().getRules().get(row);
442  EditRulePanel editPanel = new EditRulePanel(okButton, cancelButton, ruleName, rule);
443  editPanel.setEnabled(true);
444  editPanel.setVisible(true);
445 
446  while (true) {
447  int option = JOptionPane.showOptionDialog(this, editPanel.getPanel(), Bundle.ConfigVisualPanel2_editRuleSet(),
448  JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE,
449  null, new Object[]{okButton, cancelButton}, okButton);
450  if (option == JOptionPane.OK_OPTION) {
451  try {
452  ImmutablePair<String, LogicalImagerRule> ruleMap = editPanel.toRule();
453  if (!ruleName.equals(ruleMap.getKey()) && ruleExists(ruleMap)) {
454  JOptionPane.showMessageDialog(this,
455  Bundle.ConfigVisualPanel2_newRuleError_duplicateName(ruleMap.getKey()),
456  Bundle.ConfigVisualPanel2_editRuleError(),
457  JOptionPane.ERROR_MESSAGE);
458  continue;
459  }
460  updateRow(row, ruleMap);
461  break;
462  } catch (IOException | NumberFormatException ex) {
463  JOptionPane.showMessageDialog(this,
464  ex.getMessage(),
465  Bundle.ConfigVisualPanel2_editRuleError(),
466  JOptionPane.ERROR_MESSAGE);
467  // let user fix the error
468  }
469  } else {
470  break;
471  }
472  }
473  }
474  }//GEN-LAST:event_editRuleButtonActionPerformed
475 
476  @Messages({"ConfigVisualPanel2.newRule.name=New Rule",
477  "ConfigVisualPanel2.newRuleError.title=New rule error",
478  "# {0} - ruleName",
479  "ConfigVisualPanel2.newRuleError.duplicateName=A rule with name \"{0}\" already exists. Please enter a different rule name"})
480  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
481  NewRulePanel panel;
482  panel = new NewRulePanel(okButton, cancelButton);
483  panel.setEnabled(true);
484  panel.setVisible(true);
485 
486  while (true) {
487  int option = JOptionPane.showOptionDialog(this, panel, Bundle.ConfigVisualPanel2_newRule_name(),
488  JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE,
489  null, new Object[]{okButton, cancelButton}, okButton);
490  if (option == JOptionPane.OK_OPTION) {
491  try {
492 
493  ImmutablePair<String, LogicalImagerRule> ruleMap = panel.toRule();
494  if (ruleExists(ruleMap)) {
495  JOptionPane.showMessageDialog(this,
496  Bundle.ConfigVisualPanel2_newRuleError_duplicateName(ruleMap.getKey()),
497  Bundle.ConfigVisualPanel2_newRuleError_title(),
498  JOptionPane.ERROR_MESSAGE);
499  continue;
500  }
501  // Save the new rule
502  appendRow(ruleMap);
503  break;
504  } catch (IOException | NumberFormatException ex) {
505  JOptionPane.showMessageDialog(this,
506  ex.getMessage(),
507  Bundle.ConfigVisualPanel2_newRuleError_title(),
508  JOptionPane.ERROR_MESSAGE);
509  // let user fix the error
510  }
511  } else {
512  break;
513  }
514  }
515  }//GEN-LAST:event_newRuleButtonActionPerformed
516 
517  @NbBundle.Messages({
518  "ConfigVisualPanel2.deleteRuleSet=Delete rule ",
519  "ConfigVisualPanel2.deleteRuleSetConfirmation=Delete rule confirmation",})
520  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
521  int index = rulesTable.getSelectedRow();
522  if (index != -1) {
523  String ruleName = (String) rulesTable.getModel().getValueAt(index, 0);
524 
525  int option = JOptionPane.showOptionDialog(this,
526  Bundle.ConfigVisualPanel2_deleteRuleSet() + ruleName,
527  Bundle.ConfigVisualPanel2_deleteRuleSetConfirmation(),
528  JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
529  if (option == JOptionPane.NO_OPTION) {
530  return;
531  }
532 
533  getRuleSetFromCurrentConfig().getRules().remove(index);
534  updatePanel(configFilename, config);
535  if (rulesTable.getRowCount() > 0) {
536  rulesTable.setRowSelectionInterval(0, 0);
537  updateForSelectedRule();
538  }
539  }
540  }//GEN-LAST:event_deleteRuleButtonActionPerformed
541 
542  private void rulesTableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rulesTableMouseReleased
543  updateForSelectedRule();
544  }//GEN-LAST:event_rulesTableMouseReleased
545 
546  private void flagEncryptionProgramsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_flagEncryptionProgramsCheckBoxActionPerformed
547  flagEncryptionPrograms = flagEncryptionProgramsCheckBox.isSelected();
548  setEnabledEncryptionProgramsRule(flagEncryptionPrograms);
549  }//GEN-LAST:event_flagEncryptionProgramsCheckBoxActionPerformed
550 
551  private void finalizeImageWriterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finalizeImageWriterActionPerformed
552  config.setFinalizeImageWriter(finalizeImageWriter.isSelected());
553  }//GEN-LAST:event_finalizeImageWriterActionPerformed
554 
555  private void promptBeforeExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_promptBeforeExitActionPerformed
556  config.setPromptBeforeExit(promptBeforeExit.isSelected());
557  }//GEN-LAST:event_promptBeforeExitActionPerformed
558 
559  private void createVHDCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createVHDCheckBoxActionPerformed
560  config.setCreateVHD(createVHDCheckBox.isSelected());
561  }//GEN-LAST:event_createVHDCheckBoxActionPerformed
562 
570  private void setEnabledEncryptionProgramsRule(boolean flagEncryptionPrograms) {
571  if (flagEncryptionPrograms) {
572  // add the special rule
573  ImmutablePair<String, LogicalImagerRule> ruleMap = createEncryptionProgramsRule();
574  appendRow(ruleMap);
575  } else {
576  // remove it
577  int index = ((RulesTableModel) rulesTable.getModel()).findRow(EncryptionProgramsRule.getName());
578  if (index != -1) {
579  getRuleSetFromCurrentConfig().getRules().remove(index);
580  updatePanel(configFilename, config);
581  if (rulesTable.getRowCount() > 0) {
582  rulesTable.setRowSelectionInterval(0, 0);
583  updateForSelectedRule();
584  }
585  }
586  }
587  }
588 
589  /*
590  * Create an encryption programs rule
591  */
592  private ImmutablePair<String, LogicalImagerRule> createEncryptionProgramsRule() {
593  LogicalImagerRule.Builder builder = new LogicalImagerRule.Builder();
594  builder.getName(EncryptionProgramsRule.getName())
595  .getDescription(EncryptionProgramsRule.getDescription())
596  .getShouldAlert(true)
597  .getShouldSave(true)
598  .getFilenames(EncryptionProgramsRule.getFilenames());
599  LogicalImagerRule rule = builder.build();
600  return new ImmutablePair<>(EncryptionProgramsRule.getName(), rule);
601  }
602 
603  // Variables declaration - do not modify//GEN-BEGIN:variables
604  private javax.swing.JTextField configFileTextField;
605  private javax.swing.JCheckBox createVHDCheckBox;
606  private javax.swing.JLabel daysIncludedLabel;
607  private javax.swing.JButton deleteRuleButton;
608  private javax.swing.JTextField descriptionEditTextField;
609  private javax.swing.JLabel descriptionLabel;
610  private javax.swing.JButton editRuleButton;
611  private javax.swing.JLabel extensionsLabel;
612  private javax.swing.JTextField extensionsTextField;
613  private javax.swing.JLabel fileSizeLabel;
614  private javax.swing.JLabel filenamesLabel;
615  private javax.swing.JScrollPane filenamesScrollPane;
616  private javax.swing.JTable filenamesTable;
617  private javax.swing.JCheckBox finalizeImageWriter;
618  private javax.swing.JCheckBox flagEncryptionProgramsCheckBox;
619  private javax.swing.JLabel folderNamesLabel;
620  private javax.swing.JScrollPane folderNamesScrollPane;
621  private javax.swing.JTable folderNamesTable;
622  private javax.swing.JLabel fullPathsLabel;
623  private javax.swing.JScrollPane fullPathsScrollPane;
624  private javax.swing.JTable fullPathsTable;
625  private javax.swing.JSeparator jSeparator1;
626  private javax.swing.JLabel maxSizeLabel;
627  private javax.swing.JFormattedTextField maxSizeTextField;
628  private javax.swing.JLabel minSizeLabel;
629  private javax.swing.JFormattedTextField minSizeTextField;
630  private javax.swing.JLabel modifiedDateLabel;
631  private javax.swing.JTextField modifiedWithinTextField;
632  private javax.swing.JButton newRuleButton;
633  private javax.swing.JCheckBox promptBeforeExit;
634  private javax.swing.JTextField ruleNameEditTextField;
635  private javax.swing.JLabel ruleNameLabel;
636  private javax.swing.JLabel ruleSetFileLabel;
637  private javax.swing.JScrollPane rulesScrollPane;
638  private javax.swing.JTable rulesTable;
639  private javax.swing.JCheckBox shouldAlertCheckBox;
640  private javax.swing.JCheckBox shouldSaveCheckBox;
641  // End of variables declaration//GEN-END:variables
642 
643  private LogicalImagerRuleSet getRuleSetFromCurrentConfig() {
644  if (config.getRuleSets().isEmpty()) {
645  List<LogicalImagerRuleSet> ruleSets = new ArrayList<>();
646  ruleSets.add(new LogicalImagerRuleSet("no-set-name", new ArrayList<>())); // NON-NLS
647  config.setRuleSet(ruleSets);
648  }
649  return config.getRuleSets().get(0);
650  }
651 
659  private void updatePanel(String configFilePath, LogicalImagerConfig config, String rowSelectionkey) {
660  configFileTextField.setText(configFilePath);
661  finalizeImageWriter.setSelected(config.isFinalizeImageWriter());
662  promptBeforeExit.setSelected(config.isPromptBeforeExit());
663  createVHDCheckBox.setSelected(config.isCreateVHD());
664  LogicalImagerRuleSet ruleSet = getRuleSetFromCurrentConfig();
665  flagEncryptionProgramsCheckBox.setSelected(ruleSet.find(EncryptionProgramsRule.getName()) != null);
666  RulesTableModel rulesTableModel = new RulesTableModel();
667  int row = 0;
668  int selectThisRow = 0;
669 
670  Collections.sort(ruleSet.getRules(), new SortRuleByName());
671 
672  for (LogicalImagerRule rule : ruleSet.getRules()) {
673  rulesTableModel.setValueAt(rule.getName(), row, 0);
674  if (rowSelectionkey != null && rowSelectionkey.equals(rule.getName())) {
675  selectThisRow = row;
676  }
677  rulesTableModel.setValueAt(rule.getDescription(), row, 1);
678  rulesTableModel.setValueAt(rule, row, 2);
679  row++;
680  }
681  rulesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
682  rulesTable.setModel(rulesTableModel);
683  // If there are any rules, select the first one
684  if (rulesTableModel.getRowCount() > 0) {
685  rulesTable.setRowSelectionInterval(selectThisRow, selectThisRow);
686  updateForSelectedRule();
687  } else {
688  clearRuleDetails();
689  updateRuleButtons(false);
690  }
691  }
692 
699  private void updatePanel(String configFilePath, LogicalImagerConfig config) {
700  updatePanel(configFilePath, config, null);
701  }
702 
706  private void updateForSelectedRule() {
707  int index = rulesTable.getSelectedRow();
708  if (index != -1) {
709  String ruleName = (String) rulesTable.getModel().getValueAt(index, 0);
710  String description = (String) rulesTable.getModel().getValueAt(index, 1);
711  updateRuleDetails(ruleName, description);
712  updateRuleButtons(!ruleName.equals(EncryptionProgramsRule.getName()));
713  } else {
714  clearRuleDetails();
715  updateRuleButtons(false);
716  }
717  }
718 
725  private void updateRuleDetails(String ruleName, String description) {
726  clearRuleDetails();
727  LogicalImagerRule rule = getRuleSetFromCurrentConfig().find(ruleName);
728  shouldAlertCheckBox.setSelected(rule.isShouldAlert());
729  shouldSaveCheckBox.setSelected(rule.isShouldSave());
730  ruleNameEditTextField.setText(ruleName);
731  descriptionEditTextField.setText(description);
732  updateExtensions(rule.getExtensions());
733  updateList(filenamesTable, rule.getFilenames());
734  updateList(folderNamesTable, rule.getPaths());
735  updateList(fullPathsTable, rule.getFullPaths());
736  if (rule.getMinFileSize() == null) {
737  minSizeTextField.setText("");
738  } else {
739  minSizeTextField.setText(rule.getMinFileSize().toString());
740  }
741  if (rule.getMaxFileSize() == null) {
742  maxSizeTextField.setText("");
743  } else {
744  maxSizeTextField.setText(rule.getMaxFileSize().toString());
745  }
746  if (rule.getMinDays() == null) {
747  modifiedWithinTextField.setText("");
748  } else {
749  modifiedWithinTextField.setText(Integer.toString(rule.getMinDays()));
750  }
751  }
752 
756  private void clearRuleDetails() {
757  ruleNameEditTextField.setText("");
758  descriptionEditTextField.setText("");
759  extensionsTextField.setText("");
760  updateExtensions(null);
761  updateList(filenamesTable, null);
762  updateList(folderNamesTable, null);
763  updateList(fullPathsTable, null);
764  minSizeTextField.setText("");
765  maxSizeTextField.setText("");
766  modifiedWithinTextField.setText("");
767  shouldSaveCheckBox.setSelected(true);
768  shouldAlertCheckBox.setSelected(false);
769  }
770 
777  private void updateExtensions(List<String> extensions) {
778  extensionsTextField.setText("");
779  if (extensions == null) {
780  return;
781  }
782  String content = "";
783  boolean first = true;
784  for (String ext : extensions) {
785  content += (first ? "" : ",") + ext;
786  first = false;
787  }
788  extensionsTextField.setText(content);
789  }
790 
797  private void updateList(javax.swing.JTable jTable, List<String> list) {
798  SingleColumnTableModel tableModel = new SingleColumnTableModel();
799  jTable.setTableHeader(null);
800  if (list == null) {
801  jTable.setModel(tableModel);
802  return;
803  }
804  int row = 0;
805  for (String s : list) {
806  tableModel.setValueAt(s, row, 0);
807  row++;
808  }
809  jTable.setModel(tableModel);
810  }
811 
812  void setConfiguration(String configFilename, LogicalImagerConfig config) {
813  this.configFilename = configFilename;
814  this.config = config;
815  updatePanel(configFilename, config);
816  }
817 
818  private void updateRow(int index, ImmutablePair<String, LogicalImagerRule> ruleMap) {
819  getRuleSetFromCurrentConfig().getRules().remove(index);
820  getRuleSetFromCurrentConfig().getRules().add(ruleMap.getValue());
821  updatePanel(configFilename, config, ruleMap.getKey());
822  }
823 
831  private boolean ruleExists(ImmutablePair<String, LogicalImagerRule> ruleMap) {
832  for (LogicalImagerRule rule : getRuleSetFromCurrentConfig().getRules()) {
833  if (rule.getName().equals(ruleMap.getKey())) {
834  return true;
835  }
836  }
837  return false;
838  }
839 
840  private void appendRow(ImmutablePair<String, LogicalImagerRule> ruleMap) {
841  getRuleSetFromCurrentConfig().getRules().add(ruleMap.getValue());
842  updatePanel(configFilename, config, ruleMap.getKey());
843  }
844 
851  private void updateRuleButtons(boolean isRowSelected) {
852  newRuleButton.setEnabled(true);
853  editRuleButton.setEnabled(isRowSelected);
854  deleteRuleButton.setEnabled(isRowSelected);
855  }
856 
860  private class SortRuleByName implements Comparator<LogicalImagerRule> {
861 
862  @Override
863  public int compare(LogicalImagerRule a, LogicalImagerRule b) {
864  return a.getName().compareToIgnoreCase(b.getName());
865  }
866  }
867 
871  private class RulesTableModel extends AbstractTableModel {
872 
873  private static final long serialVersionUID = 1L;
874  private final List<String> ruleName = new ArrayList<>();
875  private final List<String> ruleDescription = new ArrayList<>();
876  private final List<LogicalImagerRule> rule = new ArrayList<>();
877 
878  int findRow(String name) {
879  return ruleName.indexOf(name);
880  }
881 
882  @Override
883  public int getRowCount() {
884  return ruleName.size();
885  }
886 
887  @Override
888  public int getColumnCount() {
889  return 2;
890  }
891 
892  @NbBundle.Messages({
893  "ConfigVisualPanel2.rulesTable.columnModel.title0=Rule Name",
894  "ConfigVisualPanel2.rulesTable.columnModel.title1=Description"
895  })
896  @Override
897  public String getColumnName(int column) {
898  String colName = null;
899  switch (column) {
900  case 0:
901  colName = Bundle.ConfigVisualPanel2_rulesTable_columnModel_title0();
902  break;
903  case 1:
904  colName = Bundle.ConfigVisualPanel2_rulesTable_columnModel_title1();
905  break;
906  default:
907  break;
908  }
909  return colName;
910  }
911 
912  @Override
913  public Object getValueAt(int rowIndex, int columnIndex) {
914  Object ret = null;
915  switch (columnIndex) {
916  case 0:
917  ret = ruleName.get(rowIndex);
918  break;
919  case 1:
920  ret = ruleDescription.get(rowIndex);
921  break;
922  case 2:
923  ret = rule.get(rowIndex);
924  break;
925  default:
926  throw new UnsupportedOperationException("Invalid table column index: " + columnIndex); //NON-NLS
927  }
928  return ret;
929  }
930 
931  @Override
932  public boolean isCellEditable(int rowIndex, int columnIndex) {
933  return false;
934  }
935 
936  @Override
937  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
938  switch (columnIndex) {
939  case 0:
940  ruleName.add((String) aValue);
941  break;
942  case 1:
943  ruleDescription.add((String) aValue);
944  break;
945  case 2:
946  rule.add((LogicalImagerRule) aValue);
947  break;
948  default:
949  throw new UnsupportedOperationException("Invalid table column index: " + columnIndex); //NON-NLS
950  }
951  // Only show the name and description column
952  if (columnIndex < 2) {
953  super.setValueAt(aValue, rowIndex, columnIndex);
954  }
955  }
956  }
957 
961  private class SingleColumnTableModel extends AbstractTableModel {
962 
963  private static final long serialVersionUID = 1L;
964 
965  private final List<String> list = new ArrayList<>();
966 
967  @Override
968  public int getRowCount() {
969  return list.size();
970  }
971 
972  @Override
973  public int getColumnCount() {
974  return 1;
975  }
976 
977  @Override
978  public String getColumnName(int column) {
979  return "";
980  }
981 
982  @Override
983  public Object getValueAt(int rowIndex, int columnIndex) {
984  Object ret = null;
985  if (columnIndex == 0) {
986  ret = list.get(rowIndex);
987  } else {
988  throw new UnsupportedOperationException("Invalid table column index: " + columnIndex); //NON-NLS
989  }
990  return ret;
991  }
992 
993  @Override
994  public boolean isCellEditable(int rowIndex, int columnIndex) {
995  return true;
996  }
997 
998  @Override
999  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
1000  if (columnIndex == 0) {
1001  list.add((String) aValue);
1002  } else {
1003  throw new UnsupportedOperationException("Invalid table column index: " + columnIndex); //NON-NLS
1004  }
1005  }
1006  }
1007 }

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.