Autopsy  4.8.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.GridLayout;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28 import javax.swing.JCheckBox;
29 import org.netbeans.spi.options.OptionsPanelController;
35 
39 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
40 class KeywordSearchGlobalLanguageSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
41 
42  private final Map<String, StringExtract.StringExtractUnicodeTable.SCRIPT> scripts = new HashMap<>();
43  private ActionListener updateLanguagesAction;
44  private List<SCRIPT> toUpdate;
45 
46  KeywordSearchGlobalLanguageSettingsPanel() {
47  initComponents();
48  customizeComponents();
49  }
50 
51  private void customizeComponents() {
52  updateLanguagesAction = new ActionListener() {
53  @Override
54  public void actionPerformed(ActionEvent e) {
55  toUpdate = new ArrayList<>();
56  final int components = checkPanel.getComponentCount();
57  for (int i = 0; i < components; ++i) {
58  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
59  if (ch.isSelected()) {
60  SCRIPT s = scripts.get(ch.getText());
61  toUpdate.add(s);
62  }
63  }
64  }
65  };
66 
67  if (!PlatformUtil.isWindowsOS()) {
68  enableOcrCheckbox.setVisible(false);
69  }
70 
71  initScriptsCheckBoxes();
72  reloadScriptsCheckBoxes();
73  }
74 
75  private void activateScriptsCheckboxes(boolean activate) {
76  final int components = checkPanel.getComponentCount();
77  for (int i = 0; i < components; ++i) {
78  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
79  ch.setEnabled(activate);
80  }
81  }
82 
83  private static String getLangText(SCRIPT script) {
84  StringBuilder sb = new StringBuilder();
85  sb.append(script.toString()).append(" (");
86  sb.append(script.getLanguages());
87  sb.append(")");
88  return sb.toString();
89  }
90 
91  private void initScriptsCheckBoxes() {
92  final List<StringExtract.StringExtractUnicodeTable.SCRIPT> supportedScripts = StringExtract.getSupportedScripts();
93  checkPanel.setLayout(new GridLayout(0, 1));
94  for (StringExtract.StringExtractUnicodeTable.SCRIPT s : supportedScripts) {
95  String text = getLangText(s);
96  JCheckBox ch = new JCheckBox(text);
97  ch.addActionListener(new ActionListener() {
98  @Override
99  public void actionPerformed(ActionEvent e) {
100  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
101  }
102  });
103  ch.addActionListener(updateLanguagesAction);
104  checkPanel.add(ch);
105  ch.setSelected(false);
106  scripts.put(text, s);
107  }
108  }
109 
110  private void reloadScriptsCheckBoxes() {
111  boolean utf16
112  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString()));
113 
114  enableUTF16Checkbox.setSelected(utf16);
115 
116  boolean utf8
117  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString()));
118  enableUTF8Checkbox.setSelected(utf8);
119 
120  boolean ocr = KeywordSearchSettings.getOcrOption();
121  enableOcrCheckbox.setSelected(ocr);
122 
123  final List<SCRIPT> serviceScripts = KeywordSearchSettings.getStringExtractScripts();
124  final int components = checkPanel.getComponentCount();
125 
126  for (int i = 0; i < components; ++i) {
127  JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
128 
129  StringExtract.StringExtractUnicodeTable.SCRIPT script = scripts.get(ch.getText());
130 
131  ch.setSelected(serviceScripts.contains(script));
132  }
133  }
134 
135  private void activateWidgets() {
136  reloadScriptsCheckBoxes();
137 
138  boolean utf16
139  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString()));
140 
141  enableUTF16Checkbox.setSelected(utf16);
142 
143  boolean utf8
144  = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString()));
145  enableUTF8Checkbox.setSelected(utf8);
146  final boolean extractEnabled = utf16 || utf8;
147 
148  boolean ingestNotRunning = !IngestManager.getInstance().isIngestRunning() && !IngestManager.getInstance().isIngestRunning();
149  //enable / disable checboxes
150  activateScriptsCheckboxes(extractEnabled && ingestNotRunning);
151  enableUTF16Checkbox.setEnabled(ingestNotRunning);
152  enableUTF8Checkbox.setEnabled(ingestNotRunning);
153  enableOcrCheckbox.setEnabled(ingestNotRunning);
154  }
155 
161  @SuppressWarnings("unchecked")
162  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
163  private void initComponents() {
164 
165  languagesLabel = new javax.swing.JLabel();
166  langPanel = new javax.swing.JScrollPane();
167  checkPanel = new javax.swing.JPanel();
168  enableUTF8Checkbox = new javax.swing.JCheckBox();
169  enableUTF16Checkbox = new javax.swing.JCheckBox();
170  ingestSettingsLabel = new javax.swing.JLabel();
171  enableOcrCheckbox = new javax.swing.JCheckBox();
172 
173  org.openide.awt.Mnemonics.setLocalizedText(languagesLabel, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text")); // NOI18N
174 
175  langPanel.setPreferredSize(new java.awt.Dimension(430, 361));
176 
177  checkPanel.setPreferredSize(new java.awt.Dimension(400, 361));
178 
179  javax.swing.GroupLayout checkPanelLayout = new javax.swing.GroupLayout(checkPanel);
180  checkPanel.setLayout(checkPanelLayout);
181  checkPanelLayout.setHorizontalGroup(
182  checkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
183  .addGap(0, 428, Short.MAX_VALUE)
184  );
185  checkPanelLayout.setVerticalGroup(
186  checkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187  .addGap(0, 378, Short.MAX_VALUE)
188  );
189 
190  langPanel.setViewportView(checkPanel);
191 
192  org.openide.awt.Mnemonics.setLocalizedText(enableUTF8Checkbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text")); // NOI18N
193  enableUTF8Checkbox.addActionListener(new java.awt.event.ActionListener() {
194  public void actionPerformed(java.awt.event.ActionEvent evt) {
195  enableUTF8CheckboxActionPerformed(evt);
196  }
197  });
198 
199  org.openide.awt.Mnemonics.setLocalizedText(enableUTF16Checkbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text")); // NOI18N
200  enableUTF16Checkbox.addActionListener(new java.awt.event.ActionListener() {
201  public void actionPerformed(java.awt.event.ActionEvent evt) {
202  enableUTF16CheckboxActionPerformed(evt);
203  }
204  });
205 
206  org.openide.awt.Mnemonics.setLocalizedText(ingestSettingsLabel, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text")); // NOI18N
207 
208  org.openide.awt.Mnemonics.setLocalizedText(enableOcrCheckbox, org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class, "KeywordSearchGlobalLanguageSettingsPanel.enableOcrCheckbox.text")); // NOI18N
209  enableOcrCheckbox.addActionListener(new java.awt.event.ActionListener() {
210  public void actionPerformed(java.awt.event.ActionEvent evt) {
211  enableOcrCheckboxActionPerformed(evt);
212  }
213  });
214 
215  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
216  this.setLayout(layout);
217  layout.setHorizontalGroup(
218  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
219  .addGroup(layout.createSequentialGroup()
220  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
221  .addGroup(layout.createSequentialGroup()
222  .addContainerGap()
223  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
224  .addComponent(ingestSettingsLabel)
225  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
226  .addComponent(languagesLabel, javax.swing.GroupLayout.Alignment.LEADING)
227  .addComponent(langPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
228  .addGroup(layout.createSequentialGroup()
229  .addGap(26, 26, 26)
230  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
231  .addComponent(enableUTF16Checkbox)
232  .addComponent(enableUTF8Checkbox)
233  .addComponent(enableOcrCheckbox))))
234  .addContainerGap(255, Short.MAX_VALUE))
235  );
236  layout.setVerticalGroup(
237  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
238  .addGroup(layout.createSequentialGroup()
239  .addContainerGap()
240  .addComponent(ingestSettingsLabel)
241  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
242  .addComponent(enableOcrCheckbox)
243  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
244  .addComponent(enableUTF16Checkbox)
245  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
246  .addComponent(enableUTF8Checkbox)
247  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
248  .addComponent(languagesLabel)
249  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
250  .addComponent(langPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
251  .addContainerGap())
252  );
253  }// </editor-fold>//GEN-END:initComponents
254 
255  private void enableUTF8CheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableUTF8CheckboxActionPerformed
256 
257  boolean selected = this.enableUTF8Checkbox.isSelected();
258 
259  activateScriptsCheckboxes(selected || this.enableUTF16Checkbox.isSelected());
260  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
261 
262  }//GEN-LAST:event_enableUTF8CheckboxActionPerformed
263 
264  private void enableUTF16CheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableUTF16CheckboxActionPerformed
265 
266  boolean selected = this.enableUTF16Checkbox.isSelected();
267 
268  activateScriptsCheckboxes(selected || this.enableUTF8Checkbox.isSelected());
269  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
270  }//GEN-LAST:event_enableUTF16CheckboxActionPerformed
271 
272  private void enableOcrCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableOcrCheckboxActionPerformed
273  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
274  }//GEN-LAST:event_enableOcrCheckboxActionPerformed
275 
276  // Variables declaration - do not modify//GEN-BEGIN:variables
277  private javax.swing.JPanel checkPanel;
278  private javax.swing.JCheckBox enableOcrCheckbox;
279  private javax.swing.JCheckBox enableUTF16Checkbox;
280  private javax.swing.JCheckBox enableUTF8Checkbox;
281  private javax.swing.JLabel ingestSettingsLabel;
282  private javax.swing.JScrollPane langPanel;
283  private javax.swing.JLabel languagesLabel;
284  // End of variables declaration//GEN-END:variables
285 
286  @Override
287  public void store() {
288  KeywordSearchSettings.setStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString(),
289  Boolean.toString(enableUTF8Checkbox.isSelected()));
290  KeywordSearchSettings.setStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString(),
291  Boolean.toString(enableUTF16Checkbox.isSelected()));
292  KeywordSearchSettings.setOcrOption(enableOcrCheckbox.isSelected());
293 
294  if (toUpdate != null) {
295  KeywordSearchSettings.setStringExtractScripts(toUpdate);
296  }
297 
298  // This is a stop-gap way of notifying the job settings panel of potential changes.
299  XmlKeywordSearchList.getCurrent().fireLanguagesEvent(KeywordSearchList.LanguagesEvent.LANGUAGES_CHANGED);
300  }
301 
302  @Override
303  public void load() {
304  activateWidgets();
305  }
306 }

Copyright © 2012-2018 Basis Technology. Generated on: Thu Oct 4 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.