19 package org.sleuthkit.autopsy.keywordsearch;
21 import java.awt.EventQueue;
22 import java.awt.event.ActionListener;
23 import java.awt.event.KeyEvent;
24 import java.beans.PropertyChangeEvent;
25 import java.beans.PropertyChangeListener;
27 import java.nio.file.Paths;
28 import java.util.ArrayList;
29 import java.util.List;
30 import javax.swing.JFileChooser;
31 import javax.swing.JOptionPane;
32 import javax.swing.event.ListSelectionEvent;
33 import javax.swing.event.ListSelectionListener;
34 import javax.swing.filechooser.FileNameExtensionFilter;
35 import javax.swing.table.AbstractTableModel;
36 import org.netbeans.spi.options.OptionsPanelController;
37 import org.openide.util.NbBundle;
47 @SuppressWarnings(
"PMD.SingularField")
48 class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPanel {
50 private static final long serialVersionUID = 1L;
51 private final KeywordListTableModel tableModel;
53 private final static String LAST_KEYWORD_LIST_PATH_KEY =
"KeyWordImport_List";
56 this.globalListSettingsPanel = gsp;
57 tableModel =
new KeywordListTableModel();
59 customizeComponents();
62 private void customizeComponents() {
63 listsTable.setAutoscrolls(
true);
64 listsTable.setTableHeader(null);
65 listsTable.setShowHorizontalLines(
false);
66 listsTable.setShowVerticalLines(
false);
67 listsTable.setDefaultRenderer(String.class,
new SimpleTableCellRenderer());
68 exportButton.setToolTipText(NbBundle.getMessage(
this.getClass(),
"KeywordSearchEditListPanel.customizeComponents.exportToFile"));
69 copyListButton.setToolTipText(NbBundle.getMessage(
this.getClass(),
"KeywordSearchEditListPanel.customizeComponents.saveCurrentWIthNewNameToolTip"));
70 listsTable.getParent().setBackground(listsTable.getBackground());
72 listsTable.setCellSelectionEnabled(
false);
73 listsTable.setRowSelectionAllowed(
true);
77 listsTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
79 public void valueChanged(ListSelectionEvent e) {
80 globalListSettingsPanel.setFocusOnKeywordTextBox();
85 IngestManager.getInstance().addIngestJobEventListener(
new PropertyChangeListener() {
87 public void propertyChange(PropertyChangeEvent evt) {
88 Object source = evt.getSource();
89 if (source instanceof String && ((String) source).equals(
"LOCAL")) {
90 EventQueue.invokeLater(() -> {
91 globalListSettingsPanel.setFocusOnKeywordTextBox();
99 void addDeleteButtonActionPerformed(ActionListener l) {
100 deleteListButton.addActionListener(l);
103 void addRenameButtonActionPerformed(ActionListener l) {
104 renameListButton.addActionListener(l);
107 void addCopyButtonActionPerformed(ActionListener l) {
108 copyListButton.addActionListener(l);
115 private void newKeywordListAction() {
116 XmlKeywordSearchList writer = XmlKeywordSearchList.getCurrent();
117 String listName =
"";
119 listName = (String) JOptionPane.showInputDialog(
this, NbBundle.getMessage(
this.getClass(),
"KeywordSearch.newKwListTitle"),
120 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.newKeywordListMsg"), JOptionPane.PLAIN_MESSAGE, null, null, listName);
122 if (listName == null || listName.trim().isEmpty()) {
125 boolean shouldAdd =
false;
126 if (writer.listExists(listName)) {
127 if (writer.getList(listName).isEditable()) {
128 boolean replace = KeywordSearchUtil.displayConfirmDialog(
129 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.newKeywordListMsg"),
130 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsManagementPanel.newKeywordListDescription", listName),
131 KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
136 boolean replace = KeywordSearchUtil.displayConfirmDialog(
137 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.newKeywordListMsg"),
138 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsManagementPanel.newKeywordListDescription2", listName),
139 KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
148 writer.addList(listName,
new ArrayList<>());
154 for (
int i = 0; i < listsTable.getRowCount(); i++) {
155 if (listsTable.getValueAt(i, 0).equals(listName)) {
156 listsTable.getSelectionModel().addSelectionInterval(i, i);
164 void setButtonStates() {
165 boolean isIngestRunning = IngestManager.getInstance().isIngestRunning();
166 boolean isListSelected = !listsTable.getSelectionModel().isSelectionEmpty();
167 boolean canEditList = isListSelected && !isIngestRunning;
168 boolean multiSelection =
false;
169 if (isListSelected) {
170 multiSelection = (listsTable.getSelectionModel().getMaxSelectionIndex() != listsTable.getSelectionModel().getMinSelectionIndex());
173 importButton.setEnabled(!isIngestRunning);
175 deleteListButton.setEnabled(canEditList);
176 renameListButton.setEnabled(canEditList);
177 renameListButton.setEnabled(canEditList && !multiSelection);
179 copyListButton.setEnabled(isListSelected);
180 copyListButton.setEnabled(isListSelected && !multiSelection);
181 exportButton.setEnabled(isListSelected);
189 @SuppressWarnings(
"unchecked")
191 private
void initComponents() {
193 jScrollPane1 =
new javax.swing.JScrollPane();
194 listsTable =
new javax.swing.JTable();
195 newListButton =
new javax.swing.JButton();
196 importButton =
new javax.swing.JButton();
197 keywordListsLabel =
new javax.swing.JLabel();
198 exportButton =
new javax.swing.JButton();
199 copyListButton =
new javax.swing.JButton();
200 deleteListButton =
new javax.swing.JButton();
201 renameListButton =
new javax.swing.JButton();
203 setMinimumSize(
new java.awt.Dimension(250, 0));
205 listsTable.setModel(tableModel);
206 listsTable.setMaximumSize(
new java.awt.Dimension(30000, 30000));
207 listsTable.setShowHorizontalLines(
false);
208 listsTable.setShowVerticalLines(
false);
209 listsTable.getTableHeader().setReorderingAllowed(
false);
210 listsTable.addKeyListener(
new java.awt.event.KeyAdapter() {
211 public void keyPressed(java.awt.event.KeyEvent evt) {
212 listsTableKeyPressed(evt);
215 jScrollPane1.setViewportView(listsTable);
217 newListButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/add16.png")));
218 newListButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.newListButton.text"));
219 newListButton.setIconTextGap(2);
220 newListButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
221 newListButton.setMaximumSize(
new java.awt.Dimension(111, 25));
222 newListButton.setMinimumSize(
new java.awt.Dimension(111, 25));
223 newListButton.addActionListener(
new java.awt.event.ActionListener() {
224 public void actionPerformed(java.awt.event.ActionEvent evt) {
225 newListButtonActionPerformed(evt);
229 importButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/import16.png")));
230 importButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.importButton.text"));
231 importButton.setIconTextGap(2);
232 importButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
233 importButton.setMaximumSize(
new java.awt.Dimension(111, 25));
234 importButton.setMinimumSize(
new java.awt.Dimension(111, 25));
235 importButton.addActionListener(
new java.awt.event.ActionListener() {
236 public void actionPerformed(java.awt.event.ActionEvent evt) {
237 importButtonActionPerformed(evt);
241 keywordListsLabel.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.keywordListsLabel.text"));
243 exportButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/export16.png")));
244 exportButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.exportButton.text"));
245 exportButton.setIconTextGap(2);
246 exportButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
247 exportButton.setMaximumSize(
new java.awt.Dimension(111, 25));
248 exportButton.setMinimumSize(
new java.awt.Dimension(111, 25));
249 exportButton.addActionListener(
new java.awt.event.ActionListener() {
250 public void actionPerformed(java.awt.event.ActionEvent evt) {
251 exportButtonActionPerformed(evt);
255 copyListButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/new16.png")));
256 copyListButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.copyListButton.text"));
257 copyListButton.setIconTextGap(2);
258 copyListButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
259 copyListButton.setMaximumSize(
new java.awt.Dimension(111, 25));
260 copyListButton.setMinimumSize(
new java.awt.Dimension(111, 25));
261 copyListButton.addActionListener(
new java.awt.event.ActionListener() {
262 public void actionPerformed(java.awt.event.ActionEvent evt) {
263 copyListButtonActionPerformed(evt);
267 deleteListButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/delete16.png")));
268 deleteListButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.deleteListButton.text"));
269 deleteListButton.setIconTextGap(2);
270 deleteListButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
271 deleteListButton.setMaximumSize(
new java.awt.Dimension(111, 25));
272 deleteListButton.setMinimumSize(
new java.awt.Dimension(111, 25));
273 deleteListButton.addActionListener(
new java.awt.event.ActionListener() {
274 public void actionPerformed(java.awt.event.ActionEvent evt) {
275 deleteListButtonActionPerformed(evt);
279 renameListButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/keywordsearch/edit16.png")));
280 renameListButton.setText(
org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class,
"GlobalListsManagementPanel.renameListButton.text"));
281 renameListButton.setIconTextGap(2);
282 renameListButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
283 renameListButton.setMaximumSize(
new java.awt.Dimension(111, 25));
284 renameListButton.setMinimumSize(
new java.awt.Dimension(111, 25));
285 renameListButton.addActionListener(
new java.awt.event.ActionListener() {
286 public void actionPerformed(java.awt.event.ActionEvent evt) {
287 renameListButtonActionPerformed(evt);
291 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
292 this.setLayout(layout);
293 layout.setHorizontalGroup(
294 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
295 .addGroup(layout.createSequentialGroup()
297 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
298 .addGroup(layout.createSequentialGroup()
299 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
300 .addComponent(newListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
301 .addComponent(copyListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
303 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
304 .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
305 .addComponent(renameListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
307 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
308 .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
309 .addComponent(deleteListButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
310 .addComponent(keywordListsLabel)
311 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
312 .addGap(12, 12, Short.MAX_VALUE))
315 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {copyListButton, deleteListButton, exportButton, importButton, newListButton, renameListButton});
317 layout.setVerticalGroup(
318 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
319 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
321 .addComponent(keywordListsLabel)
322 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
323 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE)
324 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
325 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
326 .addComponent(newListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
327 .addComponent(renameListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
328 .addComponent(deleteListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
330 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
331 .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
332 .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
333 .addComponent(copyListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
337 layout.linkSize(javax.swing.SwingConstants.VERTICAL,
new java.awt.Component[] {copyListButton, deleteListButton, exportButton, importButton, newListButton, renameListButton});
341 private void newListButtonActionPerformed(java.awt.event.ActionEvent evt) {
342 newKeywordListAction();
343 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
344 globalListSettingsPanel.setFocusOnKeywordTextBox();
347 private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {
348 String lastBaseDirectory = Paths.get(PlatformUtil.getUserConfigDirectory(),
"KeywordList").toString();
349 if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_KEYWORD_LIST_PATH_KEY)) {
350 lastBaseDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_KEYWORD_LIST_PATH_KEY);
352 File importFolder =
new File(lastBaseDirectory);
353 JFileChooser chooser =
new JFileChooser();
354 chooser.setCurrentDirectory(importFolder);
355 final String[] AUTOPSY_EXTENSIONS =
new String[]{
"xml"};
356 final String[] ENCASE_EXTENSIONS =
new String[]{
"txt"};
357 FileNameExtensionFilter autopsyFilter =
new FileNameExtensionFilter(
358 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsManagementPanel.fileExtensionFilterLbl"), AUTOPSY_EXTENSIONS);
359 FileNameExtensionFilter encaseFilter =
new FileNameExtensionFilter(
360 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsManagementPanel.fileExtensionFilterLb2"), ENCASE_EXTENSIONS);
361 chooser.addChoosableFileFilter(autopsyFilter);
362 chooser.addChoosableFileFilter(encaseFilter);
363 chooser.setAcceptAllFileFilterUsed(
false);
364 chooser.setMultiSelectionEnabled(
true);
365 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
367 String listName = null;
368 int returnVal = chooser.showOpenDialog(
this);
369 if (returnVal == JFileChooser.APPROVE_OPTION) {
370 File[] selFiles = chooser.getSelectedFiles();
372 for (File file : selFiles) {
378 String fileAbs = file.getAbsolutePath();
379 final KeywordSearchList reader;
381 if (KeywordSearchUtil.isXMLList(fileAbs)) {
382 reader =
new XmlKeywordSearchList(fileAbs);
384 reader =
new EnCaseKeywordSearchList(fileAbs);
387 if (!reader.load()) {
388 KeywordSearchUtil.displayDialog(
389 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(
this.getClass(),
"KeywordSearch.importListFileDialogMsg", fileAbs), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
393 List<KeywordList> toImport = reader.getListsL();
394 List<KeywordList> toImportConfirmed =
new ArrayList<>();
396 final XmlKeywordSearchList writer = XmlKeywordSearchList.getCurrent();
398 for (KeywordList list : toImport) {
400 listName = list.getName();
401 if (writer.listExists(listName)) {
403 if (toImport.size() == 1) {
404 options =
new String[]{NbBundle.getMessage(this.getClass(),
"KeywordSearch.yesOwMsg"),
405 NbBundle.getMessage(this.getClass(),
"KeywordSearch.cancelImportMsg")};
407 options =
new String[]{NbBundle.getMessage(this.getClass(),
"KeywordSearch.yesOwMsg"),
408 NbBundle.getMessage(this.getClass(),
"KeywordSearch.noSkipMsg"),
409 NbBundle.getMessage(this.getClass(),
"KeywordSearch.cancelImportMsg")};
411 int choice = JOptionPane.showOptionDialog(
this,
412 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.overwriteListPrompt", listName),
413 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.importOwConflict"),
414 JOptionPane.YES_NO_CANCEL_OPTION,
415 JOptionPane.QUESTION_MESSAGE,
419 if (choice == JOptionPane.OK_OPTION) {
420 toImportConfirmed.add(list);
421 }
else if (choice == JOptionPane.CANCEL_OPTION) {
427 toImportConfirmed.add(list);
432 if (toImportConfirmed.isEmpty()) {
436 if (!writer.writeLists(toImportConfirmed)) {
437 KeywordSearchUtil.displayDialog(
438 NbBundle.getMessage(
this.getClass(),
"KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(
this.getClass(),
"KeywordSearch.kwListFailImportMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
440 ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_KEYWORD_LIST_PATH_KEY, file.getParent());
446 if (listName != null) {
447 for (
int i = 0; i < listsTable.getRowCount(); i++) {
448 if (listsTable.getValueAt(i, 0).equals(listName)) {
449 listsTable.getSelectionModel().addSelectionInterval(i, i);
453 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
455 private void listsTableKeyPressed(java.awt.event.KeyEvent evt) {
456 if (evt.getKeyCode() == KeyEvent.VK_DELETE && !IngestManager.getInstance().isIngestRunning() && !listsTable.getSelectionModel().isSelectionEmpty()) {
457 if (KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(
this.getClass(),
"KeywordSearchConfigurationPanel1.customizeComponents.title"), NbBundle.getMessage(
this.getClass(),
"KeywordSearchConfigurationPanel1.customizeComponents.body"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN)) {
459 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
467 private void exportButtonActionPerformed(java.awt.event.ActionEvent evt) {
469 final String FEATURE_NAME = NbBundle.getMessage(this.getClass(),
470 "KeywordSearchEditListPanel.exportButtonAction.featureName.text");
472 JFileChooser chooser =
new JFileChooser();
473 final String EXTENSION =
"xml";
474 FileNameExtensionFilter filter =
new FileNameExtensionFilter(
475 NbBundle.getMessage(
this.getClass(),
"KeywordSearchEditListPanel.exportButtonActionPerformed.fileFilterLabel"), EXTENSION);
476 chooser.setFileFilter(filter);
477 String listName = listsTable.getValueAt(listsTable.getSelectedRow(), 0).toString();
479 chooser.setSelectedFile(
new File(listName));
480 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
482 int returnVal = chooser.showSaveDialog(
this);
483 if (returnVal == JFileChooser.APPROVE_OPTION) {
484 File selFile = chooser.getSelectedFile();
485 if (selFile == null) {
490 String fileAbs = selFile.getAbsolutePath();
491 if (!fileAbs.endsWith(
"." + EXTENSION)) {
492 fileAbs = fileAbs +
"." + EXTENSION;
493 selFile =
new File(fileAbs);
496 boolean shouldWrite =
true;
497 if (selFile.exists()) {
498 shouldWrite = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME,
499 NbBundle.getMessage(
this.getClass(),
"KeywordSearchEditListPanel.exportButtonActionPerformed.fileExistPrompt",
500 selFile.getName()), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
506 XmlKeywordSearchList reader = XmlKeywordSearchList.getCurrent();
508 List<KeywordList> toWrite =
new ArrayList<>();
510 for (
int index : listsTable.getSelectedRows()) {
511 toWrite.add(reader.getList(listsTable.getValueAt(index, 0).toString()));
514 final XmlKeywordSearchList exporter =
new XmlKeywordSearchList(fileAbs);
515 boolean written = exporter.saveLists(toWrite);
517 KeywordSearchUtil.displayDialog(FEATURE_NAME,
518 NbBundle.getMessage(
this.getClass(),
"KeywordSearchEditListPanel.exportButtonActionPerformed.kwListExportedMsg"),
519 KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
524 private void copyListButtonActionPerformed(java.awt.event.ActionEvent evt) {
525 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
528 private void deleteListButtonActionPerformed(java.awt.event.ActionEvent evt) {
529 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
532 private void renameListButtonActionPerformed(java.awt.event.ActionEvent evt) {
533 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
537 private javax.swing.JButton copyListButton;
538 private javax.swing.JButton deleteListButton;
539 private javax.swing.JButton exportButton;
540 private javax.swing.JButton importButton;
541 private javax.swing.JScrollPane jScrollPane1;
542 private javax.swing.JLabel keywordListsLabel;
543 private javax.swing.JTable listsTable;
544 private javax.swing.JButton newListButton;
545 private javax.swing.JButton renameListButton;
549 public void store() {
555 listsTable.clearSelection();
562 void deleteSelected() {
563 int[] selected = listsTable.getSelectedRows();
564 if (selected.length == 0) {
567 tableModel.deleteSelected(selected);
572 private static final long serialVersionUID = 1L;
574 private final XmlKeywordSearchList listsHandle = XmlKeywordSearchList.getCurrent();
583 return listsHandle.getNumberLists(
false);
588 return NbBundle.getMessage(this.getClass(),
"KeywordSearchListsManagementPanel.getColName.text");
593 return listsHandle.getListNames(
false).get(rowIndex);
602 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
603 throw new UnsupportedOperationException(
604 NbBundle.getMessage(
this.getClass(),
"KeywordSearchListsManagementPanel.setValueAt.exception.msg"));
609 return getValueAt(0, c).getClass();
613 void deleteSelected(
int[] selected) {
614 List<String> toDel =
new ArrayList<>();
615 for (
int i : selected) {
616 toDel.add(getValueAt(i, 0).toString());
618 for (String del : toDel) {
619 listsHandle.deleteList(del);
625 fireTableDataChanged();
629 void addListSelectionListener(ListSelectionListener l) {
630 listsTable.getSelectionModel().addListSelectionListener(l);
Object getValueAt(int rowIndex, int columnIndex)
void setValueAt(Object aValue, int rowIndex, int columnIndex)
Class<?> getColumnClass(int c)
String getColumnName(int column)
boolean isCellEditable(int rowIndex, int columnIndex)