2197 added duplicate profile name detection

This commit is contained in:
William Schaefer 2017-01-23 16:45:48 -05:00
parent a818e0be7a
commit 96fb0438c7
3 changed files with 36 additions and 27 deletions

View File

@ -22,29 +22,33 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.TreeMap;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.coreutils.PlatformUtil;
class IngestProfileList { class IngestProfileMap {
private static final String PROFILE_FOLDER = "Profiles"; private static final String PROFILE_FOLDER = "Profiles";
private static final String PROFILE_NAME_KEY = "Profile_Name"; private static final String PROFILE_NAME_KEY = "Profile_Name";
private static final String PROFILE_DESC_KEY = "Profile_Description"; private static final String PROFILE_DESC_KEY = "Profile_Description";
private static final String PROFILE_FILTER_KEY = "Profile_Filter"; private static final String PROFILE_FILTER_KEY = "Profile_Filter";
private List<IngestProfile> profileList = null; private TreeMap<String, IngestProfile> profileMap = null;
private static final Object PROFILE_LOCK = new Object(); private static final Object PROFILE_LOCK = new Object();
List<IngestProfile> getIngestProfileList() { /**
if (profileList == null) { * Gets the collection of profiles which currently exist.
*
* @return profileList
*/
TreeMap<String, IngestProfile> getIngestProfileMap() {
if (profileMap == null) {
loadProfileList(); loadProfileList();
} }
return profileList; return profileMap;
} }
/** /**
@ -55,17 +59,15 @@ class IngestProfileList {
File dir = Paths.get(PlatformUtil.getUserConfigDirectory(), PROFILE_FOLDER).toFile(); File dir = Paths.get(PlatformUtil.getUserConfigDirectory(), PROFILE_FOLDER).toFile();
File[] directoryListing = dir.listFiles(); File[] directoryListing = dir.listFiles();
profileMap = new TreeMap<>();
if (directoryListing != null) { if (directoryListing != null) {
profileList = new ArrayList<>();
for (File child : directoryListing) { for (File child : directoryListing) {
String name = child.getName().split("\\.")[0]; String name = child.getName().split("\\.")[0];
String context = PROFILE_FOLDER + File.separator + name; String context = PROFILE_FOLDER + File.separator + name;
String desc = ModuleSettings.getConfigSetting(context, PROFILE_DESC_KEY); String desc = ModuleSettings.getConfigSetting(context, PROFILE_DESC_KEY);
String fileIngestFilter = ModuleSettings.getConfigSetting(context, PROFILE_FILTER_KEY); String fileIngestFilter = ModuleSettings.getConfigSetting(context, PROFILE_FILTER_KEY);
profileList.add(new IngestProfile(name, desc, fileIngestFilter)); profileMap.put(name, new IngestProfile(name, desc, fileIngestFilter));
} }
} else {
profileList = Collections.emptyList();
} }
} }
} }
@ -77,21 +79,12 @@ class IngestProfileList {
readFilesFromDirectory(); readFilesFromDirectory();
} }
/**
* Gets the list of profiles which currently exist.
*
* @return profileList
*/
List<IngestProfile> getProfileList() {
return this.profileList;
}
/** /**
* Saves the list of profiles which currently exist to disk. * Saves the list of profiles which currently exist to disk.
*/ */
void saveProfileList() { void saveProfileList() {
//save last used profile //save last used profile
for (IngestProfile profile : getIngestProfileList()) { for (IngestProfile profile : getIngestProfileMap().values()) {
IngestProfile.saveProfile(profile); IngestProfile.saveProfile(profile);
} }
} }

View File

@ -19,10 +19,11 @@
package org.sleuthkit.autopsy.ingest; package org.sleuthkit.autopsy.ingest;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.util.TreeMap;
import org.openide.DialogDisplayer; import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor; import org.openide.NotifyDescriptor;
import org.openide.util.NbBundle; import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.ingest.IngestProfileList.IngestProfile; import org.sleuthkit.autopsy.ingest.IngestProfileMap.IngestProfile;
/** /**
* Panel to display options for profile creation. * Panel to display options for profile creation.
@ -60,6 +61,9 @@ public class ProfilePanel extends IngestModuleGlobalSettingsPanel {
jPanel1.add(ingestSettingsPanel, 0); jPanel1.add(ingestSettingsPanel, 0);
} }
String getProfileName(){
return profileNameField.getText();
}
/** /**
* This method is called from within the constructor to initialize the form. * This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always * WARNING: Do NOT modify this code. The content of this method is always
@ -183,6 +187,7 @@ public class ProfilePanel extends IngestModuleGlobalSettingsPanel {
DialogDisplayer.getDefault().notify(notifyDesc); DialogDisplayer.getDefault().notify(notifyDesc);
return false; return false;
} }
return true; return true;
} }
} }

View File

@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.ingest; package org.sleuthkit.autopsy.ingest;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
import javax.swing.DefaultListModel; import javax.swing.DefaultListModel;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
@ -26,7 +27,8 @@ import javax.swing.event.ListSelectionListener;
import org.netbeans.spi.options.OptionsPanelController; import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.NbBundle; import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
import org.sleuthkit.autopsy.ingest.IngestProfileList.IngestProfile; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import org.sleuthkit.autopsy.ingest.IngestProfileMap.IngestProfile;
import org.sleuthkit.autopsy.modules.interestingitems.FilesSet; import org.sleuthkit.autopsy.modules.interestingitems.FilesSet;
import org.sleuthkit.autopsy.modules.interestingitems.FilesSetsManager; import org.sleuthkit.autopsy.modules.interestingitems.FilesSetsManager;
@ -41,7 +43,8 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
"ProfileSettingsPanel.newProfileButton.text=New Profile", "ProfileSettingsPanel.newProfileButton.text=New Profile",
"ProfileSettingsPanel.editProfileButton.text=Edit Profile", "ProfileSettingsPanel.editProfileButton.text=Edit Profile",
"ProfileSettingsPanel.deleteProfileButton.text=Delete Profile", "ProfileSettingsPanel.deleteProfileButton.text=Delete Profile",
"ProfileSettingsPanel.messages.filterLoadFailed=Failed to load file ingest filter" "ProfileSettingsPanel.messages.filterLoadFailed=Failed to load file ingest filter",
"ProfileSettingsPanel.doFileSetsDialog.duplicateProfile.text=Profile with name {0} already exists."
}) })
private final DefaultListModel<IngestProfile> profilesListModel = new DefaultListModel<>(); private final DefaultListModel<IngestProfile> profilesListModel = new DefaultListModel<>();
@ -311,6 +314,15 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
option = JOptionPane.showConfirmDialog(null, panel, Bundle.ProfileSettingsPanel_title(), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); option = JOptionPane.showConfirmDialog(null, panel, Bundle.ProfileSettingsPanel_title(), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
} while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition()); } while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition());
TreeMap<String, IngestProfile> profileMap = new IngestProfileMap().getIngestProfileMap();
if (profileMap.containsKey(panel.getProfileName()) && selectedProfile == null) {
MessageNotifyUtil.Message.error(NbBundle.getMessage(this.getClass(),
"ProfileSettingsPanel.doFileSetsDialog.duplicateProfile.text",
panel.getProfileName()));
return;
}
if (option == JOptionPane.OK_OPTION) { if (option == JOptionPane.OK_OPTION) {
panel.saveSettings(); panel.saveSettings();
load(); load();
@ -335,9 +347,8 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
public void load() { public void load() {
int currentIndex = profileList.getSelectedIndex(); int currentIndex = profileList.getSelectedIndex();
profilesListModel.clear(); profilesListModel.clear();
IngestProfileList iList = new IngestProfileList(); IngestProfileMap profileMap = new IngestProfileMap();
iList.loadProfileList(); for (IngestProfile profile : profileMap.getIngestProfileMap().values()) {
for (IngestProfile profile : iList.getProfileList()) {
profilesListModel.addElement(profile); profilesListModel.addElement(profile);
} }
if (newProfileButton.isEnabled()) { if (newProfileButton.isEnabled()) {