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.Path;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Optional;
31 import java.util.StringJoiner;
32 import java.util.logging.Level;
33 import javax.imageio.ImageIO;
34 import javax.swing.ImageIcon;
35 import javax.swing.JFileChooser;
36 import javax.swing.JOptionPane;
37 import javax.swing.event.DocumentEvent;
38 import javax.swing.event.DocumentListener;
39 import org.netbeans.spi.options.OptionsPanelController;
40 import org.openide.util.NbBundle;
42 import org.openide.util.NbBundle.Messages;
54 "AutopsyOptionsPanel.invalidImageFile.msg=The selected file was not able to be used as an agency logo.",
55 "AutopsyOptionsPanel.invalidImageFile.title=Invalid Image File",
56 "AutopsyOptionsPanel.memFieldValidationLabel.not64BitInstall.text=JVM memory settings only enabled for 64 bit version",
57 "AutopsyOptionsPanel.memFieldValidationLabel.noValueEntered.text=No value entered",
58 "AutopsyOptionsPanel.memFieldValidationLabel.invalidCharacters.text=Invalid characters, value must be a positive integer",
59 "# {0} - minimumMemory",
60 "AutopsyOptionsPanel.memFieldValidationLabel.underMinMemory.text=Value must be at least {0}GB",
61 "# {0} - systemMemory",
62 "AutopsyOptionsPanel.memFieldValidationLabel.overMaxMemory.text=Value must be less than the total system memory of {0}GB",
63 "AutopsyOptionsPanel.memFieldValidationLabel.developerMode.text=Memory settings are not available while running in developer mode",
64 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidPath.text=Path is not valid.",
65 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidImageSpecified.text=Invalid image file specified.",
66 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.pathNotSet.text=Agency logo path must be set.",
67 "AutopsyOptionsPanel.logNumAlert.invalidInput.text=A positive integer is required here."
69 @SuppressWarnings(
"PMD.SingularField")
70 final class AutopsyOptionsPanel extends javax.swing.JPanel {
72 private static final long serialVersionUID = 1L;
73 private final JFileChooser fileChooser;
74 private final TextFieldListener textFieldListener;
75 private static final String ETC_FOLDER_NAME =
"etc";
76 private static final String CONFIG_FILE_EXTENSION =
".conf";
77 private static final long ONE_BILLION = 1000000000L;
78 private static final long MEGA_IN_GIGA = 1024;
79 private static final int MIN_MEMORY_IN_GB = 2;
80 private static final Logger logger = Logger.getLogger(AutopsyOptionsPanel.class.getName());
81 private String initialMemValue = Long.toString(Runtime.getRuntime().maxMemory() / ONE_BILLION);
86 AutopsyOptionsPanel() {
88 fileChooser =
new JFileChooser();
89 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
90 fileChooser.setMultiSelectionEnabled(
false);
91 fileChooser.setAcceptAllFileFilterUsed(
false);
92 fileChooser.setFileFilter(
new GeneralFilter(GeneralFilter.GRAPHIC_IMAGE_EXTS, GeneralFilter.GRAPHIC_IMG_DECR));
93 if (!PlatformUtil.is64BitJVM() || Version.getBuildType() == Version.Type.DEVELOPMENT) {
98 memField.setEnabled(
false);
100 systemMemoryTotal.setText(Long.toString(getSystemMemoryInGB()));
102 textFieldListener =
new TextFieldListener();
103 agencyLogoPathField.getDocument().addDocumentListener(textFieldListener);
104 logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
113 private long getSystemMemoryInGB() {
114 long memorySize = ((com.sun.management.OperatingSystemMXBean) ManagementFactory
115 .getOperatingSystemMXBean()).getTotalPhysicalMemorySize();
116 return memorySize / ONE_BILLION;
124 private long getCurrentJvmMaxMemoryInGB() throws IOException {
125 String currentXmx = getCurrentXmxValue();
128 if (currentXmx.length() > 1) {
129 units = currentXmx.charAt(currentXmx.length() - 1);
130 value = Long.parseLong(currentXmx.substring(0, currentXmx.length() - 1));
132 throw new IOException(
"No memory setting found in String: " + currentXmx);
141 return value / MEGA_IN_GIGA;
143 throw new IOException(
"Units were not recognized as parsed: " + units);
158 private String getCurrentXmxValue() throws IOException {
160 String currentSetting =
"";
161 File userConfFile = getUserFolderConfFile();
162 if (!userConfFile.exists()) {
163 settings = getDefaultsFromFileContents(readConfFile(getInstallFolderConfFile()));
165 settings = getDefaultsFromFileContents(readConfFile(userConfFile));
167 for (String option : settings) {
168 if (option.startsWith(
"-J-Xmx")) {
169 currentSetting = option.replace(
"-J-Xmx",
"").trim();
172 return currentSetting;
183 private static File getInstallFolderConfFile() throws IOException {
184 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
185 String installFolder = PlatformUtil.getInstallPath();
186 File installFolderEtc =
new File(installFolder, ETC_FOLDER_NAME);
187 File installFolderConfigFile =
new File(installFolderEtc, confFileName);
188 if (!installFolderConfigFile.exists()) {
189 throw new IOException(
"Conf file could not be found" + installFolderConfigFile.toString());
191 return installFolderConfigFile;
201 private static File getUserFolderConfFile() {
202 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
203 File userFolder = PlatformUtil.getUserDirectory();
204 File userEtcFolder =
new File(userFolder, ETC_FOLDER_NAME);
205 if (!userEtcFolder.exists()) {
206 userEtcFolder.mkdir();
208 return new File(userEtcFolder, confFileName);
219 private void writeEtcConfFile() throws IOException {
220 StringBuilder content =
new StringBuilder();
221 List<String> confFile = readConfFile(getInstallFolderConfFile());
222 for (String line : confFile) {
223 if (line.contains(
"-J-Xmx")) {
224 String[] splitLine = line.split(
" ");
225 StringJoiner modifiedLine =
new StringJoiner(
" ");
226 for (String piece : splitLine) {
227 if (piece.contains(
"-J-Xmx")) {
228 piece =
"-J-Xmx" + memField.getText() +
"g";
230 modifiedLine.add(piece);
232 content.append(modifiedLine.toString());
234 content.append(line);
236 content.append(
"\n");
238 Files.write(getUserFolderConfFile().toPath(), content.toString().getBytes());
250 private static List<String> readConfFile(File configFile) {
251 List<String> lines =
new ArrayList<>();
252 if (null != configFile) {
253 Path filePath = configFile.toPath();
254 Charset charset = Charset.forName(
"UTF-8");
256 lines = Files.readAllLines(filePath, charset);
257 }
catch (IOException e) {
258 logger.log(Level.SEVERE,
"Error reading config file contents. {}", configFile.getAbsolutePath());
275 private static String[] getDefaultsFromFileContents(List<String> list) {
276 Optional<String> defaultSettings = list.stream().filter(line -> line.startsWith(
"default_options=")).findFirst();
278 if (defaultSettings.isPresent()) {
279 return defaultSettings.get().replace(
"default_options=",
"").replaceAll(
"\"",
"").split(
" ");
281 return new String[]{};
288 boolean keepPreferredViewer = UserPreferences.keepPreferredContentViewer();
289 keepCurrentViewerRB.setSelected(keepPreferredViewer);
290 useBestViewerRB.setSelected(!keepPreferredViewer);
291 dataSourcesHideKnownCB.setSelected(UserPreferences.hideKnownFilesInDataSourcesTree());
292 viewsHideKnownCB.setSelected(UserPreferences.hideKnownFilesInViewsTree());
293 dataSourcesHideSlackCB.setSelected(UserPreferences.hideSlackFilesInDataSourcesTree());
294 viewsHideSlackCB.setSelected(UserPreferences.hideSlackFilesInViewsTree());
295 boolean useLocalTime = UserPreferences.displayTimesInLocalTime();
296 useLocalTimeRB.setSelected(useLocalTime);
297 useGMTTimeRB.setSelected(!useLocalTime);
298 String path = ModuleSettings.getConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP);
299 boolean useDefault = (path == null || path.isEmpty());
300 defaultLogoRB.setSelected(useDefault);
301 specifyLogoRB.setSelected(!useDefault);
302 agencyLogoPathField.setEnabled(!useDefault);
303 browseLogosButton.setEnabled(!useDefault);
304 logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
306 updateAgencyLogo(path);
307 }
catch (IOException ex) {
308 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex);
310 if (memField.isEnabled()) {
312 initialMemValue = Long.toString(getCurrentJvmMaxMemoryInGB());
313 }
catch (IOException ex) {
314 logger.log(Level.SEVERE,
"Can't read current Jvm max memory setting from file", ex);
315 memField.setEnabled(
false);
317 memField.setText(initialMemValue);
330 private void updateAgencyLogo(String path)
throws IOException {
331 agencyLogoPathField.setText(path);
332 ImageIcon agencyLogoIcon =
new ImageIcon();
333 agencyLogoPreview.setText(NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
334 if (!agencyLogoPathField.getText().isEmpty()) {
335 File file =
new File(agencyLogoPathField.getText());
337 BufferedImage image = ImageIO.read(file);
339 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
341 agencyLogoIcon =
new ImageIcon(image.getScaledInstance(64, 64, 4));
342 agencyLogoPreview.setText(
"");
345 agencyLogoPreview.setIcon(agencyLogoIcon);
346 agencyLogoPreview.repaint();
353 UserPreferences.setKeepPreferredContentViewer(keepCurrentViewerRB.isSelected());
354 UserPreferences.setHideKnownFilesInDataSourcesTree(dataSourcesHideKnownCB.isSelected());
355 UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCB.isSelected());
356 UserPreferences.setHideSlackFilesInDataSourcesTree(dataSourcesHideSlackCB.isSelected());
357 UserPreferences.setHideSlackFilesInViewsTree(viewsHideSlackCB.isSelected());
358 UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRB.isSelected());
359 UserPreferences.setLogFileCount(Integer.parseInt(logFileCount.getText()));
360 if (!agencyLogoPathField.getText().isEmpty()) {
361 File file =
new File(agencyLogoPathField.getText());
363 ModuleSettings.setConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP, agencyLogoPathField.getText());
366 ModuleSettings.setConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP,
"");
368 if (memField.isEnabled()) {
371 }
catch (IOException ex) {
372 logger.log(Level.WARNING,
"Unable to save config file to " + PlatformUtil.getUserDirectory() +
"\\" + ETC_FOLDER_NAME, ex);
383 boolean valid =
true;
385 if (!isAgencyLogoPathValid()) {
388 if (!isMemFieldValid()) {
391 if (!isLogNumFieldValid()) {
404 boolean isAgencyLogoPathValid() {
405 boolean valid =
true;
407 if (defaultLogoRB.isSelected()) {
408 agencyLogoPathFieldValidationLabel.setText(
"");
410 String agencyLogoPath = agencyLogoPathField.getText();
411 if (agencyLogoPath.isEmpty()) {
412 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_pathNotSet_text());
415 File file =
new File(agencyLogoPathField.getText());
416 if (file.exists() && file.isFile()) {
419 image = ImageIO.read(file);
421 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
423 agencyLogoPathFieldValidationLabel.setText(
"");
424 }
catch (IOException | IndexOutOfBoundsException ignored) {
425 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidImageSpecified_text());
429 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidPath_text());
443 private boolean isMemFieldValid() {
444 String memText = memField.getText();
445 memFieldValidationLabel.setText(
"");
446 if (!PlatformUtil.is64BitJVM()) {
447 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_not64BitInstall_text());
451 if (Version.getBuildType() == Version.Type.DEVELOPMENT) {
452 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_developerMode_text());
456 if (memText.length() == 0) {
457 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_noValueEntered_text());
460 if (memText.replaceAll(
"[^\\d]",
"").length() != memText.length()) {
461 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_invalidCharacters_text());
464 int parsedInt = Integer.parseInt(memText);
465 if (parsedInt < MIN_MEMORY_IN_GB) {
466 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_underMinMemory_text(MIN_MEMORY_IN_GB));
469 if (parsedInt > getSystemMemoryInGB()) {
470 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_overMaxMemory_text(getSystemMemoryInGB()));
481 private boolean isLogNumFieldValid() {
482 String count = logFileCount.getText();
483 logNumAlert.setText(
"");
485 int count_num = Integer.parseInt(count);
487 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
490 }
catch (NumberFormatException e) {
491 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
504 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
509 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
514 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
524 private void initComponents() {
526 fileSelectionButtonGroup =
new javax.swing.ButtonGroup();
527 displayTimesButtonGroup =
new javax.swing.ButtonGroup();
528 logoSourceButtonGroup =
new javax.swing.ButtonGroup();
529 jScrollPane1 =
new javax.swing.JScrollPane();
530 jPanel1 =
new javax.swing.JPanel();
531 logoPanel =
new javax.swing.JPanel();
532 agencyLogoPathField =
new javax.swing.JTextField();
533 browseLogosButton =
new javax.swing.JButton();
534 agencyLogoPreview =
new javax.swing.JLabel();
535 defaultLogoRB =
new javax.swing.JRadioButton();
536 specifyLogoRB =
new javax.swing.JRadioButton();
537 agencyLogoPathFieldValidationLabel =
new javax.swing.JLabel();
538 viewPanel =
new javax.swing.JPanel();
539 jLabelSelectFile =
new javax.swing.JLabel();
540 useBestViewerRB =
new javax.swing.JRadioButton();
541 keepCurrentViewerRB =
new javax.swing.JRadioButton();
542 jLabelHideKnownFiles =
new javax.swing.JLabel();
543 dataSourcesHideKnownCB =
new javax.swing.JCheckBox();
544 viewsHideKnownCB =
new javax.swing.JCheckBox();
545 jLabelHideSlackFiles =
new javax.swing.JLabel();
546 dataSourcesHideSlackCB =
new javax.swing.JCheckBox();
547 viewsHideSlackCB =
new javax.swing.JCheckBox();
548 jLabelTimeDisplay =
new javax.swing.JLabel();
549 useLocalTimeRB =
new javax.swing.JRadioButton();
550 useGMTTimeRB =
new javax.swing.JRadioButton();
551 runtimePanel =
new javax.swing.JPanel();
552 maxMemoryLabel =
new javax.swing.JLabel();
553 maxMemoryUnitsLabel =
new javax.swing.JLabel();
554 totalMemoryLabel =
new javax.swing.JLabel();
555 systemMemoryTotal =
new javax.swing.JLabel();
556 restartNecessaryWarning =
new javax.swing.JLabel();
557 memField =
new javax.swing.JTextField();
558 memFieldValidationLabel =
new javax.swing.JLabel();
559 maxMemoryUnitsLabel1 =
new javax.swing.JLabel();
560 maxLogFileCount =
new javax.swing.JLabel();
561 logFileCount =
new javax.swing.JTextField();
562 logNumAlert =
new javax.swing.JTextField();
564 setPreferredSize(
new java.awt.Dimension(1022, 488));
566 jScrollPane1.setBorder(null);
567 jScrollPane1.setPreferredSize(
new java.awt.Dimension(1022, 407));
569 jPanel1.setPreferredSize(
new java.awt.Dimension(1022, 407));
571 logoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logoPanel.border.title")));
572 logoPanel.setPreferredSize(
new java.awt.Dimension(533, 87));
574 agencyLogoPathField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathField.text"));
576 org.openide.awt.Mnemonics.setLocalizedText(browseLogosButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.browseLogosButton.text"));
577 browseLogosButton.addActionListener(
new java.awt.event.ActionListener() {
578 public void actionPerformed(java.awt.event.ActionEvent evt) {
579 browseLogosButtonActionPerformed(evt);
583 agencyLogoPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
584 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPreview,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
585 agencyLogoPreview.setBorder(javax.swing.BorderFactory.createEtchedBorder());
586 agencyLogoPreview.setMaximumSize(
new java.awt.Dimension(64, 64));
587 agencyLogoPreview.setMinimumSize(
new java.awt.Dimension(64, 64));
588 agencyLogoPreview.setPreferredSize(
new java.awt.Dimension(64, 64));
590 logoSourceButtonGroup.add(defaultLogoRB);
591 org.openide.awt.Mnemonics.setLocalizedText(defaultLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.defaultLogoRB.text"));
592 defaultLogoRB.addActionListener(
new java.awt.event.ActionListener() {
593 public void actionPerformed(java.awt.event.ActionEvent evt) {
594 defaultLogoRBActionPerformed(evt);
598 logoSourceButtonGroup.add(specifyLogoRB);
599 org.openide.awt.Mnemonics.setLocalizedText(specifyLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.specifyLogoRB.text"));
600 specifyLogoRB.addActionListener(
new java.awt.event.ActionListener() {
601 public void actionPerformed(java.awt.event.ActionEvent evt) {
602 specifyLogoRBActionPerformed(evt);
606 agencyLogoPathFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
607 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPathFieldValidationLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text"));
609 javax.swing.GroupLayout logoPanelLayout =
new javax.swing.GroupLayout(logoPanel);
610 logoPanel.setLayout(logoPanelLayout);
611 logoPanelLayout.setHorizontalGroup(
612 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
613 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
615 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
616 .addComponent(specifyLogoRB)
617 .addComponent(defaultLogoRB))
618 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
619 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
620 .addGroup(logoPanelLayout.createSequentialGroup()
621 .addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE)
622 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
623 .addComponent(browseLogosButton))
624 .addComponent(agencyLogoPathFieldValidationLabel))
625 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
626 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
627 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
629 logoPanelLayout.setVerticalGroup(
630 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
631 .addGroup(logoPanelLayout.createSequentialGroup()
633 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
634 .addComponent(defaultLogoRB)
635 .addComponent(agencyLogoPathFieldValidationLabel))
636 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
637 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
638 .addComponent(specifyLogoRB)
639 .addComponent(agencyLogoPathField)
640 .addComponent(browseLogosButton)))
641 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
642 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
643 .addGap(0, 0, Short.MAX_VALUE))
646 viewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.viewPanel.border.title")));
648 org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectFile,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.jLabelSelectFile.text"));
650 fileSelectionButtonGroup.add(useBestViewerRB);
651 org.openide.awt.Mnemonics.setLocalizedText(useBestViewerRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.useBestViewerRB.text"));
652 useBestViewerRB.setToolTipText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.useBestViewerRB.toolTipText"));
653 useBestViewerRB.addActionListener(
new java.awt.event.ActionListener() {
654 public void actionPerformed(java.awt.event.ActionEvent evt) {
655 useBestViewerRBActionPerformed(evt);
659 fileSelectionButtonGroup.add(keepCurrentViewerRB);
660 org.openide.awt.Mnemonics.setLocalizedText(keepCurrentViewerRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.keepCurrentViewerRB.text"));
661 keepCurrentViewerRB.setToolTipText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText"));
662 keepCurrentViewerRB.addActionListener(
new java.awt.event.ActionListener() {
663 public void actionPerformed(java.awt.event.ActionEvent evt) {
664 keepCurrentViewerRBActionPerformed(evt);
668 org.openide.awt.Mnemonics.setLocalizedText(jLabelHideKnownFiles,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.jLabelHideKnownFiles.text"));
670 org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideKnownCB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.dataSourcesHideKnownCB.text"));
671 dataSourcesHideKnownCB.addActionListener(
new java.awt.event.ActionListener() {
672 public void actionPerformed(java.awt.event.ActionEvent evt) {
673 dataSourcesHideKnownCBActionPerformed(evt);
677 org.openide.awt.Mnemonics.setLocalizedText(viewsHideKnownCB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.viewsHideKnownCB.text"));
678 viewsHideKnownCB.addActionListener(
new java.awt.event.ActionListener() {
679 public void actionPerformed(java.awt.event.ActionEvent evt) {
680 viewsHideKnownCBActionPerformed(evt);
684 org.openide.awt.Mnemonics.setLocalizedText(jLabelHideSlackFiles,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.jLabelHideSlackFiles.text"));
686 org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideSlackCB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.dataSourcesHideSlackCB.text"));
687 dataSourcesHideSlackCB.addActionListener(
new java.awt.event.ActionListener() {
688 public void actionPerformed(java.awt.event.ActionEvent evt) {
689 dataSourcesHideSlackCBActionPerformed(evt);
693 org.openide.awt.Mnemonics.setLocalizedText(viewsHideSlackCB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.viewsHideSlackCB.text"));
694 viewsHideSlackCB.addActionListener(
new java.awt.event.ActionListener() {
695 public void actionPerformed(java.awt.event.ActionEvent evt) {
696 viewsHideSlackCBActionPerformed(evt);
700 org.openide.awt.Mnemonics.setLocalizedText(jLabelTimeDisplay,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.jLabelTimeDisplay.text"));
702 displayTimesButtonGroup.add(useLocalTimeRB);
703 org.openide.awt.Mnemonics.setLocalizedText(useLocalTimeRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.useLocalTimeRB.text"));
704 useLocalTimeRB.addActionListener(
new java.awt.event.ActionListener() {
705 public void actionPerformed(java.awt.event.ActionEvent evt) {
706 useLocalTimeRBActionPerformed(evt);
710 displayTimesButtonGroup.add(useGMTTimeRB);
711 org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.useGMTTimeRB.text"));
712 useGMTTimeRB.addActionListener(
new java.awt.event.ActionListener() {
713 public void actionPerformed(java.awt.event.ActionEvent evt) {
714 useGMTTimeRBActionPerformed(evt);
718 javax.swing.GroupLayout viewPanelLayout =
new javax.swing.GroupLayout(viewPanel);
719 viewPanel.setLayout(viewPanelLayout);
720 viewPanelLayout.setHorizontalGroup(
721 viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
722 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, viewPanelLayout.createSequentialGroup()
724 .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
725 .addGroup(viewPanelLayout.createSequentialGroup()
727 .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
728 .addGroup(viewPanelLayout.createSequentialGroup()
729 .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
730 .addComponent(useGMTTimeRB)
731 .addComponent(keepCurrentViewerRB)
732 .addComponent(useBestViewerRB)
733 .addComponent(dataSourcesHideKnownCB)
734 .addComponent(viewsHideKnownCB))
735 .addGap(0, 0, Short.MAX_VALUE))
736 .addGroup(viewPanelLayout.createSequentialGroup()
737 .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
738 .addComponent(dataSourcesHideSlackCB)
739 .addComponent(viewsHideSlackCB)
740 .addComponent(useLocalTimeRB))
741 .addContainerGap(158, Short.MAX_VALUE))))
742 .addGroup(viewPanelLayout.createSequentialGroup()
743 .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
744 .addComponent(jLabelHideSlackFiles)
745 .addComponent(jLabelTimeDisplay)
746 .addComponent(jLabelHideKnownFiles)
747 .addComponent(jLabelSelectFile))
748 .addGap(30, 30, 30))))
750 viewPanelLayout.setVerticalGroup(
751 viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
752 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, viewPanelLayout.createSequentialGroup()
754 .addComponent(jLabelSelectFile)
755 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
756 .addComponent(useBestViewerRB)
757 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
758 .addComponent(keepCurrentViewerRB)
759 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
760 .addComponent(jLabelHideKnownFiles)
761 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
762 .addComponent(dataSourcesHideKnownCB)
763 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
764 .addComponent(viewsHideKnownCB)
765 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
766 .addComponent(jLabelHideSlackFiles)
767 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
768 .addComponent(dataSourcesHideSlackCB)
769 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
770 .addComponent(viewsHideSlackCB)
771 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
772 .addComponent(jLabelTimeDisplay)
773 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
774 .addComponent(useLocalTimeRB)
775 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
776 .addComponent(useGMTTimeRB))
779 runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.runtimePanel.border.title")));
781 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryLabel.text"));
783 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
785 org.openide.awt.Mnemonics.setLocalizedText(totalMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.totalMemoryLabel.text"));
787 systemMemoryTotal.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
789 restartNecessaryWarning.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
790 org.openide.awt.Mnemonics.setLocalizedText(restartNecessaryWarning,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.restartNecessaryWarning.text"));
792 memField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
793 memField.addKeyListener(
new java.awt.event.KeyAdapter() {
794 public void keyReleased(java.awt.event.KeyEvent evt) {
795 memFieldKeyReleased(evt);
799 memFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
801 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel1,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
803 org.openide.awt.Mnemonics.setLocalizedText(maxLogFileCount,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxLogFileCount.text"));
805 logFileCount.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
806 logFileCount.addKeyListener(
new java.awt.event.KeyAdapter() {
807 public void keyReleased(java.awt.event.KeyEvent evt) {
808 logFileCountKeyReleased(evt);
812 logNumAlert.setEditable(
false);
813 logNumAlert.setFont(logNumAlert.getFont().deriveFont(logNumAlert.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
814 logNumAlert.setForeground(
new java.awt.Color(255, 0, 0));
815 logNumAlert.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logNumAlert.text"));
816 logNumAlert.setBorder(null);
818 javax.swing.GroupLayout runtimePanelLayout =
new javax.swing.GroupLayout(runtimePanel);
819 runtimePanel.setLayout(runtimePanelLayout);
820 runtimePanelLayout.setHorizontalGroup(
821 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
822 .addGroup(runtimePanelLayout.createSequentialGroup()
824 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
825 .addGroup(runtimePanelLayout.createSequentialGroup()
826 .addComponent(totalMemoryLabel)
827 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
828 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
830 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
831 .addGroup(runtimePanelLayout.createSequentialGroup()
832 .addComponent(maxMemoryUnitsLabel1)
833 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
834 .addComponent(restartNecessaryWarning, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
835 .addGroup(runtimePanelLayout.createSequentialGroup()
836 .addComponent(maxMemoryUnitsLabel)
837 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
838 .addComponent(memFieldValidationLabel)
839 .addGap(0, 0, Short.MAX_VALUE))))
840 .addGroup(runtimePanelLayout.createSequentialGroup()
841 .addComponent(maxMemoryLabel)
842 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
843 .addComponent(memField, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
844 .addGap(0, 0, Short.MAX_VALUE))
845 .addGroup(runtimePanelLayout.createSequentialGroup()
846 .addComponent(maxLogFileCount)
847 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
848 .addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
850 .addComponent(logNumAlert)))
854 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {maxLogFileCount, maxMemoryLabel, totalMemoryLabel});
856 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {logFileCount, memField});
858 runtimePanelLayout.setVerticalGroup(
859 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
860 .addGroup(runtimePanelLayout.createSequentialGroup()
862 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
863 .addComponent(totalMemoryLabel)
864 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
865 .addComponent(restartNecessaryWarning)
866 .addComponent(maxMemoryUnitsLabel1))
867 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
868 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
869 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
870 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
871 .addComponent(maxMemoryLabel)
872 .addComponent(memField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
873 .addComponent(maxMemoryUnitsLabel))
874 .addComponent(memFieldValidationLabel))
875 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
876 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
877 .addComponent(maxLogFileCount)
878 .addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
879 .addComponent(logNumAlert, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
880 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
883 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
884 jPanel1.setLayout(jPanel1Layout);
885 jPanel1Layout.setHorizontalGroup(
886 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
887 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
889 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
890 .addComponent(logoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1010, Short.MAX_VALUE)
891 .addGroup(jPanel1Layout.createSequentialGroup()
892 .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
893 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
894 .addComponent(runtimePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
897 jPanel1Layout.setVerticalGroup(
898 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
899 .addGroup(jPanel1Layout.createSequentialGroup()
901 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
902 .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
903 .addComponent(runtimePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
904 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
905 .addComponent(logoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
909 jScrollPane1.setViewportView(jPanel1);
911 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
912 this.setLayout(layout);
913 layout.setHorizontalGroup(
914 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
915 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
917 layout.setVerticalGroup(
918 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
919 .addGroup(layout.createSequentialGroup()
920 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 479, Short.MAX_VALUE)
921 .addGap(0, 0, Short.MAX_VALUE))
925 private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {
926 String count = logFileCount.getText();
927 if (count.equals(String.valueOf(UserPreferences.getDefaultLogFileCount()))) {
931 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
934 private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {
935 String memText = memField.getText();
936 if (memText.equals(initialMemValue)) {
940 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
943 private void useGMTTimeRBActionPerformed(java.awt.event.ActionEvent evt) {
944 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
947 private void useLocalTimeRBActionPerformed(java.awt.event.ActionEvent evt) {
948 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
951 private void viewsHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {
952 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
955 private void dataSourcesHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {
956 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
959 private void viewsHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {
960 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
963 private void dataSourcesHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {
964 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
967 private void keepCurrentViewerRBActionPerformed(java.awt.event.ActionEvent evt) {
968 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
971 private void useBestViewerRBActionPerformed(java.awt.event.ActionEvent evt) {
972 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
975 private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
976 agencyLogoPathField.setEnabled(
true);
977 browseLogosButton.setEnabled(
true);
979 if (agencyLogoPathField.getText().isEmpty()) {
980 String path = ModuleSettings.getConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP);
981 if (path != null && !path.isEmpty()) {
982 updateAgencyLogo(path);
985 }
catch (IOException ex) {
986 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path.", ex);
988 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
991 private void defaultLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
992 agencyLogoPathField.setEnabled(
false);
993 browseLogosButton.setEnabled(
false);
995 updateAgencyLogo(
"");
996 }
catch (IOException ex) {
998 logger.log(Level.SEVERE,
"Unexpected error occurred while updating the agency logo.", ex);
1000 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1003 private void browseLogosButtonActionPerformed(java.awt.event.ActionEvent evt) {
1004 String oldLogoPath = agencyLogoPathField.getText();
1005 int returnState = fileChooser.showOpenDialog(
this);
1006 if (returnState == JFileChooser.APPROVE_OPTION) {
1007 String path = fileChooser.getSelectedFile().getPath();
1009 updateAgencyLogo(path);
1010 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1011 }
catch (IOException | IndexOutOfBoundsException ex) {
1012 JOptionPane.showMessageDialog(
this,
1013 NbBundle.getMessage(
this.getClass(),
1014 "AutopsyOptionsPanel.invalidImageFile.msg"),
1015 NbBundle.getMessage(
this.getClass(),
"AutopsyOptionsPanel.invalidImageFile.title"),
1016 JOptionPane.ERROR_MESSAGE);
1018 updateAgencyLogo(oldLogoPath);
1019 }
catch (IOException ex1) {
1020 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex1);
1027 private javax.swing.JTextField agencyLogoPathField;
1028 private javax.swing.JLabel agencyLogoPathFieldValidationLabel;
1029 private javax.swing.JLabel agencyLogoPreview;
1030 private javax.swing.JButton browseLogosButton;
1031 private javax.swing.JCheckBox dataSourcesHideKnownCB;
1032 private javax.swing.JCheckBox dataSourcesHideSlackCB;
1033 private javax.swing.JRadioButton defaultLogoRB;
1034 private javax.swing.ButtonGroup displayTimesButtonGroup;
1035 private javax.swing.ButtonGroup fileSelectionButtonGroup;
1036 private javax.swing.JLabel jLabelHideKnownFiles;
1037 private javax.swing.JLabel jLabelHideSlackFiles;
1038 private javax.swing.JLabel jLabelSelectFile;
1039 private javax.swing.JLabel jLabelTimeDisplay;
1040 private javax.swing.JPanel jPanel1;
1041 private javax.swing.JScrollPane jScrollPane1;
1042 private javax.swing.JRadioButton keepCurrentViewerRB;
1043 private javax.swing.JTextField logFileCount;
1044 private javax.swing.JTextField logNumAlert;
1045 private javax.swing.JPanel logoPanel;
1046 private javax.swing.ButtonGroup logoSourceButtonGroup;
1047 private javax.swing.JLabel maxLogFileCount;
1048 private javax.swing.JLabel maxMemoryLabel;
1049 private javax.swing.JLabel maxMemoryUnitsLabel;
1050 private javax.swing.JLabel maxMemoryUnitsLabel1;
1051 private javax.swing.JTextField memField;
1052 private javax.swing.JLabel memFieldValidationLabel;
1053 private javax.swing.JLabel restartNecessaryWarning;
1054 private javax.swing.JPanel runtimePanel;
1055 private javax.swing.JRadioButton specifyLogoRB;
1056 private javax.swing.JLabel systemMemoryTotal;
1057 private javax.swing.JLabel totalMemoryLabel;
1058 private javax.swing.JRadioButton useBestViewerRB;
1059 private javax.swing.JRadioButton useGMTTimeRB;
1060 private javax.swing.JRadioButton useLocalTimeRB;
1061 private javax.swing.JPanel viewPanel;
1062 private javax.swing.JCheckBox viewsHideKnownCB;
1063 private javax.swing.JCheckBox viewsHideSlackCB;
void insertUpdate(DocumentEvent e)
void removeUpdate(DocumentEvent e)
void changedUpdate(DocumentEvent e)