19 package org.sleuthkit.autopsy.ingest;
 
   21 import java.awt.Cursor;
 
   22 import java.awt.event.ActionEvent;
 
   24 import java.util.TreeMap;
 
   25 import javax.swing.DefaultListModel;
 
   26 import javax.swing.JOptionPane;
 
   27 import javax.swing.event.ListSelectionEvent;
 
   28 import javax.swing.event.ListSelectionListener;
 
   29 import org.netbeans.spi.options.OptionsPanelController;
 
   30 import org.openide.util.NbBundle;
 
   41 @SuppressWarnings(
"PMD.SingularField") 
 
   42 class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel {
 
   44     @NbBundle.Messages({
"ProfileSettingsPanel.title=Profile Settings",
 
   45         "ProfileSettingsPanel.profileListLabel.text=Profiles:",
 
   46         "ProfileSettingsPanel.profileDescLabel.text=Profile Description:",
 
   47         "ProfileSettingsPanel.filterNameLabel.text=Filter:",
 
   48         "ProfileSettingsPanel.selectedModulesLabel.text=Selected Ingest Modules:",
 
   49         "ProfileSettingsPanel.newProfileButton.text=New Profile",
 
   50         "ProfileSettingsPanel.editProfileButton.text=Edit Profile",
 
   51         "ProfileSettingsPanel.deleteProfileButton.text=Delete Profile",
 
   52         "ProfileSettingsPanel.messages.filterLoadFailed=Failed to load file ingest filter",
 
   53         "# {0} - profile name",
 
   54         "ProfileSettingsPanel.doFileSetsDialog.duplicateProfile.text=Profile with name {0} already exists.",
 
   55         "ProfileSettingsPanel.infoTextArea.text=An Ingest Profile runs a preconfigured set of ingest modules" 
   56         + 
" on some or all of the files in a data source. Create a profile if you frequently run the same set of modules on a subset of the files." 
   59     private final DefaultListModel<IngestProfile> profilesListModel;
 
   60     private Map<String, IngestProfile> profiles;
 
   61     private ProfilePanel panel;
 
   62     private boolean canBeEnabled;  
 
   63     private int option = JOptionPane.CANCEL_OPTION;
 
   67     ProfileSettingsPanel() {
 
   68         this.profilesListModel = 
new DefaultListModel<>();
 
   70         this.profileList.setModel(profilesListModel);
 
   71         this.profileList.addListSelectionListener(
new ProfileSettingsPanel.ProfileListSelectionListener());
 
   72         ingestWarningLabel.setVisible(
false);
 
   73         canBeEnabled = !IngestManager.getInstance().isIngestRunning();
 
   82     @SuppressWarnings(
"unchecked")
 
   84     private 
void initComponents() {
 
   86         profileListPane = 
new javax.swing.JScrollPane();
 
   87         profileList = 
new javax.swing.JList<>();
 
   88         profileListLabel = 
new javax.swing.JLabel();
 
   89         profileDescPane = 
new javax.swing.JScrollPane();
 
   90         profileDescArea = 
new javax.swing.JTextArea();
 
   91         profileDescLabel = 
new javax.swing.JLabel();
 
   92         filterNameLabel = 
new javax.swing.JLabel();
 
   93         filterNameText = 
new javax.swing.JLabel();
 
   94         filterDescPane = 
new javax.swing.JScrollPane();
 
   95         filterDescArea = 
new javax.swing.JTextArea();
 
   96         selectedModulesPane = 
new javax.swing.JScrollPane();
 
   97         selectedModulesArea = 
new javax.swing.JTextArea();
 
   98         selectedModulesLabel = 
new javax.swing.JLabel();
 
   99         ingestWarningLabel = 
new javax.swing.JLabel();
 
  100         jSeparator2 = 
new javax.swing.JSeparator();
 
  101         jScrollPane2 = 
new javax.swing.JScrollPane();
 
  102         infoTextArea = 
new javax.swing.JTextArea();
 
  103         buttonEnclosingPanel = 
new javax.swing.JPanel();
 
  104         editProfileButton = 
new javax.swing.JButton();
 
  105         newProfileButton = 
new javax.swing.JButton();
 
  106         deleteProfileButton = 
new javax.swing.JButton();
 
  108         setBorder(javax.swing.BorderFactory.createEtchedBorder());
 
  109         setPreferredSize(
new java.awt.Dimension(800, 488));
 
  111         profileList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
 
  112         profileListPane.setViewportView(profileList);
 
  114         org.openide.awt.Mnemonics.setLocalizedText(profileListLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.profileListLabel.text")); 
 
  116         profileDescArea.setEditable(
false);
 
  117         profileDescArea.setBackground(
new java.awt.Color(240, 240, 240));
 
  118         profileDescArea.setColumns(20);
 
  119         profileDescArea.setLineWrap(
true);
 
  120         profileDescArea.setRows(5);
 
  121         profileDescArea.setWrapStyleWord(
true);
 
  122         profileDescArea.setMinimumSize(
new java.awt.Dimension(10, 22));
 
  123         profileDescPane.setViewportView(profileDescArea);
 
  125         org.openide.awt.Mnemonics.setLocalizedText(profileDescLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.profileDescLabel.text")); 
 
  127         org.openide.awt.Mnemonics.setLocalizedText(filterNameLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.filterNameLabel.text")); 
 
  128         filterNameLabel.setMinimumSize(
new java.awt.Dimension(30, 14));
 
  130         filterNameText.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
 
  131         filterNameText.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
 
  133         filterDescPane.setAutoscrolls(
true);
 
  135         filterDescArea.setEditable(
false);
 
  136         filterDescArea.setBackground(
new java.awt.Color(240, 240, 240));
 
  137         filterDescArea.setColumns(20);
 
  138         filterDescArea.setLineWrap(
true);
 
  139         filterDescArea.setRows(5);
 
  140         filterDescArea.setWrapStyleWord(
true);
 
  141         filterDescArea.setMinimumSize(
new java.awt.Dimension(10, 40));
 
  142         filterDescPane.setViewportView(filterDescArea);
 
  144         selectedModulesArea.setEditable(
false);
 
  145         selectedModulesArea.setBackground(
new java.awt.Color(240, 240, 240));
 
  146         selectedModulesArea.setColumns(20);
 
  147         selectedModulesArea.setLineWrap(
true);
 
  148         selectedModulesArea.setRows(5);
 
  149         selectedModulesArea.setWrapStyleWord(
true);
 
  150         selectedModulesPane.setViewportView(selectedModulesArea);
 
  152         org.openide.awt.Mnemonics.setLocalizedText(selectedModulesLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.selectedModulesLabel.text")); 
 
  154         ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  155         ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); 
 
  156         org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.ingestWarningLabel.text")); 
 
  158         jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL);
 
  160         jScrollPane2.setFont(jScrollPane2.getFont().deriveFont(jScrollPane2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  162         infoTextArea.setEditable(
false);
 
  163         infoTextArea.setBackground(
new java.awt.Color(240, 240, 240));
 
  164         infoTextArea.setColumns(20);
 
  165         infoTextArea.setFont(infoTextArea.getFont().deriveFont(infoTextArea.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  166         infoTextArea.setLineWrap(
true);
 
  167         infoTextArea.setRows(3);
 
  168         infoTextArea.setText(
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.infoTextArea.text")); 
 
  169         infoTextArea.setWrapStyleWord(
true);
 
  170         jScrollPane2.setViewportView(infoTextArea);
 
  172         editProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png"))); 
 
  173         org.openide.awt.Mnemonics.setLocalizedText(editProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.editProfileButton.text")); 
 
  174         editProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  175         editProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  176         editProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  177         editProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  178             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  179                 editProfileButtonActionPerformed(evt);
 
  183         newProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png"))); 
 
  184         org.openide.awt.Mnemonics.setLocalizedText(newProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.newProfileButton.text")); 
 
  185         newProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  186         newProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  187         newProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  188         newProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  189             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  190                 newProfileButtonActionPerformed(evt);
 
  194         deleteProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png"))); 
 
  195         org.openide.awt.Mnemonics.setLocalizedText(deleteProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.deleteProfileButton.text")); 
 
  196         deleteProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  197         deleteProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  198         deleteProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  199         deleteProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  200             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  201                 deleteProfileButtonActionPerformed(evt);
 
  205         javax.swing.GroupLayout buttonEnclosingPanelLayout = 
new javax.swing.GroupLayout(buttonEnclosingPanel);
 
  206         buttonEnclosingPanel.setLayout(buttonEnclosingPanelLayout);
 
  207         buttonEnclosingPanelLayout.setHorizontalGroup(
 
  208             buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  209             .addGroup(buttonEnclosingPanelLayout.createSequentialGroup()
 
  211                 .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  212                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  213                 .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  214                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  215                 .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  219         buttonEnclosingPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, 
new java.awt.Component[] {deleteProfileButton, editProfileButton, newProfileButton});
 
  221         buttonEnclosingPanelLayout.setVerticalGroup(
 
  222             buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  223             .addGroup(buttonEnclosingPanelLayout.createSequentialGroup()
 
  225                 .addGroup(buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  226                     .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  227                     .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  228                     .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  232         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  233         this.setLayout(layout);
 
  234         layout.setHorizontalGroup(
 
  235             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  236             .addGroup(layout.createSequentialGroup()
 
  238                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  239                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  240                         .addGroup(layout.createSequentialGroup()
 
  241                             .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  242                                 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  243                                 .addComponent(profileListLabel))
 
  245                         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 
  246                             .addComponent(profileListPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  247                             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
 
  248                     .addGroup(layout.createSequentialGroup()
 
  249                         .addComponent(buttonEnclosingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  250                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
 
  251                 .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  252                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  253                     .addGroup(layout.createSequentialGroup()
 
  255                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  256                             .addGroup(layout.createSequentialGroup()
 
  257                                 .addComponent(profileDescLabel)
 
  258                                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  259                             .addGroup(layout.createSequentialGroup()
 
  260                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  261                                     .addGroup(layout.createSequentialGroup()
 
  263                                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  264                                             .addGroup(layout.createSequentialGroup()
 
  265                                                 .addComponent(ingestWarningLabel)
 
  266                                                 .addGap(0, 0, Short.MAX_VALUE))
 
  267                                             .addComponent(profileDescPane, javax.swing.GroupLayout.Alignment.TRAILING)
 
  268                                             .addComponent(selectedModulesPane, javax.swing.GroupLayout.Alignment.TRAILING)))
 
  269                                     .addGroup(layout.createSequentialGroup()
 
  271                                         .addComponent(filterDescPane)))
 
  272                                 .addContainerGap())))
 
  273                     .addGroup(layout.createSequentialGroup()
 
  274                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  275                         .addComponent(filterNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  277                         .addComponent(filterNameText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  279                     .addGroup(layout.createSequentialGroup()
 
  280                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  281                         .addComponent(selectedModulesLabel)
 
  282                         .addContainerGap())))
 
  285         layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, 
new java.awt.Component[] {buttonEnclosingPanel, jScrollPane2, profileListPane});
 
  287         layout.setVerticalGroup(
 
  288             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  289             .addGroup(layout.createSequentialGroup()
 
  291                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  292                     .addGroup(layout.createSequentialGroup()
 
  293                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  294                             .addGroup(layout.createSequentialGroup()
 
  295                                 .addComponent(profileDescLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  296                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  297                                 .addComponent(profileDescPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  298                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  299                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  300                                     .addComponent(filterNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  301                                     .addComponent(filterNameText, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  302                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  303                                 .addComponent(filterDescPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  304                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  305                                 .addComponent(selectedModulesLabel)
 
  306                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  307                                 .addComponent(selectedModulesPane, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE))
 
  308                             .addGroup(layout.createSequentialGroup()
 
  309                                 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  310                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  311                                 .addComponent(profileListLabel)
 
  312                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  313                                 .addComponent(profileListPane, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)))
 
  314                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  315                             .addGroup(layout.createSequentialGroup()
 
  317                                 .addComponent(ingestWarningLabel))
 
  318                             .addGroup(layout.createSequentialGroup()
 
  319                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  320                                 .addComponent(buttonEnclosingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
 
  322                     .addComponent(jSeparator2)))
 
  326     private void newProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  327         doProfileDialog(null);
 
  328         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  331     private void deleteProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  332         IngestProfile selectedProfile = this.profileList.getSelectedValue();
 
  333         this.profilesListModel.removeElement(selectedProfile);
 
  334         profiles.remove(selectedProfile.getName());
 
  335         IngestProfile.deleteProfile(selectedProfile);
 
  339         this.resetComponents();
 
  340         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  349     void enableButtons(
boolean isEnabled) {
 
  350         canBeEnabled = isEnabled;  
 
  352         ingestWarningLabel.setVisible(!canBeEnabled);
 
  358     private void resetComponents() {
 
  359         if (!this.profilesListModel.isEmpty()) {
 
  360             this.profileList.setSelectedIndex(0);
 
  362             this.profilesListModel.clear();
 
  363             this.profileDescArea.setText(
"");
 
  364             this.filterDescArea.setText(
"");
 
  365             this.filterNameText.setText(
"");
 
  366             this.selectedModulesArea.setText(
"");
 
  375     private void refreshButtons() {
 
  376         IngestProfile selectedProfile = ProfileSettingsPanel.this.profileList.getSelectedValue();
 
  377         boolean profileIsSelected = (selectedProfile != null);
 
  378         newProfileButton.setEnabled(canBeEnabled);
 
  379         editProfileButton.setEnabled(canBeEnabled && profileIsSelected);
 
  380         deleteProfileButton.setEnabled(canBeEnabled && profileIsSelected);
 
  385     private void editProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  386         IngestProfile selectedProfile = profileList.getSelectedValue();
 
  387         doProfileDialog(selectedProfile);
 
  388         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  396     private void doProfileDialog(IngestProfile selectedProfile) {
 
  398          final AdvancedConfigurationDialog dialog = 
new AdvancedConfigurationDialog(
true);
 
  399         this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  401         if (selectedProfile != null) {
 
  403             panel = 
new ProfilePanel(selectedProfile);
 
  406             panel = 
new ProfilePanel();
 
  408          dialog.addApplyButtonListener(
 
  411                         option = JOptionPane.OK_OPTION;
 
  418         setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 
  421             option = JOptionPane.CANCEL_OPTION; 
 
  422             dialog.display(panel);
 
  423         } 
while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition());
 
  425         if (option == JOptionPane.OK_OPTION) {
 
  429             if (this.profiles.containsKey(panel.getProfileName()) && selectedProfile == null) {
 
  430                 MessageNotifyUtil.Message.error(NbBundle.getMessage(
this.getClass(),
 
  431                         "ProfileSettingsPanel.doFileSetsDialog.duplicateProfile.text",
 
  432                         panel.getProfileName()));
 
  435             panel.saveSettings();
 
  441     public void saveSettings() {
 
  445     public void store() {
 
  453         int currentIndex = this.profileList.getSelectedIndex();
 
  454         this.profilesListModel.clear();
 
  455         this.profiles = 
new TreeMap<>();
 
  456         for (IngestProfile profile : IngestProfiles.getIngestProfiles()) {
 
  457             profilesListModel.addElement(profile);
 
  458             profiles.put(profile.getName(), profile);
 
  460         if (currentIndex < 0 || currentIndex >= profilesListModel.getSize()) {
 
  464         this.profileList.setSelectedIndex(currentIndex);
 
  471             if (e.getValueIsAdjusting()) {
 
  476             IngestProfile selectedProfile = ProfileSettingsPanel.this.profileList.getSelectedValue();
 
  478             if (selectedProfile != null) {
 
  484                         fileIngestFilters.put(fSet.getName(), fSet);
 
  486                     filterDescArea.setText(fileIngestFilters.get(selectedProfile.
getFileIngestFilter()).getDescription());
 
  488                     filterDescArea.setText(NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.messages.filterLoadFailed"));
 
  490                 selectedModulesArea.setText(
"");
 
  491                 for (String moduleName : 
IngestJobSettings.getEnabledModules(selectedProfile.getName())) {
 
  492                     selectedModulesArea.append(moduleName + 
"\n");
 
  499     private javax.swing.JPanel buttonEnclosingPanel;
 
  500     private javax.swing.JButton deleteProfileButton;
 
  501     private javax.swing.JButton editProfileButton;
 
  502     private javax.swing.JTextArea filterDescArea;
 
  503     private javax.swing.JScrollPane filterDescPane;
 
  504     private javax.swing.JLabel filterNameLabel;
 
  505     private javax.swing.JLabel filterNameText;
 
  506     private javax.swing.JTextArea infoTextArea;
 
  507     private javax.swing.JLabel ingestWarningLabel;
 
  508     private javax.swing.JScrollPane jScrollPane2;
 
  509     private javax.swing.JSeparator jSeparator2;
 
  510     private javax.swing.JButton newProfileButton;
 
  511     private javax.swing.JTextArea profileDescArea;
 
  512     private javax.swing.JLabel profileDescLabel;
 
  513     private javax.swing.JScrollPane profileDescPane;
 
  515     private javax.swing.JLabel profileListLabel;
 
  516     private javax.swing.JScrollPane profileListPane;
 
  517     private javax.swing.JTextArea selectedModulesArea;
 
  518     private javax.swing.JLabel selectedModulesLabel;
 
  519     private javax.swing.JScrollPane selectedModulesPane;
 
static List< FilesSet > getStandardFileIngestFilters()
static synchronized FilesSetsManager getInstance()
void valueChanged(ListSelectionEvent e)
Map< String, FilesSet > getCustomFileIngestFilters()
String getFileIngestFilter()