19 package org.sleuthkit.autopsy.keywordsearch;
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;
27 import javax.swing.JTable;
28 import javax.swing.ListSelectionModel;
29 import javax.swing.table.AbstractTableModel;
30 import javax.swing.table.TableColumn;
38 @SuppressWarnings(
"PMD.SingularField")
42 private final List<String> keywordListNames =
new ArrayList<>();
43 private final Map<String, Boolean> keywordListStates =
new HashMap<>();
44 private final XmlKeywordSearchList keywordListsManager = XmlKeywordSearchList.getCurrent();
47 initializeKeywordListSettings(initialSettings);
49 customizeComponents();
53 keywordListNames.clear();
54 keywordListStates.clear();
55 List<KeywordList> keywordLists = keywordListsManager.getListsL();
57 String listName = list.getName();
58 keywordListNames.add(listName);
59 keywordListStates.put(listName, settings.keywordListIsEnabled(listName));
64 customizeKeywordListsTable();
67 keywordListsManager.addPropertyChangeListener(
this);
68 languagesLabel.setText(
"<html>" +
org.openide.util.NbBundle.getMessage(
KeywordSearchJobSettingsPanel.class,
"KeywordSearchJobSettingsPanel.languagesLabel.text") +
"</html>");
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);
78 for (
int i = 0; i < listsTable.getColumnCount(); i++) {
79 column = listsTable.getColumnModel().getColumn(i);
81 column.setPreferredWidth(((
int) (width * 0.07)));
83 column.setPreferredWidth(((
int) (width * 0.92)));
89 List<SCRIPT> scripts = KeywordSearchSettings.getStringExtractScripts();
90 StringBuilder langs =
new StringBuilder();
91 langs.append(
"<html>");
92 for (
int i = 0; i < scripts.size(); i++) {
93 langs.append(scripts.get(i).toString());
94 if (i + 1 < scripts.size()) {
98 langs.append(
"</html>");
99 String langsS = langs.toString();
100 this.languagesValLabel.setText(langsS);
101 this.languagesValLabel.setToolTipText(langsS);
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");
111 if (utf16 == null || Boolean.parseBoolean(utf16)) {
112 encodingsList.add(
"UTF16");
114 String encodings = encodingsList.toString();
115 encodings = encodings.substring(1, encodings.length() - 1);
116 keywordSearchEncodings.setText(encodings);
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())) {
130 updateKeywordListSettings();
133 tableModel.fireTableDataChanged();
138 List<KeywordList> keywordLists = keywordListsManager.getListsL();
139 List<String> currentListNames =
new ArrayList<>();
141 currentListNames.add(list.getName());
145 for (String listName : keywordListNames) {
146 if (!currentListNames.contains(listName)) {
147 keywordListStates.remove(listName);
152 keywordListNames.clear();
153 for (String currentListName : currentListNames) {
154 keywordListNames.add(currentListName);
155 if (!keywordListStates.containsKey(currentListName)) {
156 keywordListStates.put(currentListName, Boolean.TRUE);
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);
169 disabledListNames.add(listName);
172 return new KeywordSearchJobSettings(enabledListNames, disabledListNames);
175 void reset(KeywordSearchJobSettings newSettings) {
176 initializeKeywordListSettings(newSettings);
179 tableModel.fireTableDataChanged();
197 if (columnIndex == 0) {
198 return keywordListStates.get(listName);
206 return columnIndex == 0;
210 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
212 if (columnIndex == 0) {
213 keywordListStates.put(listName, (Boolean) aValue);
219 return getValueAt(0, c).getClass();
228 @SuppressWarnings(
"unchecked")
230 private
void initComponents() {
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();
240 setPreferredSize(
new java.awt.Dimension(300, 170));
242 listsScrollPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
243 listsScrollPane.setPreferredSize(
new java.awt.Dimension(300, 100));
245 listsTable.setBackground(
new java.awt.Color(240, 240, 240));
246 listsTable.setModel(
new javax.swing.table.DefaultTableModel(
254 listsTable.setShowHorizontalLines(
false);
255 listsTable.setShowVerticalLines(
false);
256 listsScrollPane.setViewportView(listsTable);
261 languagesLabel.setToolTipText(
org.openide.util.NbBundle.getMessage(
KeywordSearchJobSettingsPanel.class,
"KeywordSearchJobSettingsPanel.languagesLabel.toolTipText"));
262 languagesLabel.setPreferredSize(
new java.awt.Dimension(294, 35));
263 languagesLabel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
265 languagesValLabel.setText(
org.openide.util.NbBundle.getMessage(
KeywordSearchJobSettingsPanel.class,
"KeywordSearchJobSettingsPanel.languagesValLabel.text"));
266 languagesValLabel.setToolTipText(
org.openide.util.NbBundle.getMessage(
KeywordSearchJobSettingsPanel.class,
"KeywordSearchJobSettingsPanel.languagesValLabel.toolTipText"));
270 keywordSearchEncodings.setText(
org.openide.util.NbBundle.getMessage(
KeywordSearchJobSettingsPanel.class,
"KeywordSearchJobSettingsPanel.keywordSearchEncodings.text"));
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()
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)
282 .addGroup(layout.createSequentialGroup()
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))))
296 layout.setVerticalGroup(
297 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
298 .addGroup(layout.createSequentialGroup()
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))
void customizeKeywordListsTable()
boolean isCellEditable(int rowIndex, int columnIndex)
void customizeComponents()
void updateKeywordListSettings()
void propertyChange(PropertyChangeEvent event)
javax.swing.JLabel encodingsLabel
void initializeKeywordListSettings(KeywordSearchJobSettings settings)
javax.swing.JLabel keywordSearchEncodings
javax.swing.JScrollPane listsScrollPane
javax.swing.JLabel languagesValLabel
void setValueAt(Object aValue, int rowIndex, int columnIndex)
javax.swing.JLabel titleLabel
javax.swing.JTable listsTable
javax.swing.JLabel languagesLabel
final List< String > keywordListNames
IngestModuleIngestJobSettings getSettings()
Object getValueAt(int rowIndex, int columnIndex)
Class<?> getColumnClass(int c)