Autopsy  4.10.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
KeywordSearchGlobalLanguageSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2012-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.awt.EventQueue;
22 import java.awt.GridLayout;
23 import java.awt.event.ActionEvent;
24 import java.awt.event.ActionListener;
25 import java.beans.PropertyChangeEvent;
26 import java.beans.PropertyChangeListener;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
30 import java.util.Map;
31 import javax.swing.JCheckBox;
32 import org.netbeans.spi.options.OptionsPanelController;
39 
43 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
44 class KeywordSearchGlobalLanguageSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
45 
46  private final Map<String, StringExtract.StringExtractUnicodeTable.SCRIPT> scripts = new HashMap<>();
47  private ActionListener updateLanguagesAction;
48  private List<SCRIPT> toUpdate;
49 
50  KeywordSearchGlobalLanguageSettingsPanel() {
51  initComponents();
52  customizeComponents();
53  }
54 
55  private void customizeComponents() {
56  updateLanguagesAction = new ActionListener() {
57  @Override
58  public void actionPerformed(ActionEvent e) {
59  toUpdate = new ArrayList<>();
60  final int components = checkPanel.getComponentCount();
61  for (int i = 0; i < components; ++i) {
62  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
63  if (ch.isSelected()) {
64  SCRIPT s = scripts.get(ch.getText());
65  toUpdate.add(s);
66  }
67  }
68  }
69  };
70 
71  initScriptsCheckBoxes();
72  reloadScriptsCheckBoxes();
73 
74  if (!PlatformUtil.isWindowsOS() || !PlatformUtil.is64BitOS()) {
75  enableOcrCheckbox.setText("Enable Optical Character Recognition (OCR) (Requires Windows 64-bit)");
76  enableOcrCheckbox.setSelected(false);
77  enableOcrCheckbox.setEnabled(false);
78  }
79 
80  //allow panel to toggle its enabled status while it is open based on ingest events
81  IngestManager.getInstance().addIngestJobEventListener(new PropertyChangeListener() {
82  @Override
83  public void propertyChange(PropertyChangeEvent evt) {
84  Object source = evt.getSource();
85  if (source instanceof String && ((String) source).equals("LOCAL")) { //NON-NLS
86  EventQueue.invokeLater(() -> {
87  activateWidgets();
88  });
89  }
90  }
91  });
92  }
93 
94  private void activateScriptsCheckboxes(boolean activate) {
95  final int components = checkPanel.getComponentCount();
96  for (int i = 0; i < components; ++i) {
97  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
98  ch.setEnabled(activate);
99  }
100  }
101 
102  private static String getLangText(SCRIPT script) {
103  StringBuilder sb = new StringBuilder();
104  sb.append(script.toString()).append(" (");
105  sb.append(script.getLanguages());
106  sb.append(")");
107  return sb.toString();
108  }
109 
110  private void initScriptsCheckBoxes() {
111  final List<StringExtract.StringExtractUnicodeTable.SCRIPT> supportedScripts = StringExtract.getSupportedScripts();
112  checkPanel.setLayout(new GridLayout(0, 1));
113  for (StringExtract.StringExtractUnicodeTable.SCRIPT s : supportedScripts) {
114  String text = getLangText(s);
115  JCheckBox ch = new JCheckBox(text);
116  ch.addActionListener(new ActionListener() {
117  @Override
118  public void actionPerformed(ActionEvent e) {
119  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
120  }
121  });
122  ch.addActionListener(updateLanguagesAction);
123  checkPanel.add(ch);
124  ch.setSelected(false);
125  scripts.put(text, s);
126  }
127  }
128 
129  private void reloadScriptsCheckBoxes() {
130  boolean utf16
131  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsExtractOptions.EXTRACT_UTF16.toString()));
132 
133  enableUTF16Checkbox.setSelected(utf16);
134 
135  boolean utf8
136  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsExtractOptions.EXTRACT_UTF8.toString()));
137  enableUTF8Checkbox.setSelected(utf8);
138 
139  boolean ocr = KeywordSearchSettings.getOcrOption();
140  enableOcrCheckbox.setSelected(ocr);
141 
142  final List<SCRIPT> serviceScripts = KeywordSearchSettings.getStringExtractScripts();
143  final int components = checkPanel.getComponentCount();
144 
145  for (int i = 0; i < components; ++i) {
146  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
147 
148  StringExtract.StringExtractUnicodeTable.SCRIPT script = scripts.get(ch.getText());
149 
150  ch.setSelected(serviceScripts.contains(script));
151  }
152  }
153 
154  private void activateWidgets() {
155  reloadScriptsCheckBoxes();
156 
157  boolean utf16
158  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsExtractOptions.EXTRACT_UTF16.toString()));
159 
160  enableUTF16Checkbox.setSelected(utf16);
161 
162  boolean utf8
163  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsExtractOptions.EXTRACT_UTF8.toString()));
164  enableUTF8Checkbox.setSelected(utf8);
165  final boolean extractEnabled = utf16 || utf8;
166 
167  boolean ingestRunning = IngestManager.getInstance().isIngestRunning();
168  //enable / disable checboxes
169  activateScriptsCheckboxes(extractEnabled && !ingestRunning);
170  ingestWarningLabel.setVisible(ingestRunning);
171  enableUTF16Checkbox.setEnabled(!ingestRunning);
172  enableUTF8Checkbox.setEnabled(!ingestRunning);
173  enableOcrCheckbox.setEnabled(!ingestRunning);
174  }
175 
181  @SuppressWarnings("unchecked")
182  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
183  private void initComponents() {
184 
185  languagesLabel = new javax.swing.JLabel();
186  langPanel = new javax.swing.JScrollPane();
187  checkPanel = new javax.swing.JPanel();
188  enableUTF8Checkbox = new javax.swing.JCheckBox();
189  enableUTF16Checkbox = new javax.swing.JCheckBox();
190  ingestSettingsLabel = new javax.swing.JLabel();
191  enableOcrCheckbox = new javax.swing.JCheckBox();
192  ingestWarningLabel = new javax.swing.JLabel();
193 
194  org.openide.awt.Mnemonics.setLocalizedText(languagesLabel, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text")); // NOI18N
195 
196  langPanel.setPreferredSize(new java.awt.Dimension(430, 361));
197 
198  checkPanel.setPreferredSize(new java.awt.Dimension(400, 361));
199 
200  javax.swing.GroupLayout checkPanelLayout = new javax.swing.GroupLayout(checkPanel);
201  checkPanel.setLayout(checkPanelLayout);
202  checkPanelLayout.setHorizontalGroup(
203  checkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204  .addGap(0, 428, Short.MAX_VALUE)
205  );
206  checkPanelLayout.setVerticalGroup(
207  checkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
208  .addGap(0, 378, Short.MAX_VALUE)
209  );
210 
211  langPanel.setViewportView(checkPanel);
212 
213  org.openide.awt.Mnemonics.setLocalizedText(enableUTF8Checkbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text")); // NOI18N
214  enableUTF8Checkbox.addActionListener(new java.awt.event.ActionListener() {
215  public void actionPerformed(java.awt.event.ActionEvent evt) {
216  enableUTF8CheckboxActionPerformed(evt);
217  }
218  });
219 
220  org.openide.awt.Mnemonics.setLocalizedText(enableUTF16Checkbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text")); // NOI18N
221  enableUTF16Checkbox.addActionListener(new java.awt.event.ActionListener() {
222  public void actionPerformed(java.awt.event.ActionEvent evt) {
223  enableUTF16CheckboxActionPerformed(evt);
224  }
225  });
226 
227  org.openide.awt.Mnemonics.setLocalizedText(ingestSettingsLabel, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text")); // NOI18N
228 
229  org.openide.awt.Mnemonics.setLocalizedText(enableOcrCheckbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableOcrCheckbox.text")); // NOI18N
230  enableOcrCheckbox.addActionListener(new java.awt.event.ActionListener() {
231  public void actionPerformed(java.awt.event.ActionEvent evt) {
232  enableOcrCheckboxActionPerformed(evt);
233  }
234  });
235 
236  ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
237  ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); // NOI18N
238  org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.ingestWarningLabel.text")); // NOI18N
239 
240  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
241  this.setLayout(layout);
242  layout.setHorizontalGroup(
243  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
244  .addGroup(layout.createSequentialGroup()
245  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
246  .addGroup(layout.createSequentialGroup()
247  .addContainerGap()
248  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
249  .addComponent(ingestSettingsLabel)
250  .addGroup(layout.createSequentialGroup()
251  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
252  .addComponent(languagesLabel, javax.swing.GroupLayout.Alignment.LEADING)
253  .addComponent(langPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
254  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
255  .addComponent(ingestWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE))))
256  .addGroup(layout.createSequentialGroup()
257  .addGap(26, 26, 26)
258  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
259  .addComponent(enableUTF16Checkbox)
260  .addComponent(enableUTF8Checkbox)
261  .addComponent(enableOcrCheckbox))))
262  .addContainerGap())
263  );
264  layout.setVerticalGroup(
265  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
266  .addGroup(layout.createSequentialGroup()
267  .addContainerGap()
268  .addComponent(ingestSettingsLabel)
269  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
270  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271  .addGroup(layout.createSequentialGroup()
272  .addComponent(enableOcrCheckbox)
273  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274  .addComponent(enableUTF16Checkbox)
275  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
276  .addComponent(enableUTF8Checkbox)
277  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
278  .addComponent(languagesLabel)
279  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
280  .addComponent(langPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE))
281  .addGroup(layout.createSequentialGroup()
282  .addGap(0, 0, Short.MAX_VALUE)
283  .addComponent(ingestWarningLabel)))
284  .addContainerGap())
285  );
286  }// </editor-fold>//GEN-END:initComponents
287 
288  private void enableUTF8CheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableUTF8CheckboxActionPerformed
289 
290  boolean selected = this.enableUTF8Checkbox.isSelected();
291 
292  activateScriptsCheckboxes(selected || this.enableUTF16Checkbox.isSelected());
293  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
294 
295  }//GEN-LAST:event_enableUTF8CheckboxActionPerformed
296 
297  private void enableUTF16CheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableUTF16CheckboxActionPerformed
298 
299  boolean selected = this.enableUTF16Checkbox.isSelected();
300 
301  activateScriptsCheckboxes(selected || this.enableUTF8Checkbox.isSelected());
302  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
303  }//GEN-LAST:event_enableUTF16CheckboxActionPerformed
304 
305  private void enableOcrCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableOcrCheckboxActionPerformed
306  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
307  }//GEN-LAST:event_enableOcrCheckboxActionPerformed
308 
309  // Variables declaration - do not modify//GEN-BEGIN:variables
310  private javax.swing.JPanel checkPanel;
311  private javax.swing.JCheckBox enableOcrCheckbox;
312  private javax.swing.JCheckBox enableUTF16Checkbox;
313  private javax.swing.JCheckBox enableUTF8Checkbox;
314  private javax.swing.JLabel ingestSettingsLabel;
315  private javax.swing.JLabel ingestWarningLabel;
316  private javax.swing.JScrollPane langPanel;
317  private javax.swing.JLabel languagesLabel;
318  // End of variables declaration//GEN-END:variables
319 
320  @Override
321  public void store() {
322  KeywordSearchSettings.setStringExtractOption(StringsExtractOptions.EXTRACT_UTF8.toString(),
323  Boolean.toString(enableUTF8Checkbox.isSelected()));
324  KeywordSearchSettings.setStringExtractOption(StringsExtractOptions.EXTRACT_UTF16.toString(),
325  Boolean.toString(enableUTF16Checkbox.isSelected()));
326  KeywordSearchSettings.setOcrOption(enableOcrCheckbox.isSelected());
327 
328  if (toUpdate != null) {
329  KeywordSearchSettings.setStringExtractScripts(toUpdate);
330  }
331 
332  // This is a stop-gap way of notifying the job settings panel of potential changes.
333  XmlKeywordSearchList.getCurrent().fireLanguagesEvent(KeywordSearchList.LanguagesEvent.LANGUAGES_CHANGED);
334  }
335 
336  @Override
337  public void load() {
338  activateWidgets();
339  }
340 }

Copyright © 2012-2018 Basis Technology. Generated on: Fri Mar 22 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.