19 package org.sleuthkit.autopsy.corecomponents;
21 import java.awt.image.BufferedImage;
23 import java.io.IOException;
24 import java.lang.management.ManagementFactory;
25 import java.nio.charset.Charset;
26 import java.nio.file.Files;
27 import java.nio.file.InvalidPathException;
28 import java.nio.file.Path;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Optional;
32 import java.util.logging.Level;
33 import java.util.regex.Matcher;
34 import java.util.regex.Pattern;
35 import java.util.stream.Collectors;
36 import java.util.stream.Stream;
37 import javax.imageio.ImageIO;
38 import javax.swing.ImageIcon;
39 import javax.swing.JFileChooser;
40 import javax.swing.JOptionPane;
41 import javax.swing.SwingUtilities;
42 import javax.swing.event.DocumentEvent;
43 import javax.swing.event.DocumentListener;
44 import org.apache.commons.io.FileUtils;
45 import org.apache.commons.lang3.StringUtils;
46 import org.apache.tools.ant.types.Commandline;
47 import org.netbeans.spi.options.OptionsPanelController;
48 import org.openide.util.NbBundle;
50 import org.openide.util.NbBundle.Messages;
66 "AutopsyOptionsPanel.invalidImageFile.msg=The selected file was not able to be used as an agency logo.",
67 "AutopsyOptionsPanel.invalidImageFile.title=Invalid Image File",
68 "AutopsyOptionsPanel.memFieldValidationLabel.not64BitInstall.text=JVM memory settings only enabled for 64 bit version",
69 "AutopsyOptionsPanel.memFieldValidationLabel.noValueEntered.text=No value entered",
70 "AutopsyOptionsPanel.memFieldValidationLabel.invalidCharacters.text=Invalid characters, value must be a positive integer",
71 "# {0} - minimumMemory",
72 "AutopsyOptionsPanel.memFieldValidationLabel.underMinMemory.text=Value must be at least {0}GB",
73 "# {0} - systemMemory",
74 "AutopsyOptionsPanel.memFieldValidationLabel.overMaxMemory.text=Value must be less than the total system memory of {0}GB",
75 "AutopsyOptionsPanel.memFieldValidationLabel.developerMode.text=Memory settings are not available while running in developer mode",
76 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidPath.text=Path is not valid.",
77 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidImageSpecified.text=Invalid image file specified.",
78 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.pathNotSet.text=Agency logo path must be set.",
79 "AutopsyOptionsPanel.logNumAlert.invalidInput.text=A positive integer is required here." 81 @SuppressWarnings(
"PMD.SingularField")
82 final class AutopsyOptionsPanel extends javax.swing.JPanel {
84 private static final long serialVersionUID = 1L;
85 private static final String DEFAULT_HEAP_DUMP_FILE_FIELD =
"";
86 private JFileChooser logoFileChooser;
87 private JFileChooser tempDirChooser;
88 private static final String ETC_FOLDER_NAME =
"etc";
89 private static final String CONFIG_FILE_EXTENSION =
".conf";
90 private static final long ONE_BILLION = 1000000000L;
91 private static final int MEGA_IN_GIGA = 1024;
92 private static final int JVM_MEMORY_STEP_SIZE_MB = 512;
93 private static final int MIN_MEMORY_IN_GB = 2;
94 private static final Logger logger = Logger.getLogger(AutopsyOptionsPanel.class.getName());
95 private String initialMemValue = Long.toString(Runtime.getRuntime().maxMemory() / ONE_BILLION);
97 private final ReportBranding reportBranding;
98 private JFileChooser heapFileChooser;
100 private final JFileChooserFactory logoChooserHelper =
new JFileChooserFactory();
101 private final JFileChooserFactory heapChooserHelper =
new JFileChooserFactory();
102 private final JFileChooserFactory tempChooserHelper =
new JFileChooserFactory();
107 AutopsyOptionsPanel() {
109 if (!isJVMHeapSettingsCapable()) {
114 memField.setEnabled(
false);
115 heapDumpFileField.setEnabled(
false);
116 heapDumpBrowseButton.setEnabled(
false);
117 solrMaxHeapSpinner.setEnabled(
false);
119 systemMemoryTotal.setText(Long.toString(getSystemMemoryInGB()));
122 solrMaxHeapSpinner.setModel(
new javax.swing.SpinnerNumberModel(UserPreferences.getMaxSolrVMSize(),
123 JVM_MEMORY_STEP_SIZE_MB, ((int) getSystemMemoryInGB()) * MEGA_IN_GIGA, JVM_MEMORY_STEP_SIZE_MB));
125 agencyLogoPathField.getDocument().addDocumentListener(
new TextFieldListener(null));
126 heapDumpFileField.getDocument().addDocumentListener(
new TextFieldListener(this::isHeapPathValid));
127 tempCustomField.getDocument().addDocumentListener(
new TextFieldListener(this::evaluateTempDirState));
128 logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
130 reportBranding =
new ReportBranding();
137 private static boolean isJVMHeapSettingsCapable() {
138 return PlatformUtil.is64BitJVM() && Version.getBuildType() != Version.Type.DEVELOPMENT;
147 private long getSystemMemoryInGB() {
148 long memorySize = ((com.sun.management.OperatingSystemMXBean) ManagementFactory
149 .getOperatingSystemMXBean()).getTotalPhysicalMemorySize();
150 return memorySize / ONE_BILLION;
160 private long getCurrentJvmMaxMemoryInGB(String confFileMemValue)
throws IOException {
163 if (confFileMemValue.length() > 1) {
164 units = confFileMemValue.charAt(confFileMemValue.length() - 1);
166 value = Long.parseLong(confFileMemValue.substring(0, confFileMemValue.length() - 1));
167 }
catch (NumberFormatException ex) {
168 throw new IOException(
"Unable to properly parse memory number.", ex);
171 throw new IOException(
"No memory setting found in String: " + confFileMemValue);
180 return value / MEGA_IN_GIGA;
182 throw new IOException(
"Units were not recognized as parsed: " + units);
195 private static File getInstallFolderConfFile() throws IOException {
196 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
197 String installFolder = PlatformUtil.getInstallPath();
198 File installFolderEtc =
new File(installFolder, ETC_FOLDER_NAME);
199 File installFolderConfigFile =
new File(installFolderEtc, confFileName);
200 if (!installFolderConfigFile.exists()) {
201 throw new IOException(
"Conf file could not be found" + installFolderConfigFile.toString());
203 return installFolderConfigFile;
213 private static File getUserFolderConfFile() {
214 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
215 File userFolder = PlatformUtil.getUserDirectory();
216 File userEtcFolder =
new File(userFolder, ETC_FOLDER_NAME);
217 if (!userEtcFolder.exists()) {
218 userEtcFolder.mkdir();
220 return new File(userEtcFolder, confFileName);
223 private static final String JVM_SETTINGS_REGEX_PARAM =
"options";
224 private static final String JVM_SETTINGS_REGEX_STR =
"^\\s*default_options\\s*=\\s*\"?(?<" + JVM_SETTINGS_REGEX_PARAM +
">.+?)\"?\\s*$";
225 private static final Pattern JVM_SETTINGS_REGEX = Pattern.compile(JVM_SETTINGS_REGEX_STR);
226 private static final String XMX_REGEX_PARAM =
"mem";
227 private static final String XMX_REGEX_STR =
"^\\s*\\-J\\-Xmx(?<" + XMX_REGEX_PARAM +
">.+?)\\s*$";
228 private static final Pattern XMX_REGEX = Pattern.compile(XMX_REGEX_STR);
229 private static final String HEAP_DUMP_REGEX_PARAM =
"path";
230 private static final String HEAP_DUMP_REGEX_STR =
"^\\s*\\-J\\-XX:HeapDumpPath=(\\\")?\\s*(?<" + HEAP_DUMP_REGEX_PARAM +
">.+?)\\s*(\\\")?$";
231 private static final Pattern HEAP_DUMP_REGEX = Pattern.compile(HEAP_DUMP_REGEX_STR);
244 private static String updateConfLine(String line, String memText, String heapText) {
245 Matcher match = JVM_SETTINGS_REGEX.matcher(line);
248 String[] parsedArgs = Commandline.translateCommandline(match.group(JVM_SETTINGS_REGEX_PARAM));
250 String memString =
"-J-Xmx" + memText.replaceAll(
"[^\\d]",
"") +
"g";
253 String heapString = null;
254 if (StringUtils.isNotBlank(heapText)) {
255 while (heapText.endsWith(
"\\") && heapText.length() > 0) {
256 heapText = heapText.substring(0, heapText.length() - 1);
259 heapString = String.format(
"-J-XX:HeapDumpPath=\"%s\"", heapText);
262 Stream<String> argsNoMemHeap = Stream.of(parsedArgs)
264 .filter(s -> !s.matches(XMX_REGEX_STR) && !s.matches(HEAP_DUMP_REGEX_STR));
266 String newArgs = Stream.concat(argsNoMemHeap, Stream.of(memString, heapString))
267 .filter(s -> s != null)
268 .collect(Collectors.joining(
" "));
270 return String.format(
"default_options=\"%s\"", newArgs);
285 private void writeEtcConfFile() throws IOException {
286 String fileText = readConfFile(getInstallFolderConfFile()).stream()
287 .map((line) -> updateConfLine(line, memField.getText(), heapDumpFileField.getText()))
288 .collect(Collectors.joining(
"\n"));
290 FileUtils.writeStringToFile(getUserFolderConfFile(), fileText,
"UTF-8");
306 ConfValues(String XmxVal, String heapDumpPath) {
307 this.XmxVal = XmxVal;
308 this.heapDumpPath = heapDumpPath;
323 String getHeapDumpPath() {
333 private ConfValues getEtcConfValues()
throws IOException {
334 File userConfFile = getUserFolderConfFile();
335 String[] args = userConfFile.exists() ?
336 getDefaultsFromFileContents(readConfFile(userConfFile)) :
337 getDefaultsFromFileContents(readConfFile(getInstallFolderConfFile()));
339 String heapFile =
"";
342 for (String arg : args) {
343 Matcher memMatch = XMX_REGEX.matcher(arg);
344 if (memMatch.find()) {
345 memSize = memMatch.group(XMX_REGEX_PARAM);
349 Matcher heapFileMatch = HEAP_DUMP_REGEX.matcher(arg);
350 if (heapFileMatch.find()) {
351 heapFile = heapFileMatch.group(HEAP_DUMP_REGEX_PARAM);
366 "AutopsyOptionsPanel_isHeapPathValid_selectValidDirectory=Please select an existing directory.",
367 "AutopsyOptionsPanel_isHeapPathValid_developerMode=Cannot change heap dump path while in developer mode.",
368 "AutopsyOptionsPanel_isHeapPathValid_not64BitMachine=Changing heap dump path settings only enabled for 64 bit version.",
369 "AutopsyOPtionsPanel_isHeapPathValid_illegalCharacters=Please select a path with no quotes." 371 private boolean isHeapPathValid() {
373 heapFieldValidationLabel.setVisible(
true);
374 heapFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_isHeapPathValid_developerMode());
379 heapFieldValidationLabel.setVisible(
true);
380 heapFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_isHeapPathValid_not64BitMachine());
385 if (StringUtils.isNotBlank(heapDumpFileField.getText())) {
386 String heapText = heapDumpFileField.getText().trim();
387 if (heapText.contains(
"\"") || heapText.contains(
"'")) {
388 heapFieldValidationLabel.setVisible(
true);
389 heapFieldValidationLabel.setText(Bundle.AutopsyOPtionsPanel_isHeapPathValid_illegalCharacters());
393 File curHeapFile =
new File(heapText);
394 if (!curHeapFile.exists() || !curHeapFile.isDirectory()) {
395 heapFieldValidationLabel.setVisible(
true);
396 heapFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_isHeapPathValid_selectValidDirectory());
401 heapFieldValidationLabel.setVisible(
false);
402 heapFieldValidationLabel.setText(
"");
415 private static List<String> readConfFile(File configFile) {
416 List<String> lines =
new ArrayList<>();
417 if (null != configFile) {
418 Path filePath = configFile.toPath();
419 Charset charset = Charset.forName(
"UTF-8");
421 lines = Files.readAllLines(filePath, charset);
422 }
catch (IOException e) {
423 logger.log(Level.SEVERE,
"Error reading config file contents. {}", configFile.getAbsolutePath());
440 private static String[] getDefaultsFromFileContents(List<String> list) {
441 Optional<String> defaultSettings = list.stream()
442 .filter(line -> line.matches(JVM_SETTINGS_REGEX_STR))
445 if (defaultSettings.isPresent()) {
446 Matcher match = JVM_SETTINGS_REGEX.matcher(defaultSettings.get());
448 return Commandline.translateCommandline(match.group(JVM_SETTINGS_REGEX_PARAM));
452 return new String[]{};
455 private void evaluateTempDirState() {
457 boolean customSelected = tempCustomRadio.isSelected();
459 tempDirectoryBrowseButton.setEnabled(!caseOpen && customSelected);
460 tempCustomField.setEnabled(!caseOpen && customSelected);
462 tempOnCustomNoPath.setVisible(customSelected && StringUtils.isBlank(tempCustomField.getText()));
469 String path = reportBranding.getAgencyLogoPath();
470 boolean useDefault = (path == null || path.isEmpty());
471 defaultLogoRB.setSelected(useDefault);
472 specifyLogoRB.setSelected(!useDefault);
473 agencyLogoPathField.setEnabled(!useDefault);
474 browseLogosButton.setEnabled(!useDefault);
479 tempCaseRadio.setSelected(
true);
482 tempCustomRadio.setSelected(
true);
486 tempLocalRadio.setSelected(
true);
490 evaluateTempDirState();
495 updateAgencyLogo(path);
496 }
catch (IOException ex) {
497 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex);
500 boolean confLoaded =
false;
501 if (isJVMHeapSettingsCapable()) {
504 heapDumpFileField.setText(confValues.getHeapDumpPath());
505 initialMemValue = Long.toString(getCurrentJvmMaxMemoryInGB(confValues.getXmxVal()));
507 }
catch (IOException ex) {
508 logger.log(Level.SEVERE,
"Can't read current Jvm max memory setting from file", ex);
509 memField.setEnabled(
false);
510 heapDumpFileField.setText(DEFAULT_HEAP_DUMP_FILE_FIELD);
512 memField.setText(initialMemValue);
515 heapDumpBrowseButton.setEnabled(confLoaded);
516 heapDumpFileField.setEnabled(confLoaded);
522 private void setTempDirEnabled() {
525 this.tempCaseRadio.setEnabled(enabled);
526 this.tempCustomRadio.setEnabled(enabled);
527 this.tempLocalRadio.setEnabled(enabled);
529 this.tempDirectoryWarningLabel.setVisible(!enabled);
530 evaluateTempDirState();
540 private void updateAgencyLogo(String path)
throws IOException {
541 agencyLogoPathField.setText(path);
542 ImageIcon agencyLogoIcon =
new ImageIcon();
543 agencyLogoPreview.setText(NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
544 if (!agencyLogoPathField.getText().isEmpty()) {
545 File file =
new File(agencyLogoPathField.getText());
547 BufferedImage image = ImageIO.read(file);
549 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
551 agencyLogoIcon =
new ImageIcon(image.getScaledInstance(64, 64, 4));
552 agencyLogoPreview.setText(
"");
555 agencyLogoPreview.setIcon(agencyLogoIcon);
556 agencyLogoPreview.repaint();
560 "AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory",
562 "AutopsyOptionsPanel_storeTempDir_onError_description=There was an error creating the temporary directory on the filesystem at: {0}.",
563 "AutopsyOptionsPanel_storeTempDir_onChoiceError_title=Error Saving Temporary Directory Choice",
564 "AutopsyOptionsPanel_storeTempDir_onChoiceError_description=There was an error updating temporary directory choice selection.",})
565 private void storeTempDir() {
566 String tempDirectoryPath = tempCustomField.getText();
571 logger.log(Level.WARNING,
"There was an error creating the temporary directory defined by the user: " + tempDirectoryPath, ex);
572 SwingUtilities.invokeLater(() -> {
573 JOptionPane.showMessageDialog(
this,
574 String.format(
"<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onError_description(tempDirectoryPath)),
575 Bundle.AutopsyOptionsPanel_storeTempDir_onError_title(),
576 JOptionPane.ERROR_MESSAGE);
582 if (tempCaseRadio.isSelected()) {
584 }
else if (tempCustomRadio.isSelected()) {
594 logger.log(Level.WARNING,
"There was an error updating choice to: " + choice.name(), ex);
595 SwingUtilities.invokeLater(() -> {
596 JOptionPane.showMessageDialog(
this,
597 String.format(
"<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onChoiceError_description()),
598 Bundle.AutopsyOptionsPanel_storeTempDir_onChoiceError_title(),
599 JOptionPane.ERROR_MESSAGE);
612 if (!agencyLogoPathField.getText().isEmpty()) {
613 File file =
new File(agencyLogoPathField.getText());
615 reportBranding.setAgencyLogoPath(agencyLogoPathField.getText());
618 reportBranding.setAgencyLogoPath(
"");
621 if (isJVMHeapSettingsCapable()) {
624 }
catch (IOException ex) {
636 boolean agencyValid = isAgencyLogoPathValid();
637 boolean memFieldValid = isMemFieldValid();
638 boolean logNumValid = isLogNumFieldValid();
639 boolean heapPathValid = isHeapPathValid();
641 return agencyValid && memFieldValid && logNumValid && heapPathValid;
650 boolean isAgencyLogoPathValid() {
651 boolean valid =
true;
653 if (defaultLogoRB.isSelected()) {
654 agencyLogoPathFieldValidationLabel.setText(
"");
656 String agencyLogoPath = agencyLogoPathField.getText();
657 if (agencyLogoPath.isEmpty()) {
658 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_pathNotSet_text());
661 File file =
new File(agencyLogoPathField.getText());
662 if (file.exists() && file.isFile()) {
665 image = ImageIO.read(file);
667 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
669 agencyLogoPathFieldValidationLabel.setText(
"");
670 }
catch (IOException | IndexOutOfBoundsException ignored) {
671 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidImageSpecified_text());
675 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidPath_text());
689 private boolean isMemFieldValid() {
690 String memText = memField.getText();
691 memFieldValidationLabel.setText(
"");
693 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_not64BitInstall_text());
698 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_developerMode_text());
702 if (memText.length() == 0) {
703 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_noValueEntered_text());
706 if (memText.replaceAll(
"[^\\d]",
"").length() != memText.length()) {
707 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_invalidCharacters_text());
710 int parsedInt = Integer.parseInt(memText);
711 if (parsedInt < MIN_MEMORY_IN_GB) {
712 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_underMinMemory_text(MIN_MEMORY_IN_GB));
715 if (parsedInt > getSystemMemoryInGB()) {
716 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_overMaxMemory_text(getSystemMemoryInGB()));
727 private boolean isLogNumFieldValid() {
728 String count = logFileCount.getText();
729 logNumAlert.setText(
"");
731 int count_num = Integer.parseInt(count);
733 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
736 }
catch (NumberFormatException e) {
737 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
756 this.onChange = onChange;
760 if (onChange != null) {
764 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
791 private void initComponents() {
792 java.awt.GridBagConstraints gridBagConstraints;
794 fileSelectionButtonGroup =
new javax.swing.ButtonGroup();
795 displayTimesButtonGroup =
new javax.swing.ButtonGroup();
796 logoSourceButtonGroup =
new javax.swing.ButtonGroup();
797 tempDirChoiceGroup =
new javax.swing.ButtonGroup();
798 jScrollPane1 =
new javax.swing.JScrollPane();
799 javax.swing.JPanel mainPanel =
new javax.swing.JPanel();
800 logoPanel =
new javax.swing.JPanel();
801 agencyLogoPathField =
new javax.swing.JTextField();
802 browseLogosButton =
new javax.swing.JButton();
803 agencyLogoPreview =
new javax.swing.JLabel();
804 defaultLogoRB =
new javax.swing.JRadioButton();
805 specifyLogoRB =
new javax.swing.JRadioButton();
806 agencyLogoPathFieldValidationLabel =
new javax.swing.JLabel();
807 runtimePanel =
new javax.swing.JPanel();
808 maxMemoryLabel =
new javax.swing.JLabel();
809 maxMemoryUnitsLabel =
new javax.swing.JLabel();
810 totalMemoryLabel =
new javax.swing.JLabel();
811 systemMemoryTotal =
new javax.swing.JLabel();
812 restartNecessaryWarning =
new javax.swing.JLabel();
813 memField =
new javax.swing.JTextField();
814 memFieldValidationLabel =
new javax.swing.JLabel();
815 maxMemoryUnitsLabel1 =
new javax.swing.JLabel();
816 maxLogFileCount =
new javax.swing.JLabel();
817 logFileCount =
new javax.swing.JTextField();
818 logNumAlert =
new javax.swing.JTextField();
819 maxSolrMemoryLabel =
new javax.swing.JLabel();
820 maxMemoryUnitsLabel2 =
new javax.swing.JLabel();
821 solrMaxHeapSpinner =
new javax.swing.JSpinner();
822 solrJVMHeapWarning =
new javax.swing.JLabel();
823 heapFileLabel =
new javax.swing.JLabel();
824 heapDumpFileField =
new javax.swing.JTextField();
825 heapDumpBrowseButton =
new javax.swing.JButton();
826 heapFieldValidationLabel =
new javax.swing.JLabel();
827 tempDirectoryPanel =
new javax.swing.JPanel();
828 tempCustomField =
new javax.swing.JTextField();
829 tempDirectoryBrowseButton =
new javax.swing.JButton();
830 tempDirectoryWarningLabel =
new javax.swing.JLabel();
831 tempLocalRadio =
new javax.swing.JRadioButton();
832 tempCaseRadio =
new javax.swing.JRadioButton();
833 tempCustomRadio =
new javax.swing.JRadioButton();
834 tempOnCustomNoPath =
new javax.swing.JLabel();
835 rdpPanel =
new javax.swing.JPanel();
836 javax.swing.JScrollPane sizingScrollPane =
new javax.swing.JScrollPane();
837 javax.swing.JTextPane sizingTextPane =
new javax.swing.JTextPane();
838 javax.swing.Box.Filler filler1 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
839 javax.swing.Box.Filler filler2 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 32767));
841 jScrollPane1.setBorder(null);
843 mainPanel.setMinimumSize(
new java.awt.Dimension(648, 382));
844 mainPanel.setLayout(
new java.awt.GridBagLayout());
846 logoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logoPanel.border.title")));
848 agencyLogoPathField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathField.text"));
850 org.openide.awt.Mnemonics.setLocalizedText(browseLogosButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.browseLogosButton.text"));
851 browseLogosButton.addActionListener(
new java.awt.event.ActionListener() {
852 public void actionPerformed(java.awt.event.ActionEvent evt) {
853 browseLogosButtonActionPerformed(evt);
857 agencyLogoPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
858 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPreview,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
859 agencyLogoPreview.setBorder(javax.swing.BorderFactory.createEtchedBorder());
860 agencyLogoPreview.setMaximumSize(
new java.awt.Dimension(64, 64));
861 agencyLogoPreview.setMinimumSize(
new java.awt.Dimension(64, 64));
862 agencyLogoPreview.setPreferredSize(
new java.awt.Dimension(64, 64));
864 logoSourceButtonGroup.add(defaultLogoRB);
865 org.openide.awt.Mnemonics.setLocalizedText(defaultLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.defaultLogoRB.text"));
866 defaultLogoRB.addActionListener(
new java.awt.event.ActionListener() {
867 public void actionPerformed(java.awt.event.ActionEvent evt) {
868 defaultLogoRBActionPerformed(evt);
872 logoSourceButtonGroup.add(specifyLogoRB);
873 org.openide.awt.Mnemonics.setLocalizedText(specifyLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.specifyLogoRB.text"));
874 specifyLogoRB.addActionListener(
new java.awt.event.ActionListener() {
875 public void actionPerformed(java.awt.event.ActionEvent evt) {
876 specifyLogoRBActionPerformed(evt);
880 agencyLogoPathFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
881 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPathFieldValidationLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text"));
883 javax.swing.GroupLayout logoPanelLayout =
new javax.swing.GroupLayout(logoPanel);
884 logoPanel.setLayout(logoPanelLayout);
885 logoPanelLayout.setHorizontalGroup(
886 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
887 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
889 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
890 .addComponent(specifyLogoRB)
891 .addComponent(defaultLogoRB))
892 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
893 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
894 .addComponent(agencyLogoPathFieldValidationLabel)
895 .addGroup(logoPanelLayout.createSequentialGroup()
896 .addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
897 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
898 .addComponent(browseLogosButton)))
899 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
900 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
901 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
903 logoPanelLayout.setVerticalGroup(
904 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
905 .addGroup(logoPanelLayout.createSequentialGroup()
907 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
908 .addComponent(defaultLogoRB)
909 .addComponent(agencyLogoPathFieldValidationLabel))
910 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
911 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
912 .addComponent(specifyLogoRB)
913 .addComponent(agencyLogoPathField)
914 .addComponent(browseLogosButton)))
915 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
916 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
917 .addGap(0, 0, Short.MAX_VALUE))
920 gridBagConstraints =
new java.awt.GridBagConstraints();
921 gridBagConstraints.gridx = 0;
922 gridBagConstraints.gridy = 2;
923 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
924 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
925 mainPanel.add(logoPanel, gridBagConstraints);
927 runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.runtimePanel.border.title")));
929 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryLabel.text"));
931 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
933 org.openide.awt.Mnemonics.setLocalizedText(totalMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.totalMemoryLabel.text"));
935 systemMemoryTotal.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
937 restartNecessaryWarning.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
938 org.openide.awt.Mnemonics.setLocalizedText(restartNecessaryWarning,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.restartNecessaryWarning.text"));
940 memField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
941 memField.addKeyListener(
new java.awt.event.KeyAdapter() {
942 public void keyReleased(java.awt.event.KeyEvent evt) {
943 memFieldKeyReleased(evt);
947 memFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
949 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel1,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
951 org.openide.awt.Mnemonics.setLocalizedText(maxLogFileCount,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxLogFileCount.text"));
953 logFileCount.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
954 logFileCount.addKeyListener(
new java.awt.event.KeyAdapter() {
955 public void keyReleased(java.awt.event.KeyEvent evt) {
956 logFileCountKeyReleased(evt);
960 logNumAlert.setEditable(
false);
961 logNumAlert.setForeground(
new java.awt.Color(255, 0, 0));
962 logNumAlert.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logNumAlert.text"));
963 logNumAlert.setBorder(null);
965 org.openide.awt.Mnemonics.setLocalizedText(maxSolrMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxSolrMemoryLabel.text"));
967 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel2,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel2.text"));
969 solrMaxHeapSpinner.addChangeListener(
new javax.swing.event.ChangeListener() {
970 public void stateChanged(javax.swing.event.ChangeEvent evt) {
971 solrMaxHeapSpinnerStateChanged(evt);
975 org.openide.awt.Mnemonics.setLocalizedText(solrJVMHeapWarning,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.solrJVMHeapWarning.text"));
977 org.openide.awt.Mnemonics.setLocalizedText(heapFileLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapFileLabel.text"));
979 heapDumpFileField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapDumpFileField.text"));
981 org.openide.awt.Mnemonics.setLocalizedText(heapDumpBrowseButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapDumpBrowseButton.text"));
982 heapDumpBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
983 public void actionPerformed(java.awt.event.ActionEvent evt) {
984 heapDumpBrowseButtonActionPerformed(evt);
988 heapFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
989 org.openide.awt.Mnemonics.setLocalizedText(heapFieldValidationLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapFieldValidationLabel.text"));
991 javax.swing.GroupLayout runtimePanelLayout =
new javax.swing.GroupLayout(runtimePanel);
992 runtimePanel.setLayout(runtimePanelLayout);
993 runtimePanelLayout.setHorizontalGroup(
994 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
995 .addGroup(runtimePanelLayout.createSequentialGroup()
997 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
998 .addGroup(runtimePanelLayout.createSequentialGroup()
999 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1000 .addComponent(totalMemoryLabel)
1001 .addComponent(maxSolrMemoryLabel)
1002 .addComponent(maxMemoryLabel)
1003 .addComponent(maxLogFileCount))
1005 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1006 .addComponent(logFileCount, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
1007 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1008 .addComponent(memField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
1009 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
1011 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1012 .addComponent(maxMemoryUnitsLabel1)
1013 .addComponent(maxMemoryUnitsLabel)
1014 .addComponent(maxMemoryUnitsLabel2))
1015 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1016 .addGroup(runtimePanelLayout.createSequentialGroup()
1018 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
1019 .addContainerGap(117, Short.MAX_VALUE))
1020 .addGroup(runtimePanelLayout.createSequentialGroup()
1022 .addComponent(solrJVMHeapWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)
1024 .addComponent(logNumAlert)
1025 .addContainerGap())))
1026 .addGroup(runtimePanelLayout.createSequentialGroup()
1027 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1028 .addComponent(restartNecessaryWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
1029 .addGroup(runtimePanelLayout.createSequentialGroup()
1030 .addComponent(heapFileLabel)
1031 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1032 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1033 .addComponent(heapFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
1034 .addGroup(runtimePanelLayout.createSequentialGroup()
1035 .addComponent(heapDumpFileField, javax.swing.GroupLayout.PREFERRED_SIZE, 415, javax.swing.GroupLayout.PREFERRED_SIZE)
1036 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1037 .addComponent(heapDumpBrowseButton)))))
1038 .addGap(0, 0, Short.MAX_VALUE))))
1041 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {maxLogFileCount, maxMemoryLabel, totalMemoryLabel});
1043 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {logFileCount, memField});
1045 runtimePanelLayout.setVerticalGroup(
1046 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1047 .addGroup(runtimePanelLayout.createSequentialGroup()
1049 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
1050 .addComponent(totalMemoryLabel)
1051 .addComponent(maxMemoryUnitsLabel1)
1052 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
1053 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1054 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1055 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
1056 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1057 .addComponent(maxMemoryLabel)
1058 .addComponent(memField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1059 .addComponent(maxMemoryUnitsLabel)))
1060 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1061 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1062 .addComponent(logNumAlert, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1063 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1064 .addComponent(maxSolrMemoryLabel)
1065 .addComponent(maxMemoryUnitsLabel2)
1066 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1067 .addComponent(solrJVMHeapWarning)))
1068 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1069 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1070 .addComponent(maxLogFileCount)
1071 .addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1072 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1073 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1074 .addComponent(heapFileLabel)
1075 .addComponent(heapDumpFileField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1076 .addComponent(heapDumpBrowseButton))
1077 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1078 .addComponent(heapFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
1079 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1080 .addComponent(restartNecessaryWarning)
1084 gridBagConstraints =
new java.awt.GridBagConstraints();
1085 gridBagConstraints.gridx = 0;
1086 gridBagConstraints.gridy = 0;
1087 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1088 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1089 mainPanel.add(runtimePanel, gridBagConstraints);
1091 tempDirectoryPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.border.title")));
1092 tempDirectoryPanel.setName(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.name"));
1094 tempCustomField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCustomField.text"));
1096 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryBrowseButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryBrowseButton.text"));
1097 tempDirectoryBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
1098 public void actionPerformed(java.awt.event.ActionEvent evt) {
1099 tempDirectoryBrowseButtonActionPerformed(evt);
1103 tempDirectoryWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
1104 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryWarningLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryWarningLabel.text"));
1106 tempDirChoiceGroup.add(tempLocalRadio);
1107 org.openide.awt.Mnemonics.setLocalizedText(tempLocalRadio,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempLocalRadio.text"));
1108 tempLocalRadio.addActionListener(
new java.awt.event.ActionListener() {
1109 public void actionPerformed(java.awt.event.ActionEvent evt) {
1110 tempLocalRadioActionPerformed(evt);
1114 tempDirChoiceGroup.add(tempCaseRadio);
1115 org.openide.awt.Mnemonics.setLocalizedText(tempCaseRadio,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCaseRadio.text"));
1116 tempCaseRadio.addActionListener(
new java.awt.event.ActionListener() {
1117 public void actionPerformed(java.awt.event.ActionEvent evt) {
1118 tempCaseRadioActionPerformed(evt);
1122 tempDirChoiceGroup.add(tempCustomRadio);
1123 org.openide.awt.Mnemonics.setLocalizedText(tempCustomRadio,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCustomRadio.text"));
1124 tempCustomRadio.addActionListener(
new java.awt.event.ActionListener() {
1125 public void actionPerformed(java.awt.event.ActionEvent evt) {
1126 tempCustomRadioActionPerformed(evt);
1130 tempOnCustomNoPath.setForeground(java.awt.Color.RED);
1131 org.openide.awt.Mnemonics.setLocalizedText(tempOnCustomNoPath,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempOnCustomNoPath.text"));
1133 javax.swing.GroupLayout tempDirectoryPanelLayout =
new javax.swing.GroupLayout(tempDirectoryPanel);
1134 tempDirectoryPanel.setLayout(tempDirectoryPanelLayout);
1135 tempDirectoryPanelLayout.setHorizontalGroup(
1136 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1137 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1139 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1140 .addComponent(tempLocalRadio)
1141 .addComponent(tempCaseRadio)
1142 .addComponent(tempDirectoryWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
1143 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1144 .addComponent(tempCustomRadio)
1145 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1146 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1147 .addComponent(tempOnCustomNoPath)
1148 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1149 .addComponent(tempCustomField, javax.swing.GroupLayout.PREFERRED_SIZE, 459, javax.swing.GroupLayout.PREFERRED_SIZE)
1150 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1151 .addComponent(tempDirectoryBrowseButton)))))
1152 .addContainerGap(269, Short.MAX_VALUE))
1154 tempDirectoryPanelLayout.setVerticalGroup(
1155 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1156 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1158 .addComponent(tempLocalRadio)
1159 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1160 .addComponent(tempCaseRadio)
1161 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1162 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1163 .addComponent(tempCustomRadio)
1164 .addComponent(tempCustomField)
1165 .addComponent(tempDirectoryBrowseButton))
1166 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
1167 .addComponent(tempOnCustomNoPath)
1168 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1169 .addComponent(tempDirectoryWarningLabel)
1170 .addGap(14, 14, 14))
1173 gridBagConstraints =
new java.awt.GridBagConstraints();
1174 gridBagConstraints.gridx = 0;
1175 gridBagConstraints.gridy = 1;
1176 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1177 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1178 mainPanel.add(tempDirectoryPanel, gridBagConstraints);
1179 tempDirectoryPanel.getAccessibleContext().setAccessibleName(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName"));
1181 rdpPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.rdpPanel.border.title")));
1182 rdpPanel.setMaximumSize(
new java.awt.Dimension(300, 175));
1183 rdpPanel.setMinimumSize(
new java.awt.Dimension(300, 175));
1184 rdpPanel.setPreferredSize(
new java.awt.Dimension(300, 175));
1185 rdpPanel.setLayout(
new java.awt.GridBagLayout());
1187 sizingScrollPane.setBorder(null);
1189 sizingTextPane.setEditable(
false);
1190 sizingTextPane.setBorder(null);
1191 sizingTextPane.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.sizingTextPane.text"));
1192 sizingTextPane.setAutoscrolls(
false);
1193 sizingTextPane.setMinimumSize(
new java.awt.Dimension(453, 220));
1194 sizingTextPane.setOpaque(
false);
1195 sizingTextPane.setPreferredSize(
new java.awt.Dimension(453, 220));
1196 sizingTextPane.setSelectionStart(0);
1197 sizingScrollPane.setViewportView(sizingTextPane);
1199 gridBagConstraints =
new java.awt.GridBagConstraints();
1200 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1201 gridBagConstraints.weightx = 1.0;
1202 gridBagConstraints.weighty = 1.0;
1203 rdpPanel.add(sizingScrollPane, gridBagConstraints);
1205 gridBagConstraints =
new java.awt.GridBagConstraints();
1206 gridBagConstraints.gridy = 3;
1207 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1208 mainPanel.add(rdpPanel, gridBagConstraints);
1209 gridBagConstraints =
new java.awt.GridBagConstraints();
1210 gridBagConstraints.gridx = 1;
1211 gridBagConstraints.gridy = 0;
1212 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1213 gridBagConstraints.weightx = 1.0;
1214 mainPanel.add(filler1, gridBagConstraints);
1215 gridBagConstraints =
new java.awt.GridBagConstraints();
1216 gridBagConstraints.gridx = 0;
1217 gridBagConstraints.gridy = 4;
1218 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
1219 gridBagConstraints.weighty = 1.0;
1220 mainPanel.add(filler2, gridBagConstraints);
1222 jScrollPane1.setViewportView(mainPanel);
1224 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
1225 this.setLayout(layout);
1226 layout.setHorizontalGroup(
1227 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1228 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 955, Short.MAX_VALUE)
1230 layout.setVerticalGroup(
1231 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1232 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 699, Short.MAX_VALUE)
1237 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used",
1239 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}",})
1240 private void tempDirectoryBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
1241 if(tempDirChooser == null) {
1242 tempDirChooser = tempChooserHelper.getChooser();
1243 tempDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
1244 tempDirChooser.setMultiSelectionEnabled(
false);
1246 int returnState = tempDirChooser.showOpenDialog(
this);
1247 if (returnState == JFileChooser.APPROVE_OPTION) {
1248 String specifiedPath = tempDirChooser.getSelectedFile().getPath();
1250 File f =
new File(specifiedPath);
1251 if (!f.exists() && !f.mkdirs()) {
1252 throw new InvalidPathException(specifiedPath,
"Unable to create parent directories leading to " + specifiedPath);
1254 tempCustomField.setText(specifiedPath);
1255 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1256 }
catch (InvalidPathException ex) {
1257 logger.log(Level.WARNING,
"Unable to create temporary directory in " + specifiedPath, ex);
1258 JOptionPane.showMessageDialog(
this,
1259 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description(specifiedPath),
1260 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title(),
1261 JOptionPane.ERROR_MESSAGE);
1266 private void solrMaxHeapSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {
1267 int value = (int) solrMaxHeapSpinner.getValue();
1272 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1275 private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {
1276 String count = logFileCount.getText();
1281 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1284 private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {
1285 String memText = memField.getText();
1286 if (memText.equals(initialMemValue)) {
1290 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1293 private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
1294 agencyLogoPathField.setEnabled(
true);
1295 browseLogosButton.setEnabled(
true);
1297 if (agencyLogoPathField.getText().isEmpty()) {
1298 String path = reportBranding.getAgencyLogoPath();
1299 if (path != null && !path.isEmpty()) {
1300 updateAgencyLogo(path);
1303 }
catch (IOException ex) {
1304 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path.", ex);
1306 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1309 private void defaultLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
1310 agencyLogoPathField.setEnabled(
false);
1311 browseLogosButton.setEnabled(
false);
1313 updateAgencyLogo(
"");
1314 }
catch (IOException ex) {
1316 logger.log(Level.SEVERE,
"Unexpected error occurred while updating the agency logo.", ex);
1318 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1321 private void browseLogosButtonActionPerformed(java.awt.event.ActionEvent evt) {
1322 if(logoFileChooser == null) {
1323 logoFileChooser = logoChooserHelper.getChooser();
1324 logoFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
1325 logoFileChooser.setMultiSelectionEnabled(
false);
1326 logoFileChooser.setAcceptAllFileFilterUsed(
false);
1329 String oldLogoPath = agencyLogoPathField.getText();
1330 int returnState = logoFileChooser.showOpenDialog(
this);
1331 if (returnState == JFileChooser.APPROVE_OPTION) {
1332 String path = logoFileChooser.getSelectedFile().getPath();
1334 updateAgencyLogo(path);
1335 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1336 }
catch (IOException | IndexOutOfBoundsException ex) {
1337 JOptionPane.showMessageDialog(
this,
1338 NbBundle.getMessage(
this.getClass(),
1339 "AutopsyOptionsPanel.invalidImageFile.msg"),
1340 NbBundle.getMessage(
this.getClass(),
"AutopsyOptionsPanel.invalidImageFile.title"),
1341 JOptionPane.ERROR_MESSAGE);
1343 updateAgencyLogo(oldLogoPath);
1344 }
catch (IOException ex1) {
1345 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex1);
1351 private void tempLocalRadioActionPerformed(java.awt.event.ActionEvent evt) {
1352 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1353 evaluateTempDirState();
1356 private void tempCaseRadioActionPerformed(java.awt.event.ActionEvent evt) {
1357 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1358 evaluateTempDirState();
1361 private void tempCustomRadioActionPerformed(java.awt.event.ActionEvent evt) {
1362 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1363 evaluateTempDirState();
1367 "AutopsyOptionsPanel_heapDumpBrowseButtonActionPerformed_fileAlreadyExistsTitle=File Already Exists",
1368 "AutopsyOptionsPanel_heapDumpBrowseButtonActionPerformed_fileAlreadyExistsMessage=File already exists. Please select a new location." 1370 private void heapDumpBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
1371 if(heapFileChooser == null) {
1372 heapFileChooser = heapChooserHelper.getChooser();
1373 heapFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
1374 heapFileChooser.setMultiSelectionEnabled(
false);
1376 String oldHeapPath = heapDumpFileField.getText();
1377 if (!StringUtils.isBlank(oldHeapPath)) {
1378 heapFileChooser.setCurrentDirectory(
new File(oldHeapPath));
1381 int returnState = heapFileChooser.showOpenDialog(
this);
1382 if (returnState == JFileChooser.APPROVE_OPTION) {
1383 File selectedDirectory = heapFileChooser.getSelectedFile();
1384 heapDumpFileField.setText(selectedDirectory.getAbsolutePath());
1385 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1390 private javax.swing.JTextField agencyLogoPathField;
1391 private javax.swing.JLabel agencyLogoPathFieldValidationLabel;
1392 private javax.swing.JLabel agencyLogoPreview;
1393 private javax.swing.JButton browseLogosButton;
1394 private javax.swing.JRadioButton defaultLogoRB;
1395 private javax.swing.ButtonGroup displayTimesButtonGroup;
1396 private javax.swing.ButtonGroup fileSelectionButtonGroup;
1397 private javax.swing.JButton heapDumpBrowseButton;
1398 private javax.swing.JTextField heapDumpFileField;
1399 private javax.swing.JLabel heapFieldValidationLabel;
1400 private javax.swing.JLabel heapFileLabel;
1401 private javax.swing.JScrollPane jScrollPane1;
1402 private javax.swing.JTextField logFileCount;
1403 private javax.swing.JTextField logNumAlert;
1404 private javax.swing.JPanel logoPanel;
1405 private javax.swing.ButtonGroup logoSourceButtonGroup;
1406 private javax.swing.JLabel maxLogFileCount;
1407 private javax.swing.JLabel maxMemoryLabel;
1408 private javax.swing.JLabel maxMemoryUnitsLabel;
1409 private javax.swing.JLabel maxMemoryUnitsLabel1;
1410 private javax.swing.JLabel maxMemoryUnitsLabel2;
1411 private javax.swing.JLabel maxSolrMemoryLabel;
1412 private javax.swing.JTextField memField;
1413 private javax.swing.JLabel memFieldValidationLabel;
1414 private javax.swing.JPanel rdpPanel;
1415 private javax.swing.JLabel restartNecessaryWarning;
1416 private javax.swing.JPanel runtimePanel;
1417 private javax.swing.JLabel solrJVMHeapWarning;
1418 private javax.swing.JSpinner solrMaxHeapSpinner;
1419 private javax.swing.JRadioButton specifyLogoRB;
1420 private javax.swing.JLabel systemMemoryTotal;
1421 private javax.swing.JRadioButton tempCaseRadio;
1422 private javax.swing.JTextField tempCustomField;
1423 private javax.swing.JRadioButton tempCustomRadio;
1424 private javax.swing.ButtonGroup tempDirChoiceGroup;
1425 private javax.swing.JButton tempDirectoryBrowseButton;
1426 private javax.swing.JPanel tempDirectoryPanel;
1427 private javax.swing.JLabel tempDirectoryWarningLabel;
1428 private javax.swing.JRadioButton tempLocalRadio;
1429 private javax.swing.JLabel tempOnCustomNoPath;
1430 private javax.swing.JLabel totalMemoryLabel;
static Version.Type getBuildType()
final String heapDumpPath
void insertUpdate(DocumentEvent e)
static int getDefaultLogFileCount()
static int getLogFileCount()
static String getCustomTempDirectory()
static void setMaxSolrVMSize(int maxSize)
static int getMaxSolrVMSize()
void removeUpdate(DocumentEvent e)
static final List< String > GRAPHIC_IMAGE_EXTS
static final String GRAPHIC_IMG_DECR
static void setCustomTempDirectory(String path)
static void setTempDirChoice(TempDirChoice tempDirChoice)
static void setLogFileCount(int count)
static TempDirChoice getTempDirChoice()
void changedUpdate(DocumentEvent e)
static boolean isCaseOpen()