remove maps

This commit is contained in:
momo 2015-10-20 10:45:28 -04:00
parent 5a138d26f2
commit fade9f18d8
3 changed files with 55 additions and 54 deletions

View File

@ -39,7 +39,7 @@ public class FileTypeDetector {
private static final Tika tika = new Tika(); private static final Tika tika = new Tika();
private static final int BUFFER_SIZE = 64 * 1024; private static final int BUFFER_SIZE = 64 * 1024;
private final byte buffer[] = new byte[BUFFER_SIZE]; private final byte buffer[] = new byte[BUFFER_SIZE];
private final Map<String, List<FileType>> userDefinedFileTypes; private final List<FileType> userDefinedFileTypes;
/** /**
* Constructs an object that detects the type of a file by an inspection of * Constructs an object that detects the type of a file by an inspection of
@ -77,7 +77,12 @@ public class FileTypeDetector {
* @return True if MIME type is detectable. * @return True if MIME type is detectable.
*/ */
private boolean isDetectableAsUserDefinedType(String mimeType) { private boolean isDetectableAsUserDefinedType(String mimeType) {
return userDefinedFileTypes.containsKey(mimeType); for (FileType fileType : userDefinedFileTypes) {
if (fileType.getMimeType().equals(mimeType)) {
return true;
}
}
return false;
} }
/** /**
@ -216,8 +221,7 @@ public class FileTypeDetector {
* @throws TskCoreException * @throws TskCoreException
*/ */
private String detectUserDefinedType(AbstractFile file) throws TskCoreException { private String detectUserDefinedType(AbstractFile file) throws TskCoreException {
for (List<FileType> fileTypes : userDefinedFileTypes.values()) { for (FileType fileType : userDefinedFileTypes) {
for (FileType fileType : fileTypes) {
if (fileType.matches(file)) { if (fileType.matches(file)) {
if (fileType.alertOnMatch()) { if (fileType.alertOnMatch()) {
BlackboardArtifact artifact; BlackboardArtifact artifact;
@ -226,9 +230,9 @@ public class FileTypeDetector {
artifact.addAttribute(setNameAttribute); artifact.addAttribute(setNameAttribute);
/** /**
* Use the MIME type as the category, i.e., the rule * Use the MIME type as the category, i.e., the rule that
* that determined this file belongs to the interesting * determined this file belongs to the interesting files
* files set. * set.
*/ */
BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType()); BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType());
artifact.addAttribute(ruleNameAttribute); artifact.addAttribute(ruleNameAttribute);
@ -236,7 +240,6 @@ public class FileTypeDetector {
return fileType.getMimeType(); return fileType.getMimeType();
} }
} }
}
return null; return null;
} }

View File

@ -59,7 +59,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
* is obtained from the user-defined types manager. * is obtained from the user-defined types manager.
*/ */
private DefaultListModel<FileType> typesListModel; private DefaultListModel<FileType> typesListModel;
private Map<String, java.util.List<FileType>> fileTypes; private java.util.List<FileType> fileTypes;
/** /**
* This panel implements a property change listener that listens to ingest * This panel implements a property change listener that listens to ingest
@ -227,7 +227,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
ex.getLocalizedMessage(), ex.getLocalizedMessage(),
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"), NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"),
JOptionPane.ERROR_MESSAGE); JOptionPane.ERROR_MESSAGE);
fileTypes = Collections.emptyMap(); fileTypes = Collections.emptyList();
} }
enableButtons(); enableButtons();
} }
@ -236,13 +236,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
* Sets the list model for the file types list component. * Sets the list model for the file types list component.
*/ */
private void updateFileTypesListModel() { private void updateFileTypesListModel() {
ArrayList<String> mimeTypes = new ArrayList<>(fileTypes.keySet());
Collections.sort(mimeTypes);
typesListModel.clear(); typesListModel.clear();
for (String mimeType : mimeTypes) { for (FileType fileType : fileTypes) {
for (FileType fileType : fileTypes.get(mimeType)) {
typesListModel.addElement(fileType); typesListModel.addElement(fileType);
}
} }
} }
@ -561,7 +557,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed
FileType fileType = typesList.getSelectedValue(); FileType fileType = typesList.getSelectedValue();
UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, fileType); fileTypes.remove(fileType);
updateFileTypesListModel(); updateFileTypesListModel();
if (!typesListModel.isEmpty()) { if (!typesListModel.isEmpty()) {
typesList.setSelectedIndex(0); typesList.setSelectedIndex(0);
@ -630,8 +626,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
* Get the interesting files set details. * Get the interesting files set details.
*/ */
String filesSetName = ""; String filesSetName = "";
if(postHitCheckBox.isSelected()) if (postHitCheckBox.isSelected()) {
filesSetName = filesSetNameTextField.getText(); filesSetName = filesSetNameTextField.getText();
}
if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) { if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) {
JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null,
NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"), NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"),
@ -646,9 +643,10 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane
FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType); FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType);
FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected()); FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected());
FileType selected = typesList.getSelectedValue(); FileType selected = typesList.getSelectedValue();
if (selected != null) if (selected != null) {
UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, selected); fileTypes.remove(selected);
UserDefinedFileTypesManager.getInstance().addFileTypeToMap(fileTypes, fileType); }
fileTypes.add(fileType);
updateFileTypesListModel(); updateFileTypesListModel();
typesList.setSelectedValue(fileType.getMimeType(), true); typesList.setSelectedValue(fileType.getMimeType(), true);
}//GEN-LAST:event_saveTypeButtonActionPerformed }//GEN-LAST:event_saveTypeButtonActionPerformed

View File

@ -82,7 +82,7 @@ final class UserDefinedFileTypesManager {
* map is guarded by the intrinsic lock of the user-defined file types * map is guarded by the intrinsic lock of the user-defined file types
* manager for thread-safety. * manager for thread-safety.
*/ */
private final Map<String, List<FileType>> userDefinedFileTypes = new HashMap<>(); private final List<FileType> userDefinedFileTypes = new ArrayList<>();
/** /**
* The combined set of user-defined file types and file types predefined by * The combined set of user-defined file types and file types predefined by
@ -91,7 +91,7 @@ final class UserDefinedFileTypesManager {
* the intrinsic lock of the user-defined file types manager for * the intrinsic lock of the user-defined file types manager for
* thread-safety. * thread-safety.
*/ */
private final Map<String, List<FileType>> fileTypes = new HashMap<>(); private final List<FileType> fileTypes = new ArrayList<>();
/** /**
* Gets the singleton manager of user-defined file types characterized by * Gets the singleton manager of user-defined file types characterized by
@ -122,7 +122,7 @@ final class UserDefinedFileTypesManager {
* @throws * @throws
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
*/ */
synchronized Map<String, List<FileType>> getFileTypes() throws UserDefinedFileTypesException { synchronized List<FileType> getFileTypes() throws UserDefinedFileTypesException {
loadFileTypes(); loadFileTypes();
/** /**
@ -131,7 +131,7 @@ final class UserDefinedFileTypesManager {
* Collections.unmodifiableCollection() is not used here because this * Collections.unmodifiableCollection() is not used here because this
* view of the file types is a snapshot. * view of the file types is a snapshot.
*/ */
return new HashMap<>(fileTypes); return new ArrayList<>(fileTypes);
} }
/** /**
@ -142,7 +142,7 @@ final class UserDefinedFileTypesManager {
* @throws * @throws
* org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException
*/ */
synchronized Map<String, List<FileType>> getUserDefinedFileTypes() throws UserDefinedFileTypesException { synchronized List<FileType> getUserDefinedFileTypes() throws UserDefinedFileTypesException {
loadFileTypes(); loadFileTypes();
/** /**
@ -151,7 +151,7 @@ final class UserDefinedFileTypesManager {
* Collections.unmodifiableCollection() is not used here because this * Collections.unmodifiableCollection() is not used here because this
* view of the file types is a snapshot. * view of the file types is a snapshot.
*/ */
return new HashMap<>(userDefinedFileTypes); return new ArrayList<>(userDefinedFileTypes);
} }
/** /**
@ -182,11 +182,11 @@ final class UserDefinedFileTypesManager {
private void loadPredefinedFileTypes() throws UserDefinedFileTypesException { private void loadPredefinedFileTypes() throws UserDefinedFileTypesException {
try { try {
FileType fileTypeXml = new FileType("text/xml", new Signature("<?xml".getBytes(ASCII_ENCODING), 0L, FileType.Signature.Type.ASCII), "", false); //NON-NLS FileType fileTypeXml = new FileType("text/xml", new Signature("<?xml".getBytes(ASCII_ENCODING), 0L, FileType.Signature.Type.ASCII), "", false); //NON-NLS
addFileTypeToMap(fileTypes, fileTypeXml); fileTypes.add(fileTypeXml);
byte[] gzip = DatatypeConverter.parseHexBinary("1F8B08"); byte[] gzip = DatatypeConverter.parseHexBinary("1F8B08");
FileType fileTypeGzip = new FileType("application/x-gzip", new Signature(gzip, 0L, FileType.Signature.Type.ASCII), "", false); //NON-NLS FileType fileTypeGzip = new FileType("application/x-gzip", new Signature(gzip, 0L, FileType.Signature.Type.ASCII), "", false); //NON-NLS
addFileTypeToMap(fileTypes, fileTypeGzip); fileTypes.add(fileTypeGzip);
} catch (UnsupportedEncodingException ex) { } catch (UnsupportedEncodingException ex) {
/** /**
@ -231,14 +231,15 @@ final class UserDefinedFileTypesManager {
* @param fileType The file type to add. * @param fileType The file type to add.
*/ */
private void addUserDefinedFileType(FileType fileType) { private void addUserDefinedFileType(FileType fileType) {
addFileTypeToMap(userDefinedFileTypes, fileType); userDefinedFileTypes.add(fileType);
addFileTypeToMap(fileTypes, fileType); fileTypes.add(fileType);
} }
/** /**
* Adds given FileType to given map: * Adds given FileType to given map: if the mimetype exists, add fileType to
* if the mimetype exists, add fileType to that mimetype's list. * that mimetype's list. otherwise, create a new mimetype with the new
* otherwise, create a new mimetype with the new fileType. * fileType.
*
* @param map The map to be modified. * @param map The map to be modified.
* @param fileType The added FileType * @param fileType The added FileType
*/ */
@ -255,6 +256,7 @@ final class UserDefinedFileTypesManager {
/** /**
* Removes given fileType from given map if it exists. * Removes given fileType from given map if it exists.
*
* @param map * @param map
* @param fileType * @param fileType
*/ */
@ -271,10 +273,10 @@ final class UserDefinedFileTypesManager {
* @param newFileTypes A mapping of file type names to user-defined file * @param newFileTypes A mapping of file type names to user-defined file
* types. * types.
*/ */
synchronized void setUserDefinedFileTypes(Map<String, List<FileType>> newFileTypes) throws UserDefinedFileTypesException { synchronized void setUserDefinedFileTypes(List<FileType> newFileTypes) throws UserDefinedFileTypesException {
try { try {
String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE); String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE);
XmlWriter.writeFileTypes(newFileTypes.values(), filePath); XmlWriter.writeFileTypes(newFileTypes, filePath);
} catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) { } catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) {
throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage"); throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage");
} catch (IOException ex) { } catch (IOException ex) {
@ -312,16 +314,14 @@ final class UserDefinedFileTypesManager {
* @throws UnsupportedEncodingException * @throws UnsupportedEncodingException
* @throws TransformerException * @throws TransformerException
*/ */
private static void writeFileTypes(Collection<List<FileType>> fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException { private static void writeFileTypes(List<FileType> fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException {
Document doc = XMLUtil.createDocument(); Document doc = XMLUtil.createDocument();
Element fileTypesElem = doc.createElement(FILE_TYPES_TAG_NAME); Element fileTypesElem = doc.createElement(FILE_TYPES_TAG_NAME);
doc.appendChild(fileTypesElem); doc.appendChild(fileTypesElem);
for (List<FileType> fileTypeList : fileTypes) { for (FileType fileType : fileTypes) {
for (FileType fileType : fileTypeList) {
Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc); Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc);
fileTypesElem.appendChild(fileTypeElem); fileTypesElem.appendChild(fileTypeElem);
} }
}
XMLUtil.saveDocument(doc, ENCODING_FOR_XML_FILE, filePath); XMLUtil.saveDocument(doc, ENCODING_FOR_XML_FILE, filePath);
} }