19package org.sleuthkit.autopsy.corecomponents;
21import java.awt.image.BufferedImage;
23import java.io.IOException;
24import java.lang.management.ManagementFactory;
25import java.nio.charset.Charset;
26import java.nio.file.Files;
27import java.nio.file.InvalidPathException;
28import java.nio.file.Path;
29import java.util.ArrayList;
31import java.util.Optional;
32import java.util.logging.Level;
33import java.util.regex.Matcher;
34import java.util.regex.Pattern;
35import java.util.stream.Collectors;
36import java.util.stream.Stream;
37import javax.imageio.ImageIO;
38import javax.swing.ImageIcon;
39import javax.swing.JFileChooser;
40import javax.swing.JOptionPane;
41import javax.swing.SwingUtilities;
42import javax.swing.event.DocumentEvent;
43import javax.swing.event.DocumentListener;
44import org.apache.commons.io.FileUtils;
45import org.apache.commons.lang3.StringUtils;
46import org.apache.tools.ant.types.Commandline;
47import org.netbeans.spi.options.OptionsPanelController;
48import org.openide.util.NbBundle;
49import org.sleuthkit.autopsy.coreutils.Logger;
50import org.openide.util.NbBundle.Messages;
51import org.sleuthkit.autopsy.casemodule.Case;
52import org.sleuthkit.autopsy.casemodule.GeneralFilter;
53import org.sleuthkit.autopsy.machinesettings.UserMachinePreferences;
54import org.sleuthkit.autopsy.machinesettings.UserMachinePreferencesException;
55import org.sleuthkit.autopsy.core.UserPreferences;
56import org.sleuthkit.autopsy.coreutils.PlatformUtil;
57import org.sleuthkit.autopsy.coreutils.Version;
58import org.sleuthkit.autopsy.guiutils.JFileChooserFactory;
59import org.sleuthkit.autopsy.machinesettings.UserMachinePreferences.TempDirChoice;
60import org.sleuthkit.autopsy.report.ReportBranding;
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")
82final 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;
95 private String initialMemValue = Long.toString(Runtime.getRuntime().maxMemory() / ONE_BILLION);
98 private JFileChooser heapFileChooser;
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()));
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));
137 private static boolean isJVMHeapSettingsCapable() {
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 {
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() {
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");
297 private static class ConfValues {
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);
356 return new ConfValues(memSize, heapFile);
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()) {
503 ConfValues confValues = getEtcConfValues();
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 heapDumpFileField.setText(DEFAULT_HEAP_DUMP_FILE_FIELD);
511 memField.setText(initialMemValue);
514 heapDumpBrowseButton.setEnabled(confLoaded);
515 heapDumpFileField.setEnabled(confLoaded);
521 private void setTempDirEnabled() {
524 this.tempCaseRadio.setEnabled(enabled);
525 this.tempCustomRadio.setEnabled(enabled);
526 this.tempLocalRadio.setEnabled(enabled);
528 this.tempDirectoryWarningLabel.setVisible(!enabled);
529 evaluateTempDirState();
539 private void updateAgencyLogo(String path)
throws IOException {
540 agencyLogoPathField.setText(path);
541 ImageIcon agencyLogoIcon =
new ImageIcon();
542 agencyLogoPreview.setText(NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
543 if (!agencyLogoPathField.getText().isEmpty()) {
544 File file =
new File(agencyLogoPathField.getText());
546 BufferedImage image = ImageIO.read(file);
548 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
550 agencyLogoIcon =
new ImageIcon(image.getScaledInstance(64, 64, 4));
551 agencyLogoPreview.setText(
"");
554 agencyLogoPreview.setIcon(agencyLogoIcon);
555 agencyLogoPreview.repaint();
559 "AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory",
561 "AutopsyOptionsPanel_storeTempDir_onError_description=There was an error creating the temporary directory on the filesystem at: {0}.",
562 "AutopsyOptionsPanel_storeTempDir_onChoiceError_title=Error Saving Temporary Directory Choice",
563 "AutopsyOptionsPanel_storeTempDir_onChoiceError_description=There was an error updating temporary directory choice selection.",})
564 private void storeTempDir() {
565 String tempDirectoryPath = tempCustomField.getText();
570 logger.log(Level.WARNING,
"There was an error creating the temporary directory defined by the user: " + tempDirectoryPath, ex);
571 SwingUtilities.invokeLater(() -> {
572 JOptionPane.showMessageDialog(
this,
573 String.format(
"<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onError_description(tempDirectoryPath)),
574 Bundle.AutopsyOptionsPanel_storeTempDir_onError_title(),
575 JOptionPane.ERROR_MESSAGE);
581 if (tempCaseRadio.isSelected()) {
583 }
else if (tempCustomRadio.isSelected()) {
593 logger.log(Level.WARNING,
"There was an error updating choice to: " + choice.name(), ex);
594 SwingUtilities.invokeLater(() -> {
595 JOptionPane.showMessageDialog(
this,
596 String.format(
"<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onChoiceError_description()),
597 Bundle.AutopsyOptionsPanel_storeTempDir_onChoiceError_title(),
598 JOptionPane.ERROR_MESSAGE);
611 if (!agencyLogoPathField.getText().isEmpty()) {
612 File file =
new File(agencyLogoPathField.getText());
614 reportBranding.setAgencyLogoPath(agencyLogoPathField.getText());
617 reportBranding.setAgencyLogoPath(
"");
620 if (isJVMHeapSettingsCapable()) {
623 }
catch (IOException ex) {
635 boolean agencyValid = isAgencyLogoPathValid();
636 boolean memFieldValid = isMemFieldValid();
637 boolean logNumValid = isLogNumFieldValid();
638 boolean heapPathValid = isHeapPathValid();
640 return agencyValid && memFieldValid && logNumValid && heapPathValid;
649 boolean isAgencyLogoPathValid() {
650 boolean valid =
true;
652 if (defaultLogoRB.isSelected()) {
653 agencyLogoPathFieldValidationLabel.setText(
"");
655 String agencyLogoPath = agencyLogoPathField.getText();
656 if (agencyLogoPath.isEmpty()) {
657 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_pathNotSet_text());
660 File file =
new File(agencyLogoPathField.getText());
661 if (file.exists() && file.isFile()) {
664 image = ImageIO.read(file);
666 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
668 agencyLogoPathFieldValidationLabel.setText(
"");
669 }
catch (IOException | IndexOutOfBoundsException ignored) {
670 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidImageSpecified_text());
674 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidPath_text());
688 private boolean isMemFieldValid() {
689 String memText = memField.getText();
690 memFieldValidationLabel.setText(
"");
692 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_not64BitInstall_text());
697 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_developerMode_text());
701 if (memText.length() == 0) {
702 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_noValueEntered_text());
705 if (memText.replaceAll(
"[^\\d]",
"").length() != memText.length()) {
706 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_invalidCharacters_text());
709 int parsedInt = Integer.parseInt(memText);
710 if (parsedInt < MIN_MEMORY_IN_GB) {
711 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_underMinMemory_text(MIN_MEMORY_IN_GB));
714 if (parsedInt > getSystemMemoryInGB()) {
715 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_overMaxMemory_text(getSystemMemoryInGB()));
726 private boolean isLogNumFieldValid() {
727 String count = logFileCount.getText();
728 logNumAlert.setText(
"");
730 int count_num = Integer.parseInt(count);
732 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
735 }
catch (NumberFormatException e) {
736 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
746 private class TextFieldListener
implements DocumentListener {
754 TextFieldListener(Runnable
onChange) {
763 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
790 private void initComponents() {
791 java.awt.GridBagConstraints gridBagConstraints;
793 fileSelectionButtonGroup =
new javax.swing.ButtonGroup();
794 displayTimesButtonGroup =
new javax.swing.ButtonGroup();
795 logoSourceButtonGroup =
new javax.swing.ButtonGroup();
796 tempDirChoiceGroup =
new javax.swing.ButtonGroup();
797 jScrollPane1 =
new javax.swing.JScrollPane();
798 javax.swing.JPanel mainPanel =
new javax.swing.JPanel();
799 logoPanel =
new javax.swing.JPanel();
800 agencyLogoPathField =
new javax.swing.JTextField();
801 browseLogosButton =
new javax.swing.JButton();
802 agencyLogoPreview =
new javax.swing.JLabel();
803 defaultLogoRB =
new javax.swing.JRadioButton();
804 specifyLogoRB =
new javax.swing.JRadioButton();
805 agencyLogoPathFieldValidationLabel =
new javax.swing.JLabel();
806 runtimePanel =
new javax.swing.JPanel();
807 maxMemoryLabel =
new javax.swing.JLabel();
808 maxMemoryUnitsLabel =
new javax.swing.JLabel();
809 totalMemoryLabel =
new javax.swing.JLabel();
810 systemMemoryTotal =
new javax.swing.JLabel();
811 restartNecessaryWarning =
new javax.swing.JLabel();
812 memField =
new javax.swing.JTextField();
813 memFieldValidationLabel =
new javax.swing.JLabel();
814 maxMemoryUnitsLabel1 =
new javax.swing.JLabel();
815 maxLogFileCount =
new javax.swing.JLabel();
816 logFileCount =
new javax.swing.JTextField();
817 logNumAlert =
new javax.swing.JTextField();
818 maxSolrMemoryLabel =
new javax.swing.JLabel();
819 maxMemoryUnitsLabel2 =
new javax.swing.JLabel();
820 solrMaxHeapSpinner =
new javax.swing.JSpinner();
821 solrJVMHeapWarning =
new javax.swing.JLabel();
822 heapFileLabel =
new javax.swing.JLabel();
823 heapDumpFileField =
new javax.swing.JTextField();
824 heapDumpBrowseButton =
new javax.swing.JButton();
825 heapFieldValidationLabel =
new javax.swing.JLabel();
826 tempDirectoryPanel =
new javax.swing.JPanel();
827 tempCustomField =
new javax.swing.JTextField();
828 tempDirectoryBrowseButton =
new javax.swing.JButton();
829 tempDirectoryWarningLabel =
new javax.swing.JLabel();
830 tempLocalRadio =
new javax.swing.JRadioButton();
831 tempCaseRadio =
new javax.swing.JRadioButton();
832 tempCustomRadio =
new javax.swing.JRadioButton();
833 tempOnCustomNoPath =
new javax.swing.JLabel();
834 rdpPanel =
new javax.swing.JPanel();
835 javax.swing.JScrollPane sizingScrollPane =
new javax.swing.JScrollPane();
836 javax.swing.JTextPane sizingTextPane =
new javax.swing.JTextPane();
837 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));
838 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));
840 jScrollPane1.setBorder(
null);
842 mainPanel.setMinimumSize(
new java.awt.Dimension(648, 382));
843 mainPanel.setLayout(
new java.awt.GridBagLayout());
845 logoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logoPanel.border.title")));
847 agencyLogoPathField.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathField.text"));
849 org.openide.awt.Mnemonics.setLocalizedText(browseLogosButton, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.browseLogosButton.text"));
850 browseLogosButton.addActionListener(
new java.awt.event.ActionListener() {
851 public void actionPerformed(java.awt.event.ActionEvent evt) {
852 browseLogosButtonActionPerformed(evt);
856 agencyLogoPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
857 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPreview, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
858 agencyLogoPreview.setBorder(javax.swing.BorderFactory.createEtchedBorder());
859 agencyLogoPreview.setMaximumSize(
new java.awt.Dimension(64, 64));
860 agencyLogoPreview.setMinimumSize(
new java.awt.Dimension(64, 64));
861 agencyLogoPreview.setPreferredSize(
new java.awt.Dimension(64, 64));
863 logoSourceButtonGroup.add(defaultLogoRB);
864 org.openide.awt.Mnemonics.setLocalizedText(defaultLogoRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.defaultLogoRB.text"));
865 defaultLogoRB.addActionListener(
new java.awt.event.ActionListener() {
866 public void actionPerformed(java.awt.event.ActionEvent evt) {
867 defaultLogoRBActionPerformed(evt);
871 logoSourceButtonGroup.add(specifyLogoRB);
872 org.openide.awt.Mnemonics.setLocalizedText(specifyLogoRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.specifyLogoRB.text"));
873 specifyLogoRB.addActionListener(
new java.awt.event.ActionListener() {
874 public void actionPerformed(java.awt.event.ActionEvent evt) {
875 specifyLogoRBActionPerformed(evt);
879 agencyLogoPathFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
880 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPathFieldValidationLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text"));
882 javax.swing.GroupLayout logoPanelLayout =
new javax.swing.GroupLayout(logoPanel);
883 logoPanel.setLayout(logoPanelLayout);
884 logoPanelLayout.setHorizontalGroup(
885 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
886 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
888 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
889 .addComponent(specifyLogoRB)
890 .addComponent(defaultLogoRB))
891 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
892 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
893 .addComponent(agencyLogoPathFieldValidationLabel)
894 .addGroup(logoPanelLayout.createSequentialGroup()
895 .addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
896 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
897 .addComponent(browseLogosButton)))
898 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
899 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
900 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
902 logoPanelLayout.setVerticalGroup(
903 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
904 .addGroup(logoPanelLayout.createSequentialGroup()
906 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
907 .addComponent(defaultLogoRB)
908 .addComponent(agencyLogoPathFieldValidationLabel))
909 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
910 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
911 .addComponent(specifyLogoRB)
912 .addComponent(agencyLogoPathField)
913 .addComponent(browseLogosButton)))
914 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
915 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
916 .addGap(0, 0, Short.MAX_VALUE))
919 gridBagConstraints =
new java.awt.GridBagConstraints();
920 gridBagConstraints.gridx = 0;
921 gridBagConstraints.gridy = 2;
922 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
923 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
924 mainPanel.add(logoPanel, gridBagConstraints);
926 runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.runtimePanel.border.title")));
928 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryLabel.text"));
930 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
932 org.openide.awt.Mnemonics.setLocalizedText(totalMemoryLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.totalMemoryLabel.text"));
934 systemMemoryTotal.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
936 restartNecessaryWarning.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
937 org.openide.awt.Mnemonics.setLocalizedText(restartNecessaryWarning, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.restartNecessaryWarning.text"));
939 memField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
940 memField.addKeyListener(
new java.awt.event.KeyAdapter() {
941 public void keyReleased(java.awt.event.KeyEvent evt) {
942 memFieldKeyReleased(evt);
946 memFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
948 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel1, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
950 org.openide.awt.Mnemonics.setLocalizedText(maxLogFileCount, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxLogFileCount.text"));
952 logFileCount.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
953 logFileCount.addKeyListener(
new java.awt.event.KeyAdapter() {
954 public void keyReleased(java.awt.event.KeyEvent evt) {
955 logFileCountKeyReleased(evt);
959 logNumAlert.setEditable(
false);
960 logNumAlert.setForeground(
new java.awt.Color(255, 0, 0));
961 logNumAlert.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logNumAlert.text"));
962 logNumAlert.setBorder(
null);
964 org.openide.awt.Mnemonics.setLocalizedText(maxSolrMemoryLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxSolrMemoryLabel.text"));
966 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel2, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel2.text"));
968 solrMaxHeapSpinner.addChangeListener(
new javax.swing.event.ChangeListener() {
969 public void stateChanged(javax.swing.event.ChangeEvent evt) {
970 solrMaxHeapSpinnerStateChanged(evt);
974 org.openide.awt.Mnemonics.setLocalizedText(solrJVMHeapWarning, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.solrJVMHeapWarning.text"));
976 org.openide.awt.Mnemonics.setLocalizedText(heapFileLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapFileLabel.text"));
978 heapDumpFileField.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapDumpFileField.text"));
980 org.openide.awt.Mnemonics.setLocalizedText(heapDumpBrowseButton, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapDumpBrowseButton.text"));
981 heapDumpBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
982 public void actionPerformed(java.awt.event.ActionEvent evt) {
983 heapDumpBrowseButtonActionPerformed(evt);
987 heapFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
988 org.openide.awt.Mnemonics.setLocalizedText(heapFieldValidationLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.heapFieldValidationLabel.text"));
990 javax.swing.GroupLayout runtimePanelLayout =
new javax.swing.GroupLayout(runtimePanel);
991 runtimePanel.setLayout(runtimePanelLayout);
992 runtimePanelLayout.setHorizontalGroup(
993 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
994 .addGroup(runtimePanelLayout.createSequentialGroup()
996 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
997 .addGroup(runtimePanelLayout.createSequentialGroup()
998 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
999 .addComponent(totalMemoryLabel)
1000 .addComponent(maxSolrMemoryLabel)
1001 .addComponent(maxMemoryLabel)
1002 .addComponent(maxLogFileCount))
1004 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1005 .addComponent(logFileCount, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
1006 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1007 .addComponent(memField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
1008 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
1010 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1011 .addComponent(maxMemoryUnitsLabel1)
1012 .addComponent(maxMemoryUnitsLabel)
1013 .addComponent(maxMemoryUnitsLabel2))
1014 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1015 .addGroup(runtimePanelLayout.createSequentialGroup()
1017 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
1018 .addContainerGap(117, Short.MAX_VALUE))
1019 .addGroup(runtimePanelLayout.createSequentialGroup()
1021 .addComponent(solrJVMHeapWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)
1023 .addComponent(logNumAlert)
1024 .addContainerGap())))
1025 .addGroup(runtimePanelLayout.createSequentialGroup()
1026 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1027 .addComponent(restartNecessaryWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
1028 .addGroup(runtimePanelLayout.createSequentialGroup()
1029 .addComponent(heapFileLabel)
1030 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1031 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1032 .addComponent(heapFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
1033 .addGroup(runtimePanelLayout.createSequentialGroup()
1034 .addComponent(heapDumpFileField, javax.swing.GroupLayout.PREFERRED_SIZE, 415, javax.swing.GroupLayout.PREFERRED_SIZE)
1035 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1036 .addComponent(heapDumpBrowseButton)))))
1037 .addGap(0, 0, Short.MAX_VALUE))))
1040 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {maxLogFileCount, maxMemoryLabel, totalMemoryLabel});
1042 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {logFileCount, memField});
1044 runtimePanelLayout.setVerticalGroup(
1045 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1046 .addGroup(runtimePanelLayout.createSequentialGroup()
1048 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
1049 .addComponent(totalMemoryLabel)
1050 .addComponent(maxMemoryUnitsLabel1)
1051 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
1052 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1053 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1054 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
1055 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1056 .addComponent(maxMemoryLabel)
1057 .addComponent(memField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1058 .addComponent(maxMemoryUnitsLabel)))
1059 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1060 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1061 .addComponent(logNumAlert, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1062 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1063 .addComponent(maxSolrMemoryLabel)
1064 .addComponent(maxMemoryUnitsLabel2)
1065 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1066 .addComponent(solrJVMHeapWarning)))
1067 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1068 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1069 .addComponent(maxLogFileCount)
1070 .addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1071 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1072 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1073 .addComponent(heapFileLabel)
1074 .addComponent(heapDumpFileField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1075 .addComponent(heapDumpBrowseButton))
1076 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1077 .addComponent(heapFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
1078 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1079 .addComponent(restartNecessaryWarning)
1083 gridBagConstraints =
new java.awt.GridBagConstraints();
1084 gridBagConstraints.gridx = 0;
1085 gridBagConstraints.gridy = 0;
1086 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1087 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1088 mainPanel.add(runtimePanel, gridBagConstraints);
1090 tempDirectoryPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.border.title")));
1091 tempDirectoryPanel.setName(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.name"));
1093 tempCustomField.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCustomField.text"));
1095 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryBrowseButton, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryBrowseButton.text"));
1096 tempDirectoryBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
1097 public void actionPerformed(java.awt.event.ActionEvent evt) {
1098 tempDirectoryBrowseButtonActionPerformed(evt);
1102 tempDirectoryWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
1103 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryWarningLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryWarningLabel.text"));
1105 tempDirChoiceGroup.add(tempLocalRadio);
1106 org.openide.awt.Mnemonics.setLocalizedText(tempLocalRadio, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempLocalRadio.text"));
1107 tempLocalRadio.addActionListener(
new java.awt.event.ActionListener() {
1108 public void actionPerformed(java.awt.event.ActionEvent evt) {
1109 tempLocalRadioActionPerformed(evt);
1113 tempDirChoiceGroup.add(tempCaseRadio);
1114 org.openide.awt.Mnemonics.setLocalizedText(tempCaseRadio, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCaseRadio.text"));
1115 tempCaseRadio.addActionListener(
new java.awt.event.ActionListener() {
1116 public void actionPerformed(java.awt.event.ActionEvent evt) {
1117 tempCaseRadioActionPerformed(evt);
1121 tempDirChoiceGroup.add(tempCustomRadio);
1122 org.openide.awt.Mnemonics.setLocalizedText(tempCustomRadio, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempCustomRadio.text"));
1123 tempCustomRadio.addActionListener(
new java.awt.event.ActionListener() {
1124 public void actionPerformed(java.awt.event.ActionEvent evt) {
1125 tempCustomRadioActionPerformed(evt);
1129 tempOnCustomNoPath.setForeground(java.awt.Color.RED);
1130 org.openide.awt.Mnemonics.setLocalizedText(tempOnCustomNoPath, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempOnCustomNoPath.text"));
1132 javax.swing.GroupLayout tempDirectoryPanelLayout =
new javax.swing.GroupLayout(tempDirectoryPanel);
1133 tempDirectoryPanel.setLayout(tempDirectoryPanelLayout);
1134 tempDirectoryPanelLayout.setHorizontalGroup(
1135 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1136 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1138 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1139 .addComponent(tempLocalRadio)
1140 .addComponent(tempCaseRadio)
1141 .addComponent(tempDirectoryWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
1142 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1143 .addComponent(tempCustomRadio)
1144 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1145 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1146 .addComponent(tempOnCustomNoPath)
1147 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1148 .addComponent(tempCustomField, javax.swing.GroupLayout.PREFERRED_SIZE, 459, javax.swing.GroupLayout.PREFERRED_SIZE)
1149 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1150 .addComponent(tempDirectoryBrowseButton)))))
1151 .addContainerGap(269, Short.MAX_VALUE))
1153 tempDirectoryPanelLayout.setVerticalGroup(
1154 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1155 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
1157 .addComponent(tempLocalRadio)
1158 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1159 .addComponent(tempCaseRadio)
1160 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1161 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1162 .addComponent(tempCustomRadio)
1163 .addComponent(tempCustomField)
1164 .addComponent(tempDirectoryBrowseButton))
1165 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
1166 .addComponent(tempOnCustomNoPath)
1167 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
1168 .addComponent(tempDirectoryWarningLabel)
1169 .addGap(14, 14, 14))
1172 gridBagConstraints =
new java.awt.GridBagConstraints();
1173 gridBagConstraints.gridx = 0;
1174 gridBagConstraints.gridy = 1;
1175 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1176 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1177 mainPanel.add(tempDirectoryPanel, gridBagConstraints);
1178 tempDirectoryPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName"));
1180 rdpPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.rdpPanel.border.title")));
1181 rdpPanel.setMaximumSize(
new java.awt.Dimension(300, 175));
1182 rdpPanel.setMinimumSize(
new java.awt.Dimension(300, 175));
1183 rdpPanel.setPreferredSize(
new java.awt.Dimension(300, 175));
1184 rdpPanel.setLayout(
new java.awt.GridBagLayout());
1186 sizingScrollPane.setBorder(
null);
1188 sizingTextPane.setEditable(
false);
1189 sizingTextPane.setBorder(
null);
1190 sizingTextPane.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.sizingTextPane.text"));
1191 sizingTextPane.setAutoscrolls(
false);
1192 sizingTextPane.setMinimumSize(
new java.awt.Dimension(453, 220));
1193 sizingTextPane.setOpaque(
false);
1194 sizingTextPane.setPreferredSize(
new java.awt.Dimension(453, 220));
1195 sizingTextPane.setSelectionStart(0);
1196 sizingScrollPane.setViewportView(sizingTextPane);
1198 gridBagConstraints =
new java.awt.GridBagConstraints();
1199 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1200 gridBagConstraints.weightx = 1.0;
1201 gridBagConstraints.weighty = 1.0;
1202 rdpPanel.add(sizingScrollPane, gridBagConstraints);
1204 gridBagConstraints =
new java.awt.GridBagConstraints();
1205 gridBagConstraints.gridy = 3;
1206 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1207 mainPanel.add(rdpPanel, gridBagConstraints);
1208 gridBagConstraints =
new java.awt.GridBagConstraints();
1209 gridBagConstraints.gridx = 1;
1210 gridBagConstraints.gridy = 0;
1211 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1212 gridBagConstraints.weightx = 1.0;
1213 mainPanel.add(filler1, gridBagConstraints);
1214 gridBagConstraints =
new java.awt.GridBagConstraints();
1215 gridBagConstraints.gridx = 0;
1216 gridBagConstraints.gridy = 4;
1217 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
1218 gridBagConstraints.weighty = 1.0;
1219 mainPanel.add(filler2, gridBagConstraints);
1221 jScrollPane1.setViewportView(mainPanel);
1223 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
1224 this.setLayout(layout);
1225 layout.setHorizontalGroup(
1226 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1227 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 955, Short.MAX_VALUE)
1229 layout.setVerticalGroup(
1230 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1231 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 699, Short.MAX_VALUE)
1236 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used",
1238 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}",})
1239 private void tempDirectoryBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
1240 if(tempDirChooser ==
null) {
1241 tempDirChooser = tempChooserHelper.getChooser();
1242 tempDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
1243 tempDirChooser.setMultiSelectionEnabled(
false);
1245 int returnState = tempDirChooser.showOpenDialog(
this);
1246 if (returnState == JFileChooser.APPROVE_OPTION) {
1247 String specifiedPath = tempDirChooser.getSelectedFile().getPath();
1249 File f =
new File(specifiedPath);
1250 if (!f.exists() && !f.mkdirs()) {
1251 throw new InvalidPathException(specifiedPath,
"Unable to create parent directories leading to " + specifiedPath);
1253 tempCustomField.setText(specifiedPath);
1254 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1255 }
catch (InvalidPathException ex) {
1256 logger.log(Level.WARNING,
"Unable to create temporary directory in " + specifiedPath, ex);
1257 JOptionPane.showMessageDialog(
this,
1258 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description(specifiedPath),
1259 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title(),
1260 JOptionPane.ERROR_MESSAGE);
1265 private void solrMaxHeapSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {
1266 int value = (int) solrMaxHeapSpinner.getValue();
1267 if (value == UserPreferences.getMaxSolrVMSize()) {
1271 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1274 private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {
1275 String count = logFileCount.getText();
1276 if (count.equals(String.valueOf(UserPreferences.getDefaultLogFileCount()))) {
1280 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1283 private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {
1284 String memText = memField.getText();
1285 if (memText.equals(initialMemValue)) {
1289 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1292 private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
1293 agencyLogoPathField.setEnabled(
true);
1294 browseLogosButton.setEnabled(
true);
1296 if (agencyLogoPathField.getText().isEmpty()) {
1297 String path = reportBranding.getAgencyLogoPath();
1298 if (path !=
null && !path.isEmpty()) {
1299 updateAgencyLogo(path);
1302 }
catch (IOException ex) {
1303 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path.", ex);
1305 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1308 private void defaultLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
1309 agencyLogoPathField.setEnabled(
false);
1310 browseLogosButton.setEnabled(
false);
1312 updateAgencyLogo(
"");
1313 }
catch (IOException ex) {
1315 logger.log(Level.SEVERE,
"Unexpected error occurred while updating the agency logo.", ex);
1317 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1320 private void browseLogosButtonActionPerformed(java.awt.event.ActionEvent evt) {
1321 if(logoFileChooser ==
null) {
1322 logoFileChooser = logoChooserHelper.getChooser();
1323 logoFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
1324 logoFileChooser.setMultiSelectionEnabled(
false);
1325 logoFileChooser.setAcceptAllFileFilterUsed(
false);
1326 logoFileChooser.setFileFilter(
new GeneralFilter(GeneralFilter.GRAPHIC_IMAGE_EXTS, GeneralFilter.GRAPHIC_IMG_DECR));
1328 String oldLogoPath = agencyLogoPathField.getText();
1329 int returnState = logoFileChooser.showOpenDialog(
this);
1330 if (returnState == JFileChooser.APPROVE_OPTION) {
1331 String path = logoFileChooser.getSelectedFile().getPath();
1333 updateAgencyLogo(path);
1334 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1335 }
catch (IOException | IndexOutOfBoundsException ex) {
1336 JOptionPane.showMessageDialog(
this,
1337 NbBundle.getMessage(
this.getClass(),
1338 "AutopsyOptionsPanel.invalidImageFile.msg"),
1339 NbBundle.getMessage(
this.getClass(),
"AutopsyOptionsPanel.invalidImageFile.title"),
1340 JOptionPane.ERROR_MESSAGE);
1342 updateAgencyLogo(oldLogoPath);
1343 }
catch (IOException ex1) {
1344 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex1);
1350 private void tempLocalRadioActionPerformed(java.awt.event.ActionEvent evt) {
1351 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1352 evaluateTempDirState();
1355 private void tempCaseRadioActionPerformed(java.awt.event.ActionEvent evt) {
1356 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1357 evaluateTempDirState();
1360 private void tempCustomRadioActionPerformed(java.awt.event.ActionEvent evt) {
1361 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1362 evaluateTempDirState();
1366 "AutopsyOptionsPanel_heapDumpBrowseButtonActionPerformed_fileAlreadyExistsTitle=File Already Exists",
1367 "AutopsyOptionsPanel_heapDumpBrowseButtonActionPerformed_fileAlreadyExistsMessage=File already exists. Please select a new location."
1369 private void heapDumpBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
1370 if(heapFileChooser ==
null) {
1371 heapFileChooser = heapChooserHelper.getChooser();
1372 heapFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
1373 heapFileChooser.setMultiSelectionEnabled(
false);
1375 String oldHeapPath = heapDumpFileField.getText();
1376 if (!StringUtils.isBlank(oldHeapPath)) {
1377 heapFileChooser.setCurrentDirectory(
new File(oldHeapPath));
1380 int returnState = heapFileChooser.showOpenDialog(
this);
1381 if (returnState == JFileChooser.APPROVE_OPTION) {
1382 File selectedDirectory = heapFileChooser.getSelectedFile();
1383 heapDumpFileField.setText(selectedDirectory.getAbsolutePath());
1384 firePropertyChange(OptionsPanelController.PROP_CHANGED,
null,
null);
1389 private javax.swing.JTextField agencyLogoPathField;
1390 private javax.swing.JLabel agencyLogoPathFieldValidationLabel;
1391 private javax.swing.JLabel agencyLogoPreview;
1392 private javax.swing.JButton browseLogosButton;
1393 private javax.swing.JRadioButton defaultLogoRB;
1394 private javax.swing.ButtonGroup displayTimesButtonGroup;
1395 private javax.swing.ButtonGroup fileSelectionButtonGroup;
1396 private javax.swing.JButton heapDumpBrowseButton;
1397 private javax.swing.JTextField heapDumpFileField;
1398 private javax.swing.JLabel heapFieldValidationLabel;
1399 private javax.swing.JLabel heapFileLabel;
1400 private javax.swing.JScrollPane jScrollPane1;
1401 private javax.swing.JTextField logFileCount;
1402 private javax.swing.JTextField logNumAlert;
1403 private javax.swing.JPanel logoPanel;
1404 private javax.swing.ButtonGroup logoSourceButtonGroup;
1405 private javax.swing.JLabel maxLogFileCount;
1406 private javax.swing.JLabel maxMemoryLabel;
1407 private javax.swing.JLabel maxMemoryUnitsLabel;
1408 private javax.swing.JLabel maxMemoryUnitsLabel1;
1409 private javax.swing.JLabel maxMemoryUnitsLabel2;
1410 private javax.swing.JLabel maxSolrMemoryLabel;
1411 private javax.swing.JTextField memField;
1412 private javax.swing.JLabel memFieldValidationLabel;
1413 private javax.swing.JPanel rdpPanel;
1414 private javax.swing.JLabel restartNecessaryWarning;
1415 private javax.swing.JPanel runtimePanel;
1416 private javax.swing.JLabel solrJVMHeapWarning;
1417 private javax.swing.JSpinner solrMaxHeapSpinner;
1418 private javax.swing.JRadioButton specifyLogoRB;
1419 private javax.swing.JLabel systemMemoryTotal;
1420 private javax.swing.JRadioButton tempCaseRadio;
1421 private javax.swing.JTextField tempCustomField;
1422 private javax.swing.JRadioButton tempCustomRadio;
1423 private javax.swing.ButtonGroup tempDirChoiceGroup;
1424 private javax.swing.JButton tempDirectoryBrowseButton;
1425 private javax.swing.JPanel tempDirectoryPanel;
1426 private javax.swing.JLabel tempDirectoryWarningLabel;
1427 private javax.swing.JRadioButton tempLocalRadio;
1428 private javax.swing.JLabel tempOnCustomNoPath;
1429 private javax.swing.JLabel totalMemoryLabel;
static boolean isCaseOpen()
static void setLogFileCount(int count)
static void setMaxSolrVMSize(int maxSize)
static String getAppName()
static int getMaxSolrVMSize()
static int getLogFileCount()
final String heapDumpPath
void insertUpdate(DocumentEvent e)
void changedUpdate(DocumentEvent e)
void removeUpdate(DocumentEvent e)
synchronized static Logger getLogger(String name)
static Version.Type getBuildType()
static void setTempDirChoice(TempDirChoice tempDirChoice)
static void setCustomTempDirectory(String path)
static String getCustomTempDirectory()
static TempDirChoice getTempDirChoice()