Autopsy  4.10.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
IngestSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013-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.ingest;
20 
21 import java.text.NumberFormat;
22 import javax.swing.DefaultComboBoxModel;
23 import javax.swing.JFormattedTextField;
24 import javax.swing.event.DocumentEvent;
25 import javax.swing.event.DocumentListener;
26 import org.netbeans.spi.options.OptionsPanelController;
27 import org.openide.util.NbBundle;
29 
33 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
34 final class IngestSettingsPanel extends IngestModuleGlobalSettingsPanel {
35 
36  IngestSettingsPanel() {
37  initComponents();
38  int availableProcessors = Runtime.getRuntime().availableProcessors();
39  Integer fileIngestThreadCountChoices[];
40  int recommendedFileIngestThreadCount;
41  if (availableProcessors >= 8) {
42  fileIngestThreadCountChoices = new Integer[]{1, 2, 4, 6, 8};
43  recommendedFileIngestThreadCount = 4;
44  } else if (availableProcessors >= 6) {
45  fileIngestThreadCountChoices = new Integer[]{1, 2, 4, 6};
46  recommendedFileIngestThreadCount = 4;
47  } else if (availableProcessors >= 4) {
48  fileIngestThreadCountChoices = new Integer[]{1, 2, 4};
49  recommendedFileIngestThreadCount = 2;
50  } else if (availableProcessors >= 2) {
51  fileIngestThreadCountChoices = new Integer[]{1, 2};
52  recommendedFileIngestThreadCount = 1;
53  } else {
54  fileIngestThreadCountChoices = new Integer[]{1};
55  recommendedFileIngestThreadCount = 1;
56  }
57  numberOfFileIngestThreadsComboBox.setModel(new DefaultComboBoxModel<>(fileIngestThreadCountChoices));
58  restartRequiredLabel.setText(NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.restartRequiredLabel.text", recommendedFileIngestThreadCount));
59  // TODO listen to changes in form fields and call controller.changed()
60  DocumentListener docListener = new DocumentListener() {
61 
62  @Override
63  public void insertUpdate(DocumentEvent e) {
64  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
65  }
66 
67  @Override
68  public void removeUpdate(DocumentEvent e) {
69  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
70  }
71 
72  @Override
73  public void changedUpdate(DocumentEvent e) {
74  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
75  }
76  };
77  this.jFormattedTextFieldProcTimeOutHrs.getDocument().addDocumentListener(docListener);
78  this.ingestWarningLabel.setVisible(false);
79  }
80 
84  void load() {
85  numberOfFileIngestThreadsComboBox.setSelectedItem(UserPreferences.numberOfFileIngestThreads());
86  if (UserPreferences.getIsTimeOutEnabled()) {
87  // user specified time out
88  jCheckBoxEnableProcTimeout.setSelected(true);
89  jFormattedTextFieldProcTimeOutHrs.setEditable(true);
90  int timeOutHrs = UserPreferences.getProcessTimeOutHrs();
91  jFormattedTextFieldProcTimeOutHrs.setValue((long) timeOutHrs);
92  } else {
93  // never time out
94  jCheckBoxEnableProcTimeout.setSelected(false);
95  jFormattedTextFieldProcTimeOutHrs.setEditable(false);
96  int timeOutHrs = UserPreferences.getProcessTimeOutHrs();
97  jFormattedTextFieldProcTimeOutHrs.setValue((long) timeOutHrs);
98  }
99  }
100 
104  void store() {
105  UserPreferences.setNumberOfFileIngestThreads((Integer) numberOfFileIngestThreadsComboBox.getSelectedItem());
106 
107  UserPreferences.setIsTimeOutEnabled(jCheckBoxEnableProcTimeout.isSelected());
108  if (jCheckBoxEnableProcTimeout.isSelected()) {
109  // only store time out if it is enabled
110  long timeOutHrs = (long) jFormattedTextFieldProcTimeOutHrs.getValue();
111  UserPreferences.setProcessTimeOutHrs((int) timeOutHrs);
112  }
113  }
114 
115  boolean valid() {
116  return true;
117  }
118 
124  void enableButtons(boolean isEnabled) {
125  numberOfFileIngestThreadsComboBox.setEnabled(isEnabled);
126  jFormattedTextFieldProcTimeOutHrs.setEnabled(isEnabled);
127  jCheckBoxEnableProcTimeout.setEnabled(isEnabled);
128  ingestWarningLabel.setVisible(!isEnabled);
129  }
130 
136  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
137  private void initComponents() {
138 
139  jScrollPane1 = new javax.swing.JScrollPane();
140  jPanel1 = new javax.swing.JPanel();
141  jLabelNumThreads = new javax.swing.JLabel();
142  numberOfFileIngestThreadsComboBox = new javax.swing.JComboBox<>();
143  restartRequiredLabel = new javax.swing.JLabel();
144  jLabelSetProcessTimeOut = new javax.swing.JLabel();
145  jCheckBoxEnableProcTimeout = new javax.swing.JCheckBox();
146  jFormattedTextFieldProcTimeOutHrs = new JFormattedTextField(NumberFormat.getIntegerInstance());
147  jLabelProcessTimeOutUnits = new javax.swing.JLabel();
148  ingestWarningLabel = new javax.swing.JLabel();
149 
150  setPreferredSize(new java.awt.Dimension(693, 413));
151 
152  jScrollPane1.setBorder(null);
153 
154  jPanel1.setPreferredSize(new java.awt.Dimension(664, 400));
155 
156  org.openide.awt.Mnemonics.setLocalizedText(jLabelNumThreads, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.jLabelNumThreads.text")); // NOI18N
157 
158  numberOfFileIngestThreadsComboBox.addActionListener(new java.awt.event.ActionListener() {
159  public void actionPerformed(java.awt.event.ActionEvent evt) {
160  numberOfFileIngestThreadsComboBoxActionPerformed(evt);
161  }
162  });
163 
164  restartRequiredLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N
165  org.openide.awt.Mnemonics.setLocalizedText(restartRequiredLabel, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.restartRequiredLabel.text")); // NOI18N
166 
167  org.openide.awt.Mnemonics.setLocalizedText(jLabelSetProcessTimeOut, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.jLabelSetProcessTimeOut.text")); // NOI18N
168 
169  org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxEnableProcTimeout, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.jCheckBoxEnableProcTimeout.text")); // NOI18N
170  jCheckBoxEnableProcTimeout.addActionListener(new java.awt.event.ActionListener() {
171  public void actionPerformed(java.awt.event.ActionEvent evt) {
172  jCheckBoxEnableProcTimeoutActionPerformed(evt);
173  }
174  });
175 
176  jFormattedTextFieldProcTimeOutHrs.setText(org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.jFormattedTextFieldProcTimeOutHrs.text")); // NOI18N
177  jFormattedTextFieldProcTimeOutHrs.addActionListener(new java.awt.event.ActionListener() {
178  public void actionPerformed(java.awt.event.ActionEvent evt) {
179  jFormattedTextFieldProcTimeOutHrsActionPerformed(evt);
180  }
181  });
182 
183  org.openide.awt.Mnemonics.setLocalizedText(jLabelProcessTimeOutUnits, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.jLabelProcessTimeOutUnits.text")); // NOI18N
184 
185  ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
186  ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); // NOI18N
187  org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(IngestSettingsPanel.class, "IngestSettingsPanel.ingestWarningLabel.text")); // NOI18N
188 
189  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
190  jPanel1.setLayout(jPanel1Layout);
191  jPanel1Layout.setHorizontalGroup(
192  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
193  .addGroup(jPanel1Layout.createSequentialGroup()
194  .addContainerGap()
195  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
196  .addGroup(jPanel1Layout.createSequentialGroup()
197  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
198  .addGroup(jPanel1Layout.createSequentialGroup()
199  .addGap(10, 10, 10)
200  .addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
201  .addGap(18, 18, 18)
202  .addComponent(restartRequiredLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
203  .addGroup(jPanel1Layout.createSequentialGroup()
204  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
205  .addComponent(jLabelNumThreads)
206  .addComponent(jLabelSetProcessTimeOut)
207  .addGroup(jPanel1Layout.createSequentialGroup()
208  .addGap(10, 10, 10)
209  .addComponent(jCheckBoxEnableProcTimeout)
210  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
211  .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
212  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
213  .addComponent(jLabelProcessTimeOutUnits)))
214  .addGap(213, 213, 213)))
215  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
216  .addGroup(jPanel1Layout.createSequentialGroup()
217  .addComponent(ingestWarningLabel)
218  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
219  );
220  jPanel1Layout.setVerticalGroup(
221  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
222  .addGroup(jPanel1Layout.createSequentialGroup()
223  .addGap(30, 30, 30)
224  .addComponent(jLabelNumThreads)
225  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
226  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
227  .addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
228  .addComponent(restartRequiredLabel))
229  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
230  .addComponent(jLabelSetProcessTimeOut)
231  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
232  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
233  .addComponent(jCheckBoxEnableProcTimeout)
234  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
235  .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
236  .addComponent(jLabelProcessTimeOutUnits)))
237  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
238  .addComponent(ingestWarningLabel)
239  .addContainerGap(257, Short.MAX_VALUE))
240  );
241 
242  jScrollPane1.setViewportView(jPanel1);
243 
244  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
245  this.setLayout(layout);
246  layout.setHorizontalGroup(
247  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
248  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 691, Short.MAX_VALUE)
249  );
250  layout.setVerticalGroup(
251  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
252  .addComponent(jScrollPane1)
253  );
254  }// </editor-fold>//GEN-END:initComponents
255 
256  private void jFormattedTextFieldProcTimeOutHrsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jFormattedTextFieldProcTimeOutHrsActionPerformed
257  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
258  }//GEN-LAST:event_jFormattedTextFieldProcTimeOutHrsActionPerformed
259 
260  private void jCheckBoxEnableProcTimeoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxEnableProcTimeoutActionPerformed
261  jFormattedTextFieldProcTimeOutHrs.setEditable(jCheckBoxEnableProcTimeout.isSelected());
262  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
263  }//GEN-LAST:event_jCheckBoxEnableProcTimeoutActionPerformed
264 
265  private void numberOfFileIngestThreadsComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_numberOfFileIngestThreadsComboBoxActionPerformed
266  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
267  }//GEN-LAST:event_numberOfFileIngestThreadsComboBoxActionPerformed
268 
269  // Variables declaration - do not modify//GEN-BEGIN:variables
270  private javax.swing.JLabel ingestWarningLabel;
271  private javax.swing.JCheckBox jCheckBoxEnableProcTimeout;
272  private javax.swing.JFormattedTextField jFormattedTextFieldProcTimeOutHrs;
273  private javax.swing.JLabel jLabelNumThreads;
274  private javax.swing.JLabel jLabelProcessTimeOutUnits;
275  private javax.swing.JLabel jLabelSetProcessTimeOut;
276  private javax.swing.JPanel jPanel1;
277  private javax.swing.JScrollPane jScrollPane1;
278  private javax.swing.JComboBox<Integer> numberOfFileIngestThreadsComboBox;
279  private javax.swing.JLabel restartRequiredLabel;
280  // End of variables declaration//GEN-END:variables
281 
282  @Override
283  public void saveSettings() {
284  this.store();
285  }
286 }

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.