mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
format and obvious cleanup
This commit is contained in:
parent
04069a8805
commit
6a391bf575
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2011-2016 Basis Technology Corp.
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -33,6 +33,7 @@ import java.util.Observable;
|
|||||||
import java.util.Observer;
|
import java.util.Observer;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.openide.nodes.ChildFactory;
|
import org.openide.nodes.ChildFactory;
|
||||||
import org.openide.nodes.Children;
|
import org.openide.nodes.Children;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
@ -74,12 +75,12 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
keywordResults = new KeywordResults();
|
keywordResults = new KeywordResults();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All of these maps and code assume the following:
|
/*
|
||||||
* Regexps will have an 'instance' layer that shows the specific words that matched the regexp
|
* All of these maps and code assume the following: Regexps will have an
|
||||||
* Exact match and substring will not have the instance layer and instead will have the specific hits
|
* 'instance' layer that shows the specific words that matched the regexp
|
||||||
* below their term.
|
* Exact match and substring will not have the instance layer and instead
|
||||||
|
* will have the specific hits below their term.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private final class KeywordResults extends Observable {
|
private final class KeywordResults extends Observable {
|
||||||
|
|
||||||
// Map from listName/Type to Map of keywords/regexp to Map of instance terms to Set of artifact Ids
|
// Map from listName/Type to Map of keywords/regexp to Map of instance terms to Set of artifact Ids
|
||||||
@ -104,10 +105,11 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get keywords used in a given list. Will be regexp patterns for regexps
|
* Get keywords used in a given list. Will be regexp patterns for
|
||||||
* and search term for non-regexps.
|
* regexps and search term for non-regexps.
|
||||||
*
|
*
|
||||||
* @param listName Keyword list name
|
* @param listName Keyword list name
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<String> getKeywords(String listName) {
|
List<String> getKeywords(String listName) {
|
||||||
@ -120,12 +122,13 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get specific keyword terms that were found for a given list
|
* Get specific keyword terms that were found for a given list and
|
||||||
* and keyword combination. For example, a specific phone number for a
|
* keyword combination. For example, a specific phone number for a phone
|
||||||
* phone number regexp. Will be the default instance for non-regexp searches.
|
* number regexp. Will be the default instance for non-regexp searches.
|
||||||
*
|
*
|
||||||
* @param listName Keyword list name
|
* @param listName Keyword list name
|
||||||
* @param keyword search term (regexp pattern or exact match term)
|
* @param keyword search term (regexp pattern or exact match term)
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<String> getKeywordInstances(String listName, String keyword) {
|
List<String> getKeywordInstances(String listName, String keyword) {
|
||||||
@ -139,9 +142,13 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get artifact ids for a given list, keyword, and instance triple
|
* Get artifact ids for a given list, keyword, and instance triple
|
||||||
* @param listName Keyword list name
|
*
|
||||||
* @param keyword search term (regexp pattern or exact match term)
|
* @param listName Keyword list name
|
||||||
* @param keywordInstance specific term that matched (or default instance name)
|
* @param keyword search term (regexp pattern or exact match
|
||||||
|
* term)
|
||||||
|
* @param keywordInstance specific term that matched (or default
|
||||||
|
* instance name)
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Set<Long> getArtifactIds(String listName, String keyword, String keywordInstance) {
|
Set<Long> getArtifactIds(String listName, String keyword, String keywordInstance) {
|
||||||
@ -152,10 +159,12 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a hit for a regexp to the internal data structure.
|
* Add a hit for a regexp to the internal data structure.
|
||||||
* @param listMap Maps keywords/regexp to instances to artifact IDs
|
*
|
||||||
* @param regExp Regular expression that was used in search
|
* @param listMap Maps keywords/regexp to instances to artifact
|
||||||
|
* IDs
|
||||||
|
* @param regExp Regular expression that was used in search
|
||||||
* @param keywordInstance Specific term that matched regexp
|
* @param keywordInstance Specific term that matched regexp
|
||||||
* @param artifactId Artifact id of file that had hit
|
* @param artifactId Artifact id of file that had hit
|
||||||
*/
|
*/
|
||||||
void addRegExpToList(Map<String, Map<String, Set<Long>>> listMap, String regExp, String keywordInstance, Long artifactId) {
|
void addRegExpToList(Map<String, Map<String, Set<Long>>> listMap, String regExp, String keywordInstance, Long artifactId) {
|
||||||
if (listMap.containsKey(regExp) == false) {
|
if (listMap.containsKey(regExp) == false) {
|
||||||
@ -172,11 +181,12 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
instanceMap.get(keywordInstance).add(artifactId);
|
instanceMap.get(keywordInstance).add(artifactId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a hit for a exactmatch (or substring) to the internal data structure.
|
* Add a hit for a exactmatch (or substring) to the internal data
|
||||||
* @param listMap Maps keywords/regexp to instances to artifact IDs
|
* structure.
|
||||||
* @param keyWord Term that was hit
|
*
|
||||||
|
* @param listMap Maps keywords/regexp to instances to artifact IDs
|
||||||
|
* @param keyWord Term that was hit
|
||||||
* @param artifactId Artifact id of file that had hit
|
* @param artifactId Artifact id of file that had hit
|
||||||
*/
|
*/
|
||||||
void addNonRegExpMatchToList(Map<String, Map<String, Set<Long>>> listMap, String keyWord, Long artifactId) {
|
void addNonRegExpMatchToList(Map<String, Map<String, Set<Long>>> listMap, String keyWord, Long artifactId) {
|
||||||
@ -193,8 +203,11 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populate data structure for the tree based on the keyword hit artifacts
|
* Populate data structure for the tree based on the keyword hit
|
||||||
* @param artifactIds Maps Artifact ID to map of attribute types to attribute values
|
* artifacts
|
||||||
|
*
|
||||||
|
* @param artifactIds Maps Artifact ID to map of attribute types to
|
||||||
|
* attribute values
|
||||||
*/
|
*/
|
||||||
void populateTreeMaps(Map<Long, Map<Long, String>> artifactIds) {
|
void populateTreeMaps(Map<Long, Map<Long, String>> artifactIds) {
|
||||||
synchronized (topLevelMap) {
|
synchronized (topLevelMap) {
|
||||||
@ -241,8 +254,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
} else {
|
} else {
|
||||||
addNonRegExpMatchToList(listMap, word, id);
|
addNonRegExpMatchToList(listMap, word, id);
|
||||||
}
|
}
|
||||||
}
|
} else if (reg != null) {
|
||||||
else if (reg != null) {
|
|
||||||
addRegExpToList(listMap, reg, word, id);
|
addRegExpToList(listMap, reg, word, id);
|
||||||
} else {
|
} else {
|
||||||
addNonRegExpMatchToList(listMap, word, id);
|
addNonRegExpMatchToList(listMap, word, id);
|
||||||
@ -299,9 +311,9 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
long artifactId = resultSet.getLong("artifact_id"); //NON-NLS
|
long artifactId = resultSet.getLong("artifact_id"); //NON-NLS
|
||||||
long typeId = resultSet.getLong("attribute_type_id"); //NON-NLS
|
long typeId = resultSet.getLong("attribute_type_id"); //NON-NLS
|
||||||
if (!artifactIds.containsKey(artifactId)) {
|
if (!artifactIds.containsKey(artifactId)) {
|
||||||
artifactIds.put(artifactId, new LinkedHashMap<Long, String>());
|
artifactIds.put(artifactId, new LinkedHashMap<>());
|
||||||
}
|
}
|
||||||
if (valueStr != null && !valueStr.equals("")) {
|
if (StringUtils.isNotEmpty(valueStr)) {
|
||||||
artifactIds.get(artifactId).put(typeId, valueStr);
|
artifactIds.get(artifactId).put(typeId, valueStr);
|
||||||
} else {
|
} else {
|
||||||
// Keyword Search Type is an int
|
// Keyword Search Type is an int
|
||||||
@ -459,7 +471,8 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the keyword search lists (or default groupings if list was not given)
|
* Represents the keyword search lists (or default groupings if list was not
|
||||||
|
* given)
|
||||||
*/
|
*/
|
||||||
public class ListNode extends DisplayableItemNode implements Observer {
|
public class ListNode extends DisplayableItemNode implements Observer {
|
||||||
|
|
||||||
@ -607,8 +620,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
// is this an exact/substring match (i.e. did we use the DEFAULT name)?
|
// is this an exact/substring match (i.e. did we use the DEFAULT name)?
|
||||||
if (instances.size() == 1 && instances.get(0).equals(DEFAULT_INSTANCE_NAME)) {
|
if (instances.size() == 1 && instances.get(0).equals(DEFAULT_INSTANCE_NAME)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -650,37 +662,45 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
// as they keys for different types of nodes at the
|
// as they keys for different types of nodes at the
|
||||||
// same level. Probably a better way to do this, but
|
// same level. Probably a better way to do this, but
|
||||||
// it works.
|
// it works.
|
||||||
class RegExpInstanceKey {
|
private class RegExpInstanceKey {
|
||||||
|
|
||||||
private final boolean isRegExp;
|
private final boolean isRegExp;
|
||||||
private String strKey;
|
private String strKey;
|
||||||
private Long longKey;
|
private Long longKey;
|
||||||
public RegExpInstanceKey(String key) {
|
|
||||||
|
RegExpInstanceKey(String key) {
|
||||||
isRegExp = true;
|
isRegExp = true;
|
||||||
strKey = key;
|
strKey = key;
|
||||||
}
|
}
|
||||||
public RegExpInstanceKey(Long key) {
|
|
||||||
|
RegExpInstanceKey(Long key) {
|
||||||
isRegExp = false;
|
isRegExp = false;
|
||||||
longKey = key;
|
longKey = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isRegExp() {
|
boolean isRegExp() {
|
||||||
return isRegExp;
|
return isRegExp;
|
||||||
}
|
}
|
||||||
|
|
||||||
Long getIdKey() {
|
Long getIdKey() {
|
||||||
return longKey;
|
return longKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getRegExpKey() {
|
String getRegExpKey() {
|
||||||
return strKey;
|
return strKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the nodes for a given regexp that represent the specific terms that were found
|
* Creates the nodes for a given regexp that represent the specific terms
|
||||||
|
* that were found
|
||||||
*/
|
*/
|
||||||
public class RegExpInstancesFactory extends ChildFactory.Detachable<RegExpInstanceKey> implements Observer {
|
public class RegExpInstancesFactory extends ChildFactory.Detachable<RegExpInstanceKey> implements Observer {
|
||||||
|
|
||||||
private final String keyword;
|
private final String keyword;
|
||||||
private final String setName;
|
private final String setName;
|
||||||
|
|
||||||
private Map<RegExpInstanceKey, DisplayableItemNode > nodesMap = new HashMap<>();
|
private final Map<RegExpInstanceKey, DisplayableItemNode> nodesMap = new HashMap<>();
|
||||||
|
|
||||||
public RegExpInstancesFactory(String setName, String keyword) {
|
public RegExpInstancesFactory(String setName, String keyword) {
|
||||||
super();
|
super();
|
||||||
@ -700,12 +720,12 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean createKeys(List<RegExpInstanceKey> list) {
|
protected boolean createKeys(List<RegExpInstanceKey> list) {
|
||||||
List <String>instances = keywordResults.getKeywordInstances(setName, keyword);
|
List<String> instances = keywordResults.getKeywordInstances(setName, keyword);
|
||||||
// The keys are different depending on what we are displaying.
|
// The keys are different depending on what we are displaying.
|
||||||
// regexp get another layer to show instances.
|
// regexp get another layer to show instances.
|
||||||
// Exact/substring matches don't.
|
// Exact/substring matches don't.
|
||||||
if ((instances.size() == 1) && (instances.get(0).equals(DEFAULT_INSTANCE_NAME))) {
|
if ((instances.size() == 1) && (instances.get(0).equals(DEFAULT_INSTANCE_NAME))) {
|
||||||
for (Long id : keywordResults.getArtifactIds(setName, keyword, DEFAULT_INSTANCE_NAME) ) {
|
for (Long id : keywordResults.getArtifactIds(setName, keyword, DEFAULT_INSTANCE_NAME)) {
|
||||||
RegExpInstanceKey key = new RegExpInstanceKey(id);
|
RegExpInstanceKey key = new RegExpInstanceKey(id);
|
||||||
if (!nodesMap.containsKey(key)) {
|
if (!nodesMap.containsKey(key)) {
|
||||||
nodesMap.put(key, createNode(key));
|
nodesMap.put(key, createNode(key));
|
||||||
@ -731,7 +751,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DisplayableItemNode createNode(RegExpInstanceKey key) {
|
private DisplayableItemNode createNode(RegExpInstanceKey key) {
|
||||||
// if it isn't a regexp, then skip the 'instance' layer of the tree
|
// if it isn't a regexp, then skip the 'instance' layer of the tree
|
||||||
if (key.isRegExp() == false) {
|
if (key.isRegExp() == false) {
|
||||||
return createBlackboardArtifactNode(key.getIdKey());
|
return createBlackboardArtifactNode(key.getIdKey());
|
||||||
} else {
|
} else {
|
||||||
@ -739,6 +759,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Observable o, Object arg) {
|
public void update(Observable o, Object arg) {
|
||||||
refresh(true);
|
refresh(true);
|
||||||
@ -816,10 +837,12 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a blackboard node for the given Keyword Hit artifact
|
* Create a blackboard node for the given Keyword Hit artifact
|
||||||
|
*
|
||||||
* @param artifactId
|
* @param artifactId
|
||||||
|
*
|
||||||
* @return Node or null on error
|
* @return Node or null on error
|
||||||
*/
|
*/
|
||||||
private BlackboardArtifactNode createBlackboardArtifactNode (Long artifactId) {
|
private BlackboardArtifactNode createBlackboardArtifactNode(Long artifactId) {
|
||||||
if (skCase == null) {
|
if (skCase == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -879,7 +902,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
private final String setName;
|
private final String setName;
|
||||||
private final String instance;
|
private final String instance;
|
||||||
|
|
||||||
private Map<Long, BlackboardArtifactNode > nodesMap = new HashMap<>();
|
private final Map<Long, BlackboardArtifactNode> nodesMap = new HashMap<>();
|
||||||
|
|
||||||
public HitsFactory(String setName, String keyword, String instance) {
|
public HitsFactory(String setName, String keyword, String instance) {
|
||||||
super();
|
super();
|
||||||
@ -900,9 +923,9 @@ public class KeywordHits implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean createKeys(List<Long> list) {
|
protected boolean createKeys(List<Long> list) {
|
||||||
for (Long id : keywordResults.getArtifactIds(setName, keyword, instance) ) {
|
for (Long id : keywordResults.getArtifactIds(setName, keyword, instance)) {
|
||||||
if (!nodesMap.containsKey(id)) {
|
if (!nodesMap.containsKey(id)) {
|
||||||
nodesMap.put(id, createBlackboardArtifactNode(id));
|
nodesMap.put(id, createBlackboardArtifactNode(id));
|
||||||
}
|
}
|
||||||
list.add(id);
|
list.add(id);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user