19 package org.sleuthkit.autopsy.corecomponents;
21 import java.awt.image.BufferedImage;
23 import java.io.IOException;
24 import java.lang.management.ManagementFactory;
25 import java.nio.charset.Charset;
26 import java.nio.file.Files;
27 import java.nio.file.InvalidPathException;
28 import java.nio.file.Path;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Optional;
32 import java.util.StringJoiner;
33 import java.util.logging.Level;
34 import javax.imageio.ImageIO;
35 import javax.swing.ImageIcon;
36 import javax.swing.JFileChooser;
37 import javax.swing.JOptionPane;
38 import javax.swing.SwingUtilities;
39 import javax.swing.event.DocumentEvent;
40 import javax.swing.event.DocumentListener;
41 import org.netbeans.spi.options.OptionsPanelController;
42 import org.openide.util.NbBundle;
44 import org.openide.util.NbBundle.Messages;
59 "AutopsyOptionsPanel.invalidImageFile.msg=The selected file was not able to be used as an agency logo.",
60 "AutopsyOptionsPanel.invalidImageFile.title=Invalid Image File",
61 "AutopsyOptionsPanel.memFieldValidationLabel.not64BitInstall.text=JVM memory settings only enabled for 64 bit version",
62 "AutopsyOptionsPanel.memFieldValidationLabel.noValueEntered.text=No value entered",
63 "AutopsyOptionsPanel.memFieldValidationLabel.invalidCharacters.text=Invalid characters, value must be a positive integer",
64 "# {0} - minimumMemory",
65 "AutopsyOptionsPanel.memFieldValidationLabel.underMinMemory.text=Value must be at least {0}GB",
66 "# {0} - systemMemory",
67 "AutopsyOptionsPanel.memFieldValidationLabel.overMaxMemory.text=Value must be less than the total system memory of {0}GB",
68 "AutopsyOptionsPanel.memFieldValidationLabel.developerMode.text=Memory settings are not available while running in developer mode",
69 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidPath.text=Path is not valid.",
70 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.invalidImageSpecified.text=Invalid image file specified.",
71 "AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.pathNotSet.text=Agency logo path must be set.",
72 "AutopsyOptionsPanel.logNumAlert.invalidInput.text=A positive integer is required here."
74 @SuppressWarnings(
"PMD.SingularField")
75 final class AutopsyOptionsPanel extends javax.swing.JPanel {
77 private static final long serialVersionUID = 1L;
78 private final JFileChooser logoFileChooser;
79 private final JFileChooser tempDirChooser;
80 private final TextFieldListener textFieldListener;
81 private static final String ETC_FOLDER_NAME =
"etc";
82 private static final String CONFIG_FILE_EXTENSION =
".conf";
83 private static final long ONE_BILLION = 1000000000L;
84 private static final int MEGA_IN_GIGA = 1024;
85 private static final int DEFAULT_SOLR_HEAP_SIZE_MB = 2048;
86 private static final int MIN_MEMORY_IN_GB = 2;
87 private static final Logger logger = Logger.getLogger(AutopsyOptionsPanel.class.getName());
88 private String initialMemValue = Long.toString(Runtime.getRuntime().maxMemory() / ONE_BILLION);
93 AutopsyOptionsPanel() {
95 logoFileChooser =
new JFileChooser();
96 logoFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
97 logoFileChooser.setMultiSelectionEnabled(
false);
98 logoFileChooser.setAcceptAllFileFilterUsed(
false);
99 logoFileChooser.setFileFilter(
new GeneralFilter(GeneralFilter.GRAPHIC_IMAGE_EXTS, GeneralFilter.GRAPHIC_IMG_DECR));
101 tempDirChooser =
new JFileChooser();
102 tempDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
103 tempDirChooser.setMultiSelectionEnabled(
false);
105 if (!PlatformUtil.is64BitJVM() || Version.getBuildType() == Version.Type.DEVELOPMENT) {
110 memField.setEnabled(
false);
111 solrMaxHeapSpinner.setEnabled(
false);
113 systemMemoryTotal.setText(Long.toString(getSystemMemoryInGB()));
116 solrMaxHeapSpinner.setModel(
new javax.swing.SpinnerNumberModel(UserPreferences.getMaxSolrVMSize(),
117 DEFAULT_SOLR_HEAP_SIZE_MB, ((int) getSystemMemoryInGB()) * MEGA_IN_GIGA, DEFAULT_SOLR_HEAP_SIZE_MB));
119 textFieldListener =
new TextFieldListener();
120 agencyLogoPathField.getDocument().addDocumentListener(textFieldListener);
121 tempDirectoryField.getDocument().addDocumentListener(textFieldListener);
122 logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
131 private long getSystemMemoryInGB() {
132 long memorySize = ((com.sun.management.OperatingSystemMXBean) ManagementFactory
133 .getOperatingSystemMXBean()).getTotalPhysicalMemorySize();
134 return memorySize / ONE_BILLION;
142 private long getCurrentJvmMaxMemoryInGB() throws IOException {
143 String currentXmx = getCurrentXmxValue();
146 if (currentXmx.length() > 1) {
147 units = currentXmx.charAt(currentXmx.length() - 1);
148 value = Long.parseLong(currentXmx.substring(0, currentXmx.length() - 1));
150 throw new IOException(
"No memory setting found in String: " + currentXmx);
159 return value / MEGA_IN_GIGA;
161 throw new IOException(
"Units were not recognized as parsed: " + units);
176 private String getCurrentXmxValue() throws IOException {
178 String currentSetting =
"";
179 File userConfFile = getUserFolderConfFile();
180 if (!userConfFile.exists()) {
181 settings = getDefaultsFromFileContents(readConfFile(getInstallFolderConfFile()));
183 settings = getDefaultsFromFileContents(readConfFile(userConfFile));
185 for (String option : settings) {
186 if (option.startsWith(
"-J-Xmx")) {
187 currentSetting = option.replace(
"-J-Xmx",
"").trim();
190 return currentSetting;
201 private static File getInstallFolderConfFile() throws IOException {
202 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
203 String installFolder = PlatformUtil.getInstallPath();
204 File installFolderEtc =
new File(installFolder, ETC_FOLDER_NAME);
205 File installFolderConfigFile =
new File(installFolderEtc, confFileName);
206 if (!installFolderConfigFile.exists()) {
207 throw new IOException(
"Conf file could not be found" + installFolderConfigFile.toString());
209 return installFolderConfigFile;
219 private static File getUserFolderConfFile() {
220 String confFileName = UserPreferences.getAppName() + CONFIG_FILE_EXTENSION;
221 File userFolder = PlatformUtil.getUserDirectory();
222 File userEtcFolder =
new File(userFolder, ETC_FOLDER_NAME);
223 if (!userEtcFolder.exists()) {
224 userEtcFolder.mkdir();
226 return new File(userEtcFolder, confFileName);
237 private void writeEtcConfFile() throws IOException {
238 StringBuilder content =
new StringBuilder();
239 List<String> confFile = readConfFile(getInstallFolderConfFile());
240 for (String line : confFile) {
241 if (line.contains(
"-J-Xmx")) {
242 String[] splitLine = line.split(
" ");
243 StringJoiner modifiedLine =
new StringJoiner(
" ");
244 for (String piece : splitLine) {
245 if (piece.contains(
"-J-Xmx")) {
246 piece =
"-J-Xmx" + memField.getText() +
"g";
248 modifiedLine.add(piece);
250 content.append(modifiedLine.toString());
252 content.append(line);
254 content.append(
"\n");
256 Files.write(getUserFolderConfFile().toPath(), content.toString().getBytes());
268 private static List<String> readConfFile(File configFile) {
269 List<String> lines =
new ArrayList<>();
270 if (null != configFile) {
271 Path filePath = configFile.toPath();
272 Charset charset = Charset.forName(
"UTF-8");
274 lines = Files.readAllLines(filePath, charset);
275 }
catch (IOException e) {
276 logger.log(Level.SEVERE,
"Error reading config file contents. {}", configFile.getAbsolutePath());
293 private static String[] getDefaultsFromFileContents(List<String> list) {
294 Optional<String> defaultSettings = list.stream().filter(line -> line.startsWith(
"default_options=")).findFirst();
296 if (defaultSettings.isPresent()) {
297 return defaultSettings.get().replace(
"default_options=",
"").replaceAll(
"\"",
"").split(
" ");
299 return new String[]{};
306 String path = ModuleSettings.getConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP);
307 boolean useDefault = (path == null || path.isEmpty());
308 defaultLogoRB.setSelected(useDefault);
309 specifyLogoRB.setSelected(!useDefault);
310 agencyLogoPathField.setEnabled(!useDefault);
311 browseLogosButton.setEnabled(!useDefault);
312 tempDirectoryField.setText(UserMachinePreferences.getBaseTempDirectory());
313 logFileCount.setText(String.valueOf(UserPreferences.getLogFileCount()));
314 solrMaxHeapSpinner.setValue(UserPreferences.getMaxSolrVMSize());
315 tempDirectoryField.setText(UserMachinePreferences.getBaseTempDirectory());
317 updateAgencyLogo(path);
318 }
catch (IOException ex) {
319 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex);
321 if (memField.isEnabled()) {
323 initialMemValue = Long.toString(getCurrentJvmMaxMemoryInGB());
324 }
catch (IOException ex) {
325 logger.log(Level.SEVERE,
"Can't read current Jvm max memory setting from file", ex);
326 memField.setEnabled(
false);
328 memField.setText(initialMemValue);
334 private void setTempDirEnabled() {
335 boolean enabled = !Case.isCaseOpen();
336 this.tempDirectoryBrowseButton.setEnabled(enabled);
337 this.tempDirectoryField.setEnabled(enabled);
338 this.tempDirectoryWarningLabel.setVisible(!enabled);
348 private void updateAgencyLogo(String path)
throws IOException {
349 agencyLogoPathField.setText(path);
350 ImageIcon agencyLogoIcon =
new ImageIcon();
351 agencyLogoPreview.setText(NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
352 if (!agencyLogoPathField.getText().isEmpty()) {
353 File file =
new File(agencyLogoPathField.getText());
355 BufferedImage image = ImageIO.read(file);
357 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
359 agencyLogoIcon =
new ImageIcon(image.getScaledInstance(64, 64, 4));
360 agencyLogoPreview.setText(
"");
363 agencyLogoPreview.setIcon(agencyLogoIcon);
364 agencyLogoPreview.repaint();
368 "AutopsyOptionsPanel_storeTempDir_onError_title=Error Saving Temporary Directory",
370 "AutopsyOptionsPanel_storeTempDir_onError_description=There was an error creating the temporary directory on the filesystem at: {0}.",})
371 private void storeTempDir() {
372 String tempDirectoryPath = tempDirectoryField.getText();
373 if (!UserMachinePreferences.getBaseTempDirectory().equals(tempDirectoryPath)) {
375 UserMachinePreferences.setBaseTempDirectory(tempDirectoryPath);
376 }
catch (UserMachinePreferencesException ex) {
377 logger.log(Level.WARNING,
"There was an error creating the temporary directory defined by the user: " + tempDirectoryPath, ex);
378 SwingUtilities.invokeLater(() -> {
379 JOptionPane.showMessageDialog(
this,
380 String.format(
"<html>%s</html>", Bundle.AutopsyOptionsPanel_storeTempDir_onError_description(tempDirectoryPath)),
381 Bundle.AutopsyOptionsPanel_storeTempDir_onError_title(),
382 JOptionPane.ERROR_MESSAGE);
392 UserPreferences.setLogFileCount(Integer.parseInt(logFileCount.getText()));
395 if (!agencyLogoPathField.getText().isEmpty()) {
396 File file =
new File(agencyLogoPathField.getText());
398 ModuleSettings.setConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP, agencyLogoPathField.getText());
401 ModuleSettings.setConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP,
"");
403 UserPreferences.setMaxSolrVMSize((
int) solrMaxHeapSpinner.getValue());
404 if (memField.isEnabled()) {
407 }
catch (IOException ex) {
408 logger.log(Level.WARNING,
"Unable to save config file to " + PlatformUtil.getUserDirectory() +
"\\" + ETC_FOLDER_NAME, ex);
419 boolean valid =
true;
420 if (!isAgencyLogoPathValid()) {
423 if (!isMemFieldValid()) {
426 if (!isLogNumFieldValid()) {
439 boolean isAgencyLogoPathValid() {
440 boolean valid =
true;
442 if (defaultLogoRB.isSelected()) {
443 agencyLogoPathFieldValidationLabel.setText(
"");
445 String agencyLogoPath = agencyLogoPathField.getText();
446 if (agencyLogoPath.isEmpty()) {
447 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_pathNotSet_text());
450 File file =
new File(agencyLogoPathField.getText());
451 if (file.exists() && file.isFile()) {
454 image = ImageIO.read(file);
456 throw new IOException(
"Unable to read file as a BufferedImage for file " + file.toString());
458 agencyLogoPathFieldValidationLabel.setText(
"");
459 }
catch (IOException | IndexOutOfBoundsException ignored) {
460 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidImageSpecified_text());
464 agencyLogoPathFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_agencyLogoPathFieldValidationLabel_invalidPath_text());
478 private boolean isMemFieldValid() {
479 String memText = memField.getText();
480 memFieldValidationLabel.setText(
"");
481 if (!PlatformUtil.is64BitJVM()) {
482 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_not64BitInstall_text());
486 if (Version.getBuildType() == Version.Type.DEVELOPMENT) {
487 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_developerMode_text());
491 if (memText.length() == 0) {
492 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_noValueEntered_text());
495 if (memText.replaceAll(
"[^\\d]",
"").length() != memText.length()) {
496 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_invalidCharacters_text());
499 int parsedInt = Integer.parseInt(memText);
500 if (parsedInt < MIN_MEMORY_IN_GB) {
501 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_underMinMemory_text(MIN_MEMORY_IN_GB));
504 if (parsedInt > getSystemMemoryInGB()) {
505 memFieldValidationLabel.setText(Bundle.AutopsyOptionsPanel_memFieldValidationLabel_overMaxMemory_text(getSystemMemoryInGB()));
516 private boolean isLogNumFieldValid() {
517 String count = logFileCount.getText();
518 logNumAlert.setText(
"");
520 int count_num = Integer.parseInt(count);
522 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
525 }
catch (NumberFormatException e) {
526 logNumAlert.setText(Bundle.AutopsyOptionsPanel_logNumAlert_invalidInput_text());
540 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
545 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
550 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
560 private void initComponents() {
561 java.awt.GridBagConstraints gridBagConstraints;
563 fileSelectionButtonGroup =
new javax.swing.ButtonGroup();
564 displayTimesButtonGroup =
new javax.swing.ButtonGroup();
565 logoSourceButtonGroup =
new javax.swing.ButtonGroup();
566 jScrollPane1 =
new javax.swing.JScrollPane();
567 javax.swing.JPanel mainPanel =
new javax.swing.JPanel();
568 logoPanel =
new javax.swing.JPanel();
569 agencyLogoPathField =
new javax.swing.JTextField();
570 browseLogosButton =
new javax.swing.JButton();
571 agencyLogoPreview =
new javax.swing.JLabel();
572 defaultLogoRB =
new javax.swing.JRadioButton();
573 specifyLogoRB =
new javax.swing.JRadioButton();
574 agencyLogoPathFieldValidationLabel =
new javax.swing.JLabel();
575 runtimePanel =
new javax.swing.JPanel();
576 maxMemoryLabel =
new javax.swing.JLabel();
577 maxMemoryUnitsLabel =
new javax.swing.JLabel();
578 totalMemoryLabel =
new javax.swing.JLabel();
579 systemMemoryTotal =
new javax.swing.JLabel();
580 restartNecessaryWarning =
new javax.swing.JLabel();
581 memField =
new javax.swing.JTextField();
582 memFieldValidationLabel =
new javax.swing.JLabel();
583 maxMemoryUnitsLabel1 =
new javax.swing.JLabel();
584 maxLogFileCount =
new javax.swing.JLabel();
585 logFileCount =
new javax.swing.JTextField();
586 logNumAlert =
new javax.swing.JTextField();
587 maxSolrMemoryLabel =
new javax.swing.JLabel();
588 maxMemoryUnitsLabel2 =
new javax.swing.JLabel();
589 solrMaxHeapSpinner =
new javax.swing.JSpinner();
590 solrJVMHeapWarning =
new javax.swing.JLabel();
591 tempDirectoryPanel =
new javax.swing.JPanel();
592 tempDirectoryField =
new javax.swing.JTextField();
593 tempDirectoryBrowseButton =
new javax.swing.JButton();
594 tempDirectoryWarningLabel =
new javax.swing.JLabel();
595 rdpPanel =
new javax.swing.JPanel();
596 javax.swing.JScrollPane sizingScrollPane =
new javax.swing.JScrollPane();
597 javax.swing.JTextPane sizingTextPane =
new javax.swing.JTextPane();
598 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));
599 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));
601 jScrollPane1.setBorder(null);
603 mainPanel.setMinimumSize(
new java.awt.Dimension(648, 382));
604 mainPanel.setLayout(
new java.awt.GridBagLayout());
606 logoPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logoPanel.border.title")));
608 agencyLogoPathField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathField.text"));
610 org.openide.awt.Mnemonics.setLocalizedText(browseLogosButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.browseLogosButton.text"));
611 browseLogosButton.addActionListener(
new java.awt.event.ActionListener() {
612 public void actionPerformed(java.awt.event.ActionEvent evt) {
613 browseLogosButtonActionPerformed(evt);
617 agencyLogoPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
618 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPreview,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPreview.text"));
619 agencyLogoPreview.setBorder(javax.swing.BorderFactory.createEtchedBorder());
620 agencyLogoPreview.setMaximumSize(
new java.awt.Dimension(64, 64));
621 agencyLogoPreview.setMinimumSize(
new java.awt.Dimension(64, 64));
622 agencyLogoPreview.setPreferredSize(
new java.awt.Dimension(64, 64));
624 logoSourceButtonGroup.add(defaultLogoRB);
625 org.openide.awt.Mnemonics.setLocalizedText(defaultLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.defaultLogoRB.text"));
626 defaultLogoRB.addActionListener(
new java.awt.event.ActionListener() {
627 public void actionPerformed(java.awt.event.ActionEvent evt) {
628 defaultLogoRBActionPerformed(evt);
632 logoSourceButtonGroup.add(specifyLogoRB);
633 org.openide.awt.Mnemonics.setLocalizedText(specifyLogoRB,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.specifyLogoRB.text"));
634 specifyLogoRB.addActionListener(
new java.awt.event.ActionListener() {
635 public void actionPerformed(java.awt.event.ActionEvent evt) {
636 specifyLogoRBActionPerformed(evt);
640 agencyLogoPathFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
641 org.openide.awt.Mnemonics.setLocalizedText(agencyLogoPathFieldValidationLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.agencyLogoPathFieldValidationLabel.text"));
643 javax.swing.GroupLayout logoPanelLayout =
new javax.swing.GroupLayout(logoPanel);
644 logoPanel.setLayout(logoPanelLayout);
645 logoPanelLayout.setHorizontalGroup(
646 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
647 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
649 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
650 .addComponent(specifyLogoRB)
651 .addComponent(defaultLogoRB))
652 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
653 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
654 .addComponent(agencyLogoPathFieldValidationLabel)
655 .addGroup(logoPanelLayout.createSequentialGroup()
656 .addComponent(agencyLogoPathField, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
657 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
658 .addComponent(browseLogosButton)))
659 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
660 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
661 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
663 logoPanelLayout.setVerticalGroup(
664 logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
665 .addGroup(logoPanelLayout.createSequentialGroup()
667 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
668 .addComponent(defaultLogoRB)
669 .addComponent(agencyLogoPathFieldValidationLabel))
670 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
671 .addGroup(logoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
672 .addComponent(specifyLogoRB)
673 .addComponent(agencyLogoPathField)
674 .addComponent(browseLogosButton)))
675 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, logoPanelLayout.createSequentialGroup()
676 .addComponent(agencyLogoPreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
677 .addGap(0, 0, Short.MAX_VALUE))
680 gridBagConstraints =
new java.awt.GridBagConstraints();
681 gridBagConstraints.gridx = 0;
682 gridBagConstraints.gridy = 2;
683 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
684 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
685 mainPanel.add(logoPanel, gridBagConstraints);
687 runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.runtimePanel.border.title")));
689 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryLabel.text"));
691 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
693 org.openide.awt.Mnemonics.setLocalizedText(totalMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.totalMemoryLabel.text"));
695 systemMemoryTotal.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
697 restartNecessaryWarning.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
698 org.openide.awt.Mnemonics.setLocalizedText(restartNecessaryWarning,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.restartNecessaryWarning.text"));
700 memField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
701 memField.addKeyListener(
new java.awt.event.KeyAdapter() {
702 public void keyReleased(java.awt.event.KeyEvent evt) {
703 memFieldKeyReleased(evt);
707 memFieldValidationLabel.setForeground(
new java.awt.Color(255, 0, 0));
709 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel1,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel.text"));
711 org.openide.awt.Mnemonics.setLocalizedText(maxLogFileCount,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxLogFileCount.text"));
713 logFileCount.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
714 logFileCount.addKeyListener(
new java.awt.event.KeyAdapter() {
715 public void keyReleased(java.awt.event.KeyEvent evt) {
716 logFileCountKeyReleased(evt);
720 logNumAlert.setEditable(
false);
721 logNumAlert.setForeground(
new java.awt.Color(255, 0, 0));
722 logNumAlert.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.logNumAlert.text"));
723 logNumAlert.setBorder(null);
725 org.openide.awt.Mnemonics.setLocalizedText(maxSolrMemoryLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxSolrMemoryLabel.text"));
727 org.openide.awt.Mnemonics.setLocalizedText(maxMemoryUnitsLabel2,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.maxMemoryUnitsLabel2.text"));
729 solrMaxHeapSpinner.addChangeListener(
new javax.swing.event.ChangeListener() {
730 public void stateChanged(javax.swing.event.ChangeEvent evt) {
731 solrMaxHeapSpinnerStateChanged(evt);
735 org.openide.awt.Mnemonics.setLocalizedText(solrJVMHeapWarning,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.solrJVMHeapWarning.text"));
737 javax.swing.GroupLayout runtimePanelLayout =
new javax.swing.GroupLayout(runtimePanel);
738 runtimePanel.setLayout(runtimePanelLayout);
739 runtimePanelLayout.setHorizontalGroup(
740 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
741 .addGroup(runtimePanelLayout.createSequentialGroup()
743 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
744 .addGroup(runtimePanelLayout.createSequentialGroup()
745 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
746 .addComponent(totalMemoryLabel)
747 .addComponent(maxSolrMemoryLabel)
748 .addComponent(maxMemoryLabel)
749 .addComponent(maxLogFileCount))
751 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
752 .addComponent(logFileCount, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
753 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
754 .addComponent(memField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
755 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
757 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
758 .addComponent(maxMemoryUnitsLabel1)
759 .addComponent(maxMemoryUnitsLabel)
760 .addComponent(maxMemoryUnitsLabel2))
761 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
762 .addGroup(runtimePanelLayout.createSequentialGroup()
764 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
765 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
766 .addGroup(runtimePanelLayout.createSequentialGroup()
768 .addComponent(solrJVMHeapWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 331, javax.swing.GroupLayout.PREFERRED_SIZE)
770 .addComponent(logNumAlert)
771 .addContainerGap())))
772 .addComponent(restartNecessaryWarning, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)))
775 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {maxLogFileCount, maxMemoryLabel, totalMemoryLabel});
777 runtimePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {logFileCount, memField});
779 runtimePanelLayout.setVerticalGroup(
780 runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
781 .addGroup(runtimePanelLayout.createSequentialGroup()
783 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
784 .addComponent(totalMemoryLabel)
785 .addComponent(maxMemoryUnitsLabel1)
786 .addComponent(systemMemoryTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
787 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
788 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
789 .addComponent(memFieldValidationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
790 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
791 .addComponent(maxMemoryLabel)
792 .addComponent(memField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
793 .addComponent(maxMemoryUnitsLabel)))
794 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
795 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
796 .addComponent(logNumAlert, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
797 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
798 .addComponent(maxSolrMemoryLabel)
799 .addComponent(maxMemoryUnitsLabel2)
800 .addComponent(solrMaxHeapSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
801 .addComponent(solrJVMHeapWarning)))
802 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
803 .addGroup(runtimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
804 .addComponent(maxLogFileCount)
805 .addComponent(logFileCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
806 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
807 .addComponent(restartNecessaryWarning)
811 gridBagConstraints =
new java.awt.GridBagConstraints();
812 gridBagConstraints.gridx = 0;
813 gridBagConstraints.gridy = 0;
814 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
815 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
816 mainPanel.add(runtimePanel, gridBagConstraints);
818 tempDirectoryPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.border.title")));
819 tempDirectoryPanel.setName(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.name"));
821 tempDirectoryField.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryField.text"));
823 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryBrowseButton,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryBrowseButton.text"));
824 tempDirectoryBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
825 public void actionPerformed(java.awt.event.ActionEvent evt) {
826 tempDirectoryBrowseButtonActionPerformed(evt);
830 tempDirectoryWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/corecomponents/warning16.png")));
831 org.openide.awt.Mnemonics.setLocalizedText(tempDirectoryWarningLabel,
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryWarningLabel.text"));
833 javax.swing.GroupLayout tempDirectoryPanelLayout =
new javax.swing.GroupLayout(tempDirectoryPanel);
834 tempDirectoryPanel.setLayout(tempDirectoryPanelLayout);
835 tempDirectoryPanelLayout.setHorizontalGroup(
836 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
837 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
839 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
840 .addComponent(tempDirectoryWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 615, javax.swing.GroupLayout.PREFERRED_SIZE)
841 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
842 .addComponent(tempDirectoryField, javax.swing.GroupLayout.PREFERRED_SIZE, 367, javax.swing.GroupLayout.PREFERRED_SIZE)
843 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
844 .addComponent(tempDirectoryBrowseButton)))
845 .addGap(0, 0, Short.MAX_VALUE))
847 tempDirectoryPanelLayout.setVerticalGroup(
848 tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
849 .addGroup(tempDirectoryPanelLayout.createSequentialGroup()
851 .addGroup(tempDirectoryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
852 .addComponent(tempDirectoryField)
853 .addComponent(tempDirectoryBrowseButton))
855 .addComponent(tempDirectoryWarningLabel)
859 gridBagConstraints =
new java.awt.GridBagConstraints();
860 gridBagConstraints.gridx = 0;
861 gridBagConstraints.gridy = 1;
862 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
863 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
864 mainPanel.add(tempDirectoryPanel, gridBagConstraints);
865 tempDirectoryPanel.getAccessibleContext().setAccessibleName(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.tempDirectoryPanel.AccessibleContext.accessibleName"));
867 rdpPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.rdpPanel.border.title")));
868 rdpPanel.setMinimumSize(
new java.awt.Dimension(33, 100));
869 rdpPanel.setPreferredSize(
new java.awt.Dimension(100, 150));
870 rdpPanel.setLayout(
new java.awt.GridBagLayout());
872 sizingScrollPane.setBorder(null);
874 sizingTextPane.setEditable(
false);
875 sizingTextPane.setBorder(null);
876 sizingTextPane.setText(
org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class,
"AutopsyOptionsPanel.sizingTextPane.text"));
877 sizingTextPane.setOpaque(
false);
878 sizingScrollPane.setViewportView(sizingTextPane);
880 gridBagConstraints =
new java.awt.GridBagConstraints();
881 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
882 gridBagConstraints.weightx = 1.0;
883 gridBagConstraints.weighty = 1.0;
884 rdpPanel.add(sizingScrollPane, gridBagConstraints);
886 gridBagConstraints =
new java.awt.GridBagConstraints();
887 gridBagConstraints.gridy = 3;
888 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
889 mainPanel.add(rdpPanel, gridBagConstraints);
890 gridBagConstraints =
new java.awt.GridBagConstraints();
891 gridBagConstraints.gridx = 1;
892 gridBagConstraints.gridy = 0;
893 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
894 gridBagConstraints.weightx = 1.0;
895 mainPanel.add(filler1, gridBagConstraints);
896 gridBagConstraints =
new java.awt.GridBagConstraints();
897 gridBagConstraints.gridx = 0;
898 gridBagConstraints.gridy = 4;
899 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
900 gridBagConstraints.weighty = 1.0;
901 mainPanel.add(filler2, gridBagConstraints);
903 jScrollPane1.setViewportView(mainPanel);
905 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
906 this.setLayout(layout);
907 layout.setHorizontalGroup(
908 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
909 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE)
911 layout.setVerticalGroup(
912 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
913 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
918 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title=Path cannot be used",
920 "AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description=Unable to create temporary directory within specified path: {0}",})
921 private void tempDirectoryBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
922 int returnState = tempDirChooser.showOpenDialog(
this);
923 if (returnState == JFileChooser.APPROVE_OPTION) {
924 String specifiedPath = tempDirChooser.getSelectedFile().getPath();
926 File f =
new File(specifiedPath);
927 if (!f.exists() && !f.mkdirs()) {
928 throw new InvalidPathException(specifiedPath,
"Unable to create parent directories leading to " + specifiedPath);
930 tempDirectoryField.setText(specifiedPath);
931 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
932 }
catch (InvalidPathException ex) {
933 logger.log(Level.WARNING,
"Unable to create temporary directory in " + specifiedPath, ex);
934 JOptionPane.showMessageDialog(
this,
935 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_description(specifiedPath),
936 Bundle.AutopsyOptionsPanel_tempDirectoryBrowseButtonActionPerformed_onInvalidPath_title(),
937 JOptionPane.ERROR_MESSAGE);
942 private void solrMaxHeapSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {
943 int value = (int) solrMaxHeapSpinner.getValue();
944 if (value == UserPreferences.getMaxSolrVMSize()) {
948 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
951 private void logFileCountKeyReleased(java.awt.event.KeyEvent evt) {
952 String count = logFileCount.getText();
953 if (count.equals(String.valueOf(UserPreferences.getDefaultLogFileCount()))) {
957 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
960 private void memFieldKeyReleased(java.awt.event.KeyEvent evt) {
961 String memText = memField.getText();
962 if (memText.equals(initialMemValue)) {
966 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
969 private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
970 agencyLogoPathField.setEnabled(
true);
971 browseLogosButton.setEnabled(
true);
973 if (agencyLogoPathField.getText().isEmpty()) {
974 String path = ModuleSettings.getConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP);
975 if (path != null && !path.isEmpty()) {
976 updateAgencyLogo(path);
979 }
catch (IOException ex) {
980 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path.", ex);
982 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
985 private void defaultLogoRBActionPerformed(java.awt.event.ActionEvent evt) {
986 agencyLogoPathField.setEnabled(
false);
987 browseLogosButton.setEnabled(
false);
989 updateAgencyLogo(
"");
990 }
catch (IOException ex) {
992 logger.log(Level.SEVERE,
"Unexpected error occurred while updating the agency logo.", ex);
994 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
997 private void browseLogosButtonActionPerformed(java.awt.event.ActionEvent evt) {
998 String oldLogoPath = agencyLogoPathField.getText();
999 int returnState = logoFileChooser.showOpenDialog(
this);
1000 if (returnState == JFileChooser.APPROVE_OPTION) {
1001 String path = logoFileChooser.getSelectedFile().getPath();
1003 updateAgencyLogo(path);
1004 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1005 }
catch (IOException | IndexOutOfBoundsException ex) {
1006 JOptionPane.showMessageDialog(
this,
1007 NbBundle.getMessage(
this.getClass(),
1008 "AutopsyOptionsPanel.invalidImageFile.msg"),
1009 NbBundle.getMessage(
this.getClass(),
"AutopsyOptionsPanel.invalidImageFile.title"),
1010 JOptionPane.ERROR_MESSAGE);
1012 updateAgencyLogo(oldLogoPath);
1013 }
catch (IOException ex1) {
1014 logger.log(Level.WARNING,
"Error loading image from previously saved agency logo path", ex1);
1021 private javax.swing.JTextField agencyLogoPathField;
1022 private javax.swing.JLabel agencyLogoPathFieldValidationLabel;
1023 private javax.swing.JLabel agencyLogoPreview;
1024 private javax.swing.JButton browseLogosButton;
1025 private javax.swing.JRadioButton defaultLogoRB;
1026 private javax.swing.ButtonGroup displayTimesButtonGroup;
1027 private javax.swing.ButtonGroup fileSelectionButtonGroup;
1028 private javax.swing.JScrollPane jScrollPane1;
1029 private javax.swing.JTextField logFileCount;
1030 private javax.swing.JTextField logNumAlert;
1031 private javax.swing.JPanel logoPanel;
1032 private javax.swing.ButtonGroup logoSourceButtonGroup;
1033 private javax.swing.JLabel maxLogFileCount;
1034 private javax.swing.JLabel maxMemoryLabel;
1035 private javax.swing.JLabel maxMemoryUnitsLabel;
1036 private javax.swing.JLabel maxMemoryUnitsLabel1;
1037 private javax.swing.JLabel maxMemoryUnitsLabel2;
1038 private javax.swing.JLabel maxSolrMemoryLabel;
1039 private javax.swing.JTextField memField;
1040 private javax.swing.JLabel memFieldValidationLabel;
1041 private javax.swing.JPanel rdpPanel;
1042 private javax.swing.JLabel restartNecessaryWarning;
1043 private javax.swing.JPanel runtimePanel;
1044 private javax.swing.JLabel solrJVMHeapWarning;
1045 private javax.swing.JSpinner solrMaxHeapSpinner;
1046 private javax.swing.JRadioButton specifyLogoRB;
1047 private javax.swing.JLabel systemMemoryTotal;
1048 private javax.swing.JButton tempDirectoryBrowseButton;
1049 private javax.swing.JTextField tempDirectoryField;
1050 private javax.swing.JPanel tempDirectoryPanel;
1051 private javax.swing.JLabel tempDirectoryWarningLabel;
1052 private javax.swing.JLabel totalMemoryLabel;
void insertUpdate(DocumentEvent e)
void removeUpdate(DocumentEvent e)
void changedUpdate(DocumentEvent e)