mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
Merge branch '2839-improve-keywor-hits-tree-speed' of github.com:millmanorama/autopsy into 2840_file_types_key
This commit is contained in:
commit
6f18b9b5bd
@ -24,7 +24,6 @@ import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@ -33,6 +32,7 @@ import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.openide.nodes.ChildFactory;
|
||||
import org.openide.nodes.Children;
|
||||
@ -95,6 +95,10 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
+ " OR attribute_type_id = " + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID()//NON-NLS
|
||||
+ ")"; //NON-NLS
|
||||
|
||||
static private boolean isOnlyDefaultInstance(List<String> instances) {
|
||||
return (instances.size() == 1) && (instances.get(0).equals(DEFAULT_INSTANCE_NAME));
|
||||
}
|
||||
|
||||
public KeywordHits(SleuthkitCase skCase) {
|
||||
this.skCase = skCase;
|
||||
keywordResults = new KeywordResults();
|
||||
@ -265,7 +269,6 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
addRegExpToList(listMap, reg, word, id);
|
||||
}
|
||||
} else {//single term
|
||||
|
||||
if ("1".equals(kwType) || reg == null) { //literal, substring or exact
|
||||
/*
|
||||
* Substring, treated same as exact match. "1" is
|
||||
@ -626,9 +629,8 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
|
||||
@Override
|
||||
public boolean isLeafTypeNode() {
|
||||
List<String> instances = keywordResults.getKeywordInstances(setName, keyword);
|
||||
// is this an exact/substring match (i.e. did we use the DEFAULT name)?
|
||||
return instances.size() == 1 && instances.get(0).equals(DEFAULT_INSTANCE_NAME);
|
||||
return isOnlyDefaultInstance(keywordResults.getKeywordInstances(setName, keyword));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -661,7 +663,6 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -706,7 +707,6 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
|
||||
private final String keyword;
|
||||
private final String setName;
|
||||
private final Map<RegExpInstanceKey, DisplayableItemNode> nodesMap = new HashMap<>();
|
||||
|
||||
private RegExpInstancesFactory(String setName, String keyword) {
|
||||
super();
|
||||
@ -720,29 +720,20 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
// The keys are different depending on what we are displaying.
|
||||
// regexp get another layer to show instances.
|
||||
// Exact/substring matches don't.
|
||||
if ((instances.size() == 1) && (instances.get(0).equals(DEFAULT_INSTANCE_NAME))) {
|
||||
for (Long id : keywordResults.getArtifactIds(setName, keyword, DEFAULT_INSTANCE_NAME)) {
|
||||
RegExpInstanceKey key = new RegExpInstanceKey(id);
|
||||
nodesMap.computeIfAbsent(key, k -> createNode(k));
|
||||
list.add(key);
|
||||
}
|
||||
if (isOnlyDefaultInstance(instances)) {
|
||||
list.addAll(keywordResults.getArtifactIds(setName, keyword, DEFAULT_INSTANCE_NAME).stream()
|
||||
.map(RegExpInstanceKey::new)
|
||||
.collect(Collectors.toList()));
|
||||
} else {
|
||||
for (String instance : instances) {
|
||||
RegExpInstanceKey key = new RegExpInstanceKey(instance);
|
||||
nodesMap.computeIfAbsent(key, k -> createNode(k));
|
||||
list.add(key);
|
||||
}
|
||||
|
||||
list.addAll(instances.stream()
|
||||
.map(RegExpInstanceKey::new)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Node createNodeForKey(RegExpInstanceKey key) {
|
||||
return nodesMap.get(key);
|
||||
}
|
||||
|
||||
private DisplayableItemNode createNode(RegExpInstanceKey key) {
|
||||
if (key.isRegExp()) {
|
||||
return new RegExpInstanceNode(setName, keyword, key.getRegExpKey());
|
||||
} else {
|
||||
@ -750,6 +741,7 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
return createBlackboardArtifactNode(key.getIdKey());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -884,7 +876,6 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
private final String keyword;
|
||||
private final String setName;
|
||||
private final String instance;
|
||||
private final Map<Long, BlackboardArtifactNode> nodesMap = new HashMap<>();
|
||||
|
||||
private HitsFactory(String setName, String keyword, String instance) {
|
||||
super();
|
||||
@ -895,16 +886,13 @@ public class KeywordHits implements AutopsyVisitableItem {
|
||||
|
||||
@Override
|
||||
protected boolean createKeys(List<Long> list) {
|
||||
for (Long id : keywordResults.getArtifactIds(setName, keyword, instance)) {
|
||||
nodesMap.computeIfAbsent(id, i -> createBlackboardArtifactNode(i));
|
||||
list.add(id);
|
||||
}
|
||||
list.addAll(keywordResults.getArtifactIds(setName, keyword, instance));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Node createNodeForKey(Long artifactId) {
|
||||
return nodesMap.get(artifactId);
|
||||
return createBlackboardArtifactNode(artifactId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user