Autopsy  4.7.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
KeywordSearchJobSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-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.keywordsearch;
20 
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27 import javax.swing.JTable;
28 import javax.swing.ListSelectionModel;
29 import javax.swing.table.AbstractTableModel;
30 import javax.swing.table.TableColumn;
34 
38 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
39 public final class KeywordSearchJobSettingsPanel extends IngestModuleIngestJobSettingsPanel implements PropertyChangeListener {
40 
41  private final KeywordListsTableModel tableModel = new KeywordListsTableModel();
42  private final List<String> keywordListNames = new ArrayList<>();
43  private final Map<String, Boolean> keywordListStates = new HashMap<>();
44  private final XmlKeywordSearchList keywordListsManager = XmlKeywordSearchList.getCurrent();
45 
46  KeywordSearchJobSettingsPanel(KeywordSearchJobSettings initialSettings) {
47  initializeKeywordListSettings(initialSettings);
48  initComponents();
49  customizeComponents();
50  }
51 
52  private void initializeKeywordListSettings(KeywordSearchJobSettings settings) {
53  keywordListNames.clear();
54  keywordListStates.clear();
55  List<KeywordList> keywordLists = keywordListsManager.getListsL();
56  for (KeywordList list : keywordLists) {
57  String listName = list.getName();
58  keywordListNames.add(listName);
59  keywordListStates.put(listName, settings.keywordListIsEnabled(listName));
60  }
61  }
62 
63  private void customizeComponents() {
64  customizeKeywordListsTable();
65  displayLanguages();
66  displayEncodings();
67  keywordListsManager.addPropertyChangeListener(this);
68  languagesLabel.setText("<html>" + org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.languagesLabel.text") + "</html>"); // NOI18N NON-NLS
69  }
70 
71  private void customizeKeywordListsTable() {
72  listsTable.setModel(tableModel);
73  listsTable.setTableHeader(null);
74  listsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
75  final int width = listsScrollPane.getPreferredSize().width;
76  listsTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
77  TableColumn column;
78  for (int i = 0; i < listsTable.getColumnCount(); i++) {
79  column = listsTable.getColumnModel().getColumn(i);
80  if (i == 0) {
81  column.setPreferredWidth(((int) (width * 0.07)));
82  } else {
83  column.setPreferredWidth(((int) (width * 0.92)));
84  }
85  }
86  }
87 
88  private void displayLanguages() {
89  List<SCRIPT> scripts = KeywordSearchSettings.getStringExtractScripts();
90  StringBuilder langs = new StringBuilder();
91  langs.append("<html>"); //NON-NLS
92  for (int i = 0; i < scripts.size(); i++) {
93  langs.append(scripts.get(i).toString());
94  if (i + 1 < scripts.size()) {
95  langs.append(", ");
96  }
97  }
98  langs.append("</html>"); //NON-NLS
99  String langsS = langs.toString();
100  this.languagesValLabel.setText(langsS);
101  this.languagesValLabel.setToolTipText(langsS);
102  }
103 
104  private void displayEncodings() {
105  String utf8 = KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString());
106  String utf16 = KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString());
107  ArrayList<String> encodingsList = new ArrayList<>();
108  if (utf8 == null || Boolean.parseBoolean(utf8)) {
109  encodingsList.add("UTF8");
110  }
111  if (utf16 == null || Boolean.parseBoolean(utf16)) {
112  encodingsList.add("UTF16"); //NON-NLS
113  }
114  String encodings = encodingsList.toString();
115  encodings = encodings.substring(1, encodings.length() - 1);
116  keywordSearchEncodings.setText(encodings);
117  }
118 
119  @Override
120  public void propertyChange(PropertyChangeEvent event) {
121  if (event.getPropertyName().equals(XmlKeywordSearchList.ListsEvt.LIST_ADDED.name())
122  || event.getPropertyName().equals(XmlKeywordSearchList.ListsEvt.LIST_DELETED.name())
123  || event.getPropertyName().equals(XmlKeywordSearchList.ListsEvt.LIST_UPDATED.name())
124  || event.getPropertyName().equals(XmlKeywordSearchList.LanguagesEvent.LANGUAGES_CHANGED.name())) {
125  update();
126  }
127  }
128 
129  private void update() {
130  updateKeywordListSettings();
131  displayLanguages();
132  displayEncodings();
133  tableModel.fireTableDataChanged();
134  }
135 
136  private void updateKeywordListSettings() {
137  // Get the names of the current set of keyword lists.
138  List<KeywordList> keywordLists = keywordListsManager.getListsL();
139  List<String> currentListNames = new ArrayList<>();
140  for (KeywordList list : keywordLists) {
141  currentListNames.add(list.getName());
142  }
143 
144  // Remove deleted lists from the list states map.
145  for (String listName : keywordListNames) {
146  if (!currentListNames.contains(listName)) {
147  keywordListStates.remove(listName);
148  }
149  }
150 
151  // Reset the names list and add any new lists to the states map.
152  keywordListNames.clear();
153  for (String currentListName : currentListNames) {
154  keywordListNames.add(currentListName);
155  if (!keywordListStates.containsKey(currentListName)) {
156  keywordListStates.put(currentListName, Boolean.TRUE);
157  }
158  }
159  }
160 
161  @Override
163  List<String> enabledListNames = new ArrayList<>();
164  List<String> disabledListNames = new ArrayList<>();
165  for (String listName : keywordListNames) {
166  if (keywordListStates.get(listName)) {
167  enabledListNames.add(listName);
168  } else {
169  disabledListNames.add(listName);
170  }
171  }
172  return new KeywordSearchJobSettings(enabledListNames, disabledListNames);
173  }
174 
175  void reset(KeywordSearchJobSettings newSettings) {
176  initializeKeywordListSettings(newSettings);
177  displayLanguages();
178  displayEncodings();
179  tableModel.fireTableDataChanged();
180  }
181 
182  private class KeywordListsTableModel extends AbstractTableModel {
183 
184  @Override
185  public int getRowCount() {
187  }
188 
189  @Override
190  public int getColumnCount() {
191  return 2;
192  }
193 
194  @Override
195  public Object getValueAt(int rowIndex, int columnIndex) {
196  String listName = KeywordSearchJobSettingsPanel.this.keywordListNames.get(rowIndex);
197  if (columnIndex == 0) {
198  return keywordListStates.get(listName);
199  } else {
200  return listName;
201  }
202  }
203 
204  @Override
205  public boolean isCellEditable(int rowIndex, int columnIndex) {
206  return columnIndex == 0;
207  }
208 
209  @Override
210  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
211  String listName = KeywordSearchJobSettingsPanel.this.keywordListNames.get(rowIndex);
212  if (columnIndex == 0) {
213  keywordListStates.put(listName, (Boolean) aValue);
214  }
215  }
216 
217  @Override
218  public Class<?> getColumnClass(int c) {
219  return getValueAt(0, c).getClass();
220  }
221  }
222 
228  @SuppressWarnings("unchecked")
229  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
230  private void initComponents() {
231 
232  listsScrollPane = new javax.swing.JScrollPane();
233  listsTable = new javax.swing.JTable();
234  titleLabel = new javax.swing.JLabel();
235  languagesLabel = new javax.swing.JLabel();
236  languagesValLabel = new javax.swing.JLabel();
237  encodingsLabel = new javax.swing.JLabel();
238  keywordSearchEncodings = new javax.swing.JLabel();
239 
240  setPreferredSize(new java.awt.Dimension(300, 170));
241 
242  listsScrollPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
243  listsScrollPane.setPreferredSize(new java.awt.Dimension(300, 100));
244 
245  listsTable.setBackground(new java.awt.Color(240, 240, 240));
246  listsTable.setModel(new javax.swing.table.DefaultTableModel(
247  new Object [][] {
248 
249  },
250  new String [] {
251 
252  }
253  ));
254  listsTable.setShowHorizontalLines(false);
255  listsTable.setShowVerticalLines(false);
256  listsScrollPane.setViewportView(listsTable);
257 
258  titleLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.titleLabel.text")); // NOI18N
259 
260  languagesLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.languagesLabel.text")); // NOI18N
261  languagesLabel.setToolTipText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.languagesLabel.toolTipText")); // NOI18N
262  languagesLabel.setPreferredSize(new java.awt.Dimension(294, 35));
263  languagesLabel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
264 
265  languagesValLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.languagesValLabel.text")); // NOI18N
266  languagesValLabel.setToolTipText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText")); // NOI18N
267 
268  encodingsLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.encodingsLabel.text")); // NOI18N
269 
270  keywordSearchEncodings.setText(org.openide.util.NbBundle.getMessage(KeywordSearchJobSettingsPanel.class, "KeywordSearchJobSettingsPanel.keywordSearchEncodings.text")); // NOI18N
271 
272  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
273  this.setLayout(layout);
274  layout.setHorizontalGroup(
275  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
276  .addGroup(layout.createSequentialGroup()
277  .addContainerGap()
278  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
279  .addGroup(layout.createSequentialGroup()
280  .addComponent(listsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
281  .addContainerGap())
282  .addGroup(layout.createSequentialGroup()
283  .addGap(10, 10, 10)
284  .addComponent(languagesValLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 274, javax.swing.GroupLayout.PREFERRED_SIZE)
285  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
286  .addComponent(languagesLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
287  .addGroup(layout.createSequentialGroup()
288  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
289  .addComponent(titleLabel)
290  .addGroup(layout.createSequentialGroup()
291  .addComponent(encodingsLabel)
292  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
293  .addComponent(keywordSearchEncodings)))
294  .addGap(0, 0, Short.MAX_VALUE))))
295  );
296  layout.setVerticalGroup(
297  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
298  .addGroup(layout.createSequentialGroup()
299  .addGap(7, 7, 7)
300  .addComponent(titleLabel)
301  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
302  .addComponent(listsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 41, Short.MAX_VALUE)
303  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
304  .addComponent(languagesLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
305  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
306  .addComponent(languagesValLabel)
307  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
308  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
309  .addComponent(encodingsLabel)
310  .addComponent(keywordSearchEncodings))
311  .addContainerGap())
312  );
313  }// </editor-fold>//GEN-END:initComponents
314  // Variables declaration - do not modify//GEN-BEGIN:variables
315  private javax.swing.JLabel encodingsLabel;
316  private javax.swing.JLabel keywordSearchEncodings;
317  private javax.swing.JLabel languagesLabel;
318  private javax.swing.JLabel languagesValLabel;
319  private javax.swing.JScrollPane listsScrollPane;
320  private javax.swing.JTable listsTable;
321  private javax.swing.JLabel titleLabel;
322  // End of variables declaration//GEN-END:variables
323 }

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jun 18 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.