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         infoScrollPane = 
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.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); 
 
  155         org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.ingestWarningLabel.text")); 
 
  157         jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL);
 
  159         infoTextArea.setEditable(
false);
 
  160         infoTextArea.setBackground(
new java.awt.Color(240, 240, 240));
 
  161         infoTextArea.setColumns(20);
 
  162         infoTextArea.setLineWrap(
true);
 
  163         infoTextArea.setRows(3);
 
  164         infoTextArea.setText(
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.infoTextArea.text")); 
 
  165         infoTextArea.setWrapStyleWord(
true);
 
  166         infoScrollPane.setViewportView(infoTextArea);
 
  168         editProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png"))); 
 
  169         org.openide.awt.Mnemonics.setLocalizedText(editProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.editProfileButton.text")); 
 
  170         editProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  171         editProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  172         editProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  173         editProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  174             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  175                 editProfileButtonActionPerformed(evt);
 
  179         newProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png"))); 
 
  180         org.openide.awt.Mnemonics.setLocalizedText(newProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.newProfileButton.text")); 
 
  181         newProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  182         newProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  183         newProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  184         newProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  185             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  186                 newProfileButtonActionPerformed(evt);
 
  190         deleteProfileButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png"))); 
 
  191         org.openide.awt.Mnemonics.setLocalizedText(deleteProfileButton, 
org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.deleteProfileButton.text")); 
 
  192         deleteProfileButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
 
  193         deleteProfileButton.setMaximumSize(
new java.awt.Dimension(111, 25));
 
  194         deleteProfileButton.setMinimumSize(
new java.awt.Dimension(111, 25));
 
  195         deleteProfileButton.addActionListener(
new java.awt.event.ActionListener() {
 
  196             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  197                 deleteProfileButtonActionPerformed(evt);
 
  201         javax.swing.GroupLayout buttonEnclosingPanelLayout = 
new javax.swing.GroupLayout(buttonEnclosingPanel);
 
  202         buttonEnclosingPanel.setLayout(buttonEnclosingPanelLayout);
 
  203         buttonEnclosingPanelLayout.setHorizontalGroup(
 
  204             buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  205             .addGroup(buttonEnclosingPanelLayout.createSequentialGroup()
 
  207                 .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  208                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  209                 .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  210                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  211                 .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  215         buttonEnclosingPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, 
new java.awt.Component[] {deleteProfileButton, editProfileButton, newProfileButton});
 
  217         buttonEnclosingPanelLayout.setVerticalGroup(
 
  218             buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  219             .addGroup(buttonEnclosingPanelLayout.createSequentialGroup()
 
  221                 .addGroup(buttonEnclosingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  222                     .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  223                     .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  224                     .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  228         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  229         this.setLayout(layout);
 
  230         layout.setHorizontalGroup(
 
  231             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  232             .addGroup(layout.createSequentialGroup()
 
  234                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  235                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  236                         .addGroup(layout.createSequentialGroup()
 
  237                             .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  238                                 .addComponent(infoScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  239                                 .addComponent(profileListLabel))
 
  241                         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 
  242                             .addComponent(profileListPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  243                             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
 
  244                     .addGroup(layout.createSequentialGroup()
 
  245                         .addComponent(buttonEnclosingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  246                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
 
  247                 .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  248                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  249                     .addGroup(layout.createSequentialGroup()
 
  251                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  252                             .addGroup(layout.createSequentialGroup()
 
  253                                 .addComponent(profileDescLabel)
 
  254                                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  255                             .addGroup(layout.createSequentialGroup()
 
  256                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  257                                     .addGroup(layout.createSequentialGroup()
 
  259                                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  260                                             .addGroup(layout.createSequentialGroup()
 
  261                                                 .addComponent(ingestWarningLabel)
 
  262                                                 .addGap(0, 0, Short.MAX_VALUE))
 
  263                                             .addComponent(profileDescPane, javax.swing.GroupLayout.Alignment.TRAILING)
 
  264                                             .addComponent(selectedModulesPane, javax.swing.GroupLayout.Alignment.TRAILING)))
 
  265                                     .addGroup(layout.createSequentialGroup()
 
  267                                         .addComponent(filterDescPane)))
 
  268                                 .addContainerGap())))
 
  269                     .addGroup(layout.createSequentialGroup()
 
  270                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  271                         .addComponent(filterNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  273                         .addComponent(filterNameText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  275                     .addGroup(layout.createSequentialGroup()
 
  276                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  277                         .addComponent(selectedModulesLabel)
 
  278                         .addContainerGap())))
 
  281         layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, 
new java.awt.Component[] {buttonEnclosingPanel, infoScrollPane, profileListPane});
 
  283         layout.setVerticalGroup(
 
  284             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  285             .addGroup(layout.createSequentialGroup()
 
  287                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  288                     .addGroup(layout.createSequentialGroup()
 
  289                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  290                             .addGroup(layout.createSequentialGroup()
 
  291                                 .addComponent(profileDescLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  292                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  293                                 .addComponent(profileDescPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  294                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  295                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  296                                     .addComponent(filterNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  297                                     .addComponent(filterNameText, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  298                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  299                                 .addComponent(filterDescPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  300                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  301                                 .addComponent(selectedModulesLabel)
 
  302                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  303                                 .addComponent(selectedModulesPane, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE))
 
  304                             .addGroup(layout.createSequentialGroup()
 
  305                                 .addComponent(infoScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  306                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  307                                 .addComponent(profileListLabel)
 
  308                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  309                                 .addComponent(profileListPane, javax.swing.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE)))
 
  310                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  311                             .addGroup(layout.createSequentialGroup()
 
  313                                 .addComponent(ingestWarningLabel))
 
  314                             .addGroup(layout.createSequentialGroup()
 
  315                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  316                                 .addComponent(buttonEnclosingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
 
  318                     .addComponent(jSeparator2)))
 
  322     private void newProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  323         doProfileDialog(null);
 
  324         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  327     private void deleteProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  328         IngestProfile selectedProfile = this.profileList.getSelectedValue();
 
  329         this.profilesListModel.removeElement(selectedProfile);
 
  330         profiles.remove(selectedProfile.getName());
 
  331         IngestProfile.deleteProfile(selectedProfile);
 
  335         this.resetComponents();
 
  336         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  345     void enableButtons(
boolean isEnabled) {
 
  346         canBeEnabled = isEnabled;  
 
  348         ingestWarningLabel.setVisible(!canBeEnabled);
 
  354     private void resetComponents() {
 
  355         if (!this.profilesListModel.isEmpty()) {
 
  356             this.profileList.setSelectedIndex(0);
 
  358             this.profilesListModel.clear();
 
  359             this.profileDescArea.setText(
"");
 
  360             this.filterDescArea.setText(
"");
 
  361             this.filterNameText.setText(
"");
 
  362             this.selectedModulesArea.setText(
"");
 
  371     private void refreshButtons() {
 
  372         IngestProfile selectedProfile = ProfileSettingsPanel.this.profileList.getSelectedValue();
 
  373         boolean profileIsSelected = (selectedProfile != null);
 
  374         newProfileButton.setEnabled(canBeEnabled);
 
  375         editProfileButton.setEnabled(canBeEnabled && profileIsSelected);
 
  376         deleteProfileButton.setEnabled(canBeEnabled && profileIsSelected);
 
  381     private void editProfileButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  382         IngestProfile selectedProfile = profileList.getSelectedValue();
 
  383         doProfileDialog(selectedProfile);
 
  384         firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
 
  392     private void doProfileDialog(IngestProfile selectedProfile) {
 
  394          final AdvancedConfigurationDialog dialog = 
new AdvancedConfigurationDialog(
true);
 
  395         this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  397         if (selectedProfile != null) {
 
  399             panel = 
new ProfilePanel(selectedProfile);
 
  402             panel = 
new ProfilePanel();
 
  404          dialog.addApplyButtonListener(
 
  407                         option = JOptionPane.OK_OPTION;
 
  414         setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 
  417             option = JOptionPane.CANCEL_OPTION; 
 
  418             dialog.display(panel);
 
  419         } 
while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition(
true));
 
  421         if (option == JOptionPane.OK_OPTION) {
 
  425             if (this.profiles.containsKey(panel.getProfileName()) && selectedProfile == null) {
 
  426                 MessageNotifyUtil.Message.error(NbBundle.getMessage(
this.getClass(),
 
  427                         "ProfileSettingsPanel.doFileSetsDialog.duplicateProfile.text",
 
  428                         panel.getProfileName()));
 
  431             panel.saveSettings();
 
  437     public void saveSettings() {
 
  441     public void store() {
 
  449         int currentIndex = this.profileList.getSelectedIndex();
 
  450         this.profilesListModel.clear();
 
  451         this.profiles = 
new TreeMap<>();
 
  452         for (IngestProfile profile : IngestProfiles.getIngestProfiles()) {
 
  453             profilesListModel.addElement(profile);
 
  454             profiles.put(profile.getName(), profile);
 
  456         if (currentIndex < 0 || currentIndex >= profilesListModel.getSize()) {
 
  460         this.profileList.setSelectedIndex(currentIndex);
 
  467             if (e.getValueIsAdjusting()) {
 
  472             IngestProfile selectedProfile = ProfileSettingsPanel.this.profileList.getSelectedValue();
 
  474             if (selectedProfile != null) {
 
  480                         fileIngestFilters.put(fSet.getName(), fSet);
 
  482                     filterDescArea.setText(fileIngestFilters.get(selectedProfile.
getFileIngestFilter()).getDescription());
 
  484                     filterDescArea.setText(NbBundle.getMessage(ProfileSettingsPanel.class, 
"ProfileSettingsPanel.messages.filterLoadFailed"));
 
  486                 selectedModulesArea.setText(
"");
 
  487                 for (String moduleName : 
IngestJobSettings.getEnabledModules(selectedProfile.getName())) {
 
  488                     selectedModulesArea.append(moduleName + 
"\n");
 
  495     private javax.swing.JPanel buttonEnclosingPanel;
 
  496     private javax.swing.JButton deleteProfileButton;
 
  497     private javax.swing.JButton editProfileButton;
 
  498     private javax.swing.JTextArea filterDescArea;
 
  499     private javax.swing.JScrollPane filterDescPane;
 
  500     private javax.swing.JLabel filterNameLabel;
 
  501     private javax.swing.JLabel filterNameText;
 
  502     private javax.swing.JScrollPane infoScrollPane;
 
  503     private javax.swing.JTextArea infoTextArea;
 
  504     private javax.swing.JLabel ingestWarningLabel;
 
  505     private javax.swing.JSeparator jSeparator2;
 
  506     private javax.swing.JButton newProfileButton;
 
  507     private javax.swing.JTextArea profileDescArea;
 
  508     private javax.swing.JLabel profileDescLabel;
 
  509     private javax.swing.JScrollPane profileDescPane;
 
  511     private javax.swing.JLabel profileListLabel;
 
  512     private javax.swing.JScrollPane profileListPane;
 
  513     private javax.swing.JTextArea selectedModulesArea;
 
  514     private javax.swing.JLabel selectedModulesLabel;
 
  515     private javax.swing.JScrollPane selectedModulesPane;
 
static List< FilesSet > getStandardFileIngestFilters()
 
static synchronized FilesSetsManager getInstance()
 
void valueChanged(ListSelectionEvent e)
 
Map< String, FilesSet > getCustomFileIngestFilters()
 
String getFileIngestFilter()