19 package org.sleuthkit.autopsy.keywordsearch;
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;
28 import javax.swing.JCheckBox;
29 import org.netbeans.spi.options.OptionsPanelController;
39 @SuppressWarnings(
"PMD.SingularField")
40 class KeywordSearchGlobalLanguageSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
42 private final Map<String, StringExtract.StringExtractUnicodeTable.SCRIPT> scripts =
new HashMap<>();
43 private ActionListener updateLanguagesAction;
44 private List<SCRIPT> toUpdate;
46 KeywordSearchGlobalLanguageSettingsPanel() {
48 customizeComponents();
51 private void customizeComponents() {
52 updateLanguagesAction =
new ActionListener() {
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());
67 if (!PlatformUtil.isWindowsOS()) {
68 enableOcrCheckbox.setVisible(
false);
71 initScriptsCheckBoxes();
72 reloadScriptsCheckBoxes();
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);
83 private static String getLangText(SCRIPT script) {
84 StringBuilder sb =
new StringBuilder();
85 sb.append(script.toString()).append(
" (");
86 sb.append(script.getLanguages());
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() {
99 public void actionPerformed(ActionEvent e) {
100 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
103 ch.addActionListener(updateLanguagesAction);
105 ch.setSelected(
false);
106 scripts.put(text, s);
110 private void reloadScriptsCheckBoxes() {
112 = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString()));
114 enableUTF16Checkbox.setSelected(utf16);
117 = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString()));
118 enableUTF8Checkbox.setSelected(utf8);
120 boolean ocr = KeywordSearchSettings.getOcrOption();
121 enableOcrCheckbox.setSelected(ocr);
123 final List<SCRIPT> serviceScripts = KeywordSearchSettings.getStringExtractScripts();
124 final int components = checkPanel.getComponentCount();
126 for (
int i = 0; i < components; ++i) {
127 JCheckBox ch = (JCheckBox) checkPanel.getComponent(i);
129 StringExtract.StringExtractUnicodeTable.SCRIPT script = scripts.get(ch.getText());
131 ch.setSelected(serviceScripts.contains(script));
135 private void activateWidgets() {
136 reloadScriptsCheckBoxes();
139 = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF16.toString()));
141 enableUTF16Checkbox.setSelected(utf16);
144 = Boolean.parseBoolean(KeywordSearchSettings.getStringExtractOption(StringsTextExtractor.ExtractOptions.EXTRACT_UTF8.toString()));
145 enableUTF8Checkbox.setSelected(utf8);
146 final boolean extractEnabled = utf16 || utf8;
148 boolean ingestNotRunning = !IngestManager.getInstance().isIngestRunning() && !IngestManager.getInstance().isIngestRunning();
150 activateScriptsCheckboxes(extractEnabled && ingestNotRunning);
151 enableUTF16Checkbox.setEnabled(ingestNotRunning);
152 enableUTF8Checkbox.setEnabled(ingestNotRunning);
153 enableOcrCheckbox.setEnabled(ingestNotRunning);
161 @SuppressWarnings(
"unchecked")
163 private
void initComponents() {
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();
173 org.openide.awt.Mnemonics.setLocalizedText(languagesLabel,
org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class,
"KeywordSearchGlobalLanguageSettingsPanel.languagesLabel.text"));
175 langPanel.setPreferredSize(
new java.awt.Dimension(430, 361));
177 checkPanel.setPreferredSize(
new java.awt.Dimension(400, 361));
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)
185 checkPanelLayout.setVerticalGroup(
186 checkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187 .addGap(0, 378, Short.MAX_VALUE)
190 langPanel.setViewportView(checkPanel);
192 org.openide.awt.Mnemonics.setLocalizedText(enableUTF8Checkbox,
org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class,
"KeywordSearchGlobalLanguageSettingsPanel.enableUTF8Checkbox.text"));
193 enableUTF8Checkbox.addActionListener(
new java.awt.event.ActionListener() {
194 public void actionPerformed(java.awt.event.ActionEvent evt) {
195 enableUTF8CheckboxActionPerformed(evt);
199 org.openide.awt.Mnemonics.setLocalizedText(enableUTF16Checkbox,
org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class,
"KeywordSearchGlobalLanguageSettingsPanel.enableUTF16Checkbox.text"));
200 enableUTF16Checkbox.addActionListener(
new java.awt.event.ActionListener() {
201 public void actionPerformed(java.awt.event.ActionEvent evt) {
202 enableUTF16CheckboxActionPerformed(evt);
206 org.openide.awt.Mnemonics.setLocalizedText(ingestSettingsLabel,
org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class,
"KeywordSearchGlobalLanguageSettingsPanel.ingestSettingsLabel.text"));
208 org.openide.awt.Mnemonics.setLocalizedText(enableOcrCheckbox,
org.openide.util.NbBundle.getMessage(KeywordSearchGlobalLanguageSettingsPanel.class,
"KeywordSearchGlobalLanguageSettingsPanel.enableOcrCheckbox.text"));
209 enableOcrCheckbox.addActionListener(
new java.awt.event.ActionListener() {
210 public void actionPerformed(java.awt.event.ActionEvent evt) {
211 enableOcrCheckboxActionPerformed(evt);
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()
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()
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))
236 layout.setVerticalGroup(
237 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
238 .addGroup(layout.createSequentialGroup()
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)
255 private void enableUTF8CheckboxActionPerformed(java.awt.event.ActionEvent evt) {
257 boolean selected = this.enableUTF8Checkbox.isSelected();
259 activateScriptsCheckboxes(selected || this.enableUTF16Checkbox.isSelected());
260 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
264 private void enableUTF16CheckboxActionPerformed(java.awt.event.ActionEvent evt) {
266 boolean selected = this.enableUTF16Checkbox.isSelected();
268 activateScriptsCheckboxes(selected || this.enableUTF8Checkbox.isSelected());
269 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
272 private void enableOcrCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
273 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
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;
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());
294 if (toUpdate != null) {
295 KeywordSearchSettings.setStringExtractScripts(toUpdate);
299 XmlKeywordSearchList.getCurrent().fireLanguagesEvent(KeywordSearchList.LanguagesEvent.LANGUAGES_CHANGED);