refactoring

This commit is contained in:
Greg DiCristofaro 2021-11-01 14:15:27 -04:00
parent 4b8d50f7a3
commit 7eee782fcf
7 changed files with 467 additions and 238 deletions

View File

@ -62,9 +62,10 @@ import org.sleuthkit.autopsy.datamodel.NodeSelectionInfo;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO.AnalysisResultFetcher;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO.HashsetResultFetcher;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO.AnalysisResultSetFetcher;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO.KeywordHitResultFetcher;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSetSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactDAO.DataArtifactFetcher;
import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.FileTypeExtensionsSearchParams;
@ -1270,20 +1271,21 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
}
/**
* Displays results of querying the DAO for given search parameters query.
* Displays results of querying the DAO for given search parameters (set and
* artifact type) query.
*
* @param hashHitKey The search parameter query.
* @param setKey The search parameter query.
*/
void displayHashHits(HashHitSearchParam hashHitKey) {
void displayAnalysisResultSet(AnalysisResultSetSearchParam setKey) {
try {
this.searchResultManager = new SearchManager(new HashsetResultFetcher(hashHitKey), getPageSize());
this.searchResultManager = new SearchManager(new AnalysisResultSetFetcher(setKey), getPageSize());
SearchResultsDTO results = searchResultManager.getResults();
displaySearchResults(results, true);
} catch (ExecutionException | IllegalArgumentException ex) {
logger.log(Level.WARNING, MessageFormat.format(
"There was an error fetching data for hash set filter: {0} and data source id: {1}.",
hashHitKey.getSetName(),
hashHitKey.getDataSourceId() == null ? "<null>" : hashHitKey.getDataSourceId()),
setKey.getSetName(),
setKey.getDataSourceId() == null ? "<null>" : setKey.getDataSourceId()),
ex);
}
}

View File

@ -43,6 +43,7 @@ import org.sleuthkit.autopsy.mainui.datamodel.FileTypeExtensionsSearchParams;
import org.sleuthkit.autopsy.mainui.datamodel.MainDAO;
import org.sleuthkit.autopsy.directorytree.ExternalViewerShortcutAction;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSetSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.FileTypeMimeSearchParams;
import org.sleuthkit.autopsy.mainui.datamodel.FileTypeSizeSearchParams;
import org.sleuthkit.autopsy.mainui.datamodel.HashHitSearchParam;
@ -373,7 +374,7 @@ public final class DataResultTopComponent extends TopComponent implements DataRe
/**
* Displays results of querying the DAO for analysis results matching the
* search parameters query.
*
*
* @param analysisResultParams The search parameter query.
*/
public void displayAnalysisResult(AnalysisResultSearchParam analysisResultParams) {
@ -389,54 +390,53 @@ public final class DataResultTopComponent extends TopComponent implements DataRe
public void displayDataArtifact(DataArtifactSearchParam dataArtifactParams) {
dataResultPanel.displayDataArtifact(dataArtifactParams);
}
/**
* Displays results of querying the DAO for files matching the mime
* search parameters query.
*
* Displays results of querying the DAO for files matching the mime search
* parameters query.
*
* @param fileMimeKey The search parameter query.
*/
public void displayFileMimes(FileTypeMimeSearchParams fileMimeKey) {
dataResultPanel.displayFileMimes(fileMimeKey);
}
/**
* Displays results of querying the DAO for files matching the file extension
* search parameters query.
* Displays results of querying the DAO for files matching the file
* extension search parameters query.
*
* @param fileExtensionsParams The search parameter query.
*/
public void displayFileExtensions(FileTypeExtensionsSearchParams fileExtensionsParams) {
dataResultPanel.displayFileExtensions(fileExtensionsParams);
}
/**
* Displays results of querying the DAO for files matching the file size
* Displays results of querying the DAO for files matching the file size
* search parameters query.
*
*
* @param fileSizeParams The search parameter query.
*/
public void displayFileSizes(FileTypeSizeSearchParams fileSizeParams) {
dataResultPanel.displayFileSizes(fileSizeParams);
}
/** Displays results of querying the DAO for hash sets matching the
* search parameters query.
*
* @param hashHitParams The search parameter query.
*/
public void displayHashHits(HashHitSearchParam hashHitParams) {
dataResultPanel.displayHashHits(hashHitParams);
}
/**
* Displays results of querying the DAO for keyword hits matching the
* search parameters query.
*
* Displays results of querying the DAO for an artifact type and set name.
* @param params The search parameters.
*/
public void displayAnalysisResultSet(AnalysisResultSetSearchParam params) {
dataResultPanel.displayAnalysisResultSet(params);
}
/**
* Displays results of querying the DAO for keyword hits matching the search
* parameters query.
*
* @param keywordParams The search parameter query.
*/
public void displayKeywordHits(KeywordHitSearchParam keywordParams) {
dataResultPanel.displayKeywordHits(keywordParams);
dataResultPanel.displayKeywordHits(keywordParams);
}
@Override

View File

@ -129,7 +129,7 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
// TODO We can probably combine all the caches at some point
private final Cache<SearchParams<AnalysisResultSearchParam>, AnalysisResultTableSearchResultsDTO> analysisResultCache = CacheBuilder.newBuilder().maximumSize(1000).build();
private final Cache<SearchParams<HashHitSearchParam>, AnalysisResultTableSearchResultsDTO> hashHitCache = CacheBuilder.newBuilder().maximumSize(1000).build();
private final Cache<SearchParams<AnalysisResultSetSearchParam>, AnalysisResultTableSearchResultsDTO> setHitCache = CacheBuilder.newBuilder().maximumSize(1000).build();
private final Cache<SearchParams<KeywordHitSearchParam>, AnalysisResultTableSearchResultsDTO> keywordHitCache = CacheBuilder.newBuilder().maximumSize(1000).build();
private AnalysisResultTableSearchResultsDTO fetchAnalysisResultsForTable(SearchParams<AnalysisResultSearchParam> cacheKey) throws NoCurrentCaseException, TskCoreException {
@ -270,19 +270,19 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
return key.getArtifactType().equals(eventData.getBlackboardArtifactType());
}
public AnalysisResultTableSearchResultsDTO getHashHitsForTable(HashHitSearchParam artifactKey, long startItem, Long maxCount, boolean hardRefresh) throws ExecutionException, IllegalArgumentException {
public AnalysisResultTableSearchResultsDTO getAnalysisResultSetHits(AnalysisResultSetSearchParam artifactKey, long startItem, Long maxCount, boolean hardRefresh) throws ExecutionException, IllegalArgumentException {
if (artifactKey.getDataSourceId() != null && artifactKey.getDataSourceId() < 0) {
throw new IllegalArgumentException(MessageFormat.format("Illegal data. "
+ "Data source id must be null or > 0. "
+ "Received data source id: {0}", artifactKey.getDataSourceId() == null ? "<null>" : artifactKey.getDataSourceId()));
}
SearchParams<HashHitSearchParam> searchParams = new SearchParams<>(artifactKey, startItem, maxCount);
SearchParams<AnalysisResultSetSearchParam> searchParams = new SearchParams<>(artifactKey, startItem, maxCount);
if (hardRefresh) {
hashHitCache.invalidate(searchParams);
setHitCache.invalidate(searchParams);
}
return hashHitCache.get(searchParams, () -> fetchSetNameHitsForTable(searchParams));
return setHitCache.get(searchParams, () -> fetchSetNameHitsForTable(searchParams));
}
public AnalysisResultTableSearchResultsDTO getKeywordHitsForTable(KeywordHitSearchParam artifactKey, long startItem, Long maxCount, boolean hardRefresh) throws ExecutionException, IllegalArgumentException {
@ -305,7 +305,7 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
}
public void dropHashHitCache() {
hashHitCache.invalidateAll();
setHitCache.invalidateAll();
}
public void dropKeywordHitCache() {
@ -450,6 +450,18 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
// return getSetCounts(type, dataSourceId, nullSetName, (dsId, setName) -> new AnalysisResultSetSearchParam(type, dsId, setName));
// }
public TreeResultsDTO<? extends AnalysisResultSetSearchParam> getSetCounts(BlackboardArtifact.Type artifactType, Long dataSourceId, String nullSetName) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public TreeResultsDTO<? extends KeywordSearchTermParams> getKeywordSetCounts(AnalysisResultSetSearchParam setParams) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public TreeResultsDTO<? extends KeywordMatchParams> getKeywordSearchTermCounts(KeywordSearchTermParams setParams) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
/**
* Handles basic functionality of fetching and paging of analysis results.
@ -499,20 +511,20 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO {
/**
* Handles fetching and paging of hashset hits.
*/
public static class HashsetResultFetcher extends AbstractAnalysisResultFetcher<HashHitSearchParam> {
public static class AnalysisResultSetFetcher extends AbstractAnalysisResultFetcher<AnalysisResultSetSearchParam> {
/**
* Main constructor.
*
* @param params Parameters to handle fetching of data.
*/
public HashsetResultFetcher(HashHitSearchParam params) {
public AnalysisResultSetFetcher(AnalysisResultSetSearchParam params) {
super(params);
}
@Override
public SearchResultsDTO getSearchResults(int pageSize, int pageIdx, boolean hardRefresh) throws ExecutionException {
return MainDAO.getInstance().getAnalysisResultDAO().getHashHitsForTable(this.getParameters(), pageIdx * pageSize, (long) pageSize, hardRefresh);
return MainDAO.getInstance().getAnalysisResultDAO().getAnalysisResultsForTable(this.getParameters(), pageIdx * pageSize, (long) pageSize, hardRefresh);
}
}

View File

@ -0,0 +1,75 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2021 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.mainui.datamodel;
/**
* Parameters for a keyword match found in files.
*/
public class KeywordMatchParams {
private final String setName;
private final String searchTerm;
private final String keywordMatch;
private final Long dataSourceId;
/**
* Main constructor.
*
* @param setName The set name.
* @param searchTerm The search term (determined from regex or
* keyword).
* @param keywordMatch The actual keyword match.
* @param dataSourceId The data source id or null.
*/
public KeywordMatchParams(String setName, String searchTerm, String keywordMatch, Long dataSourceId) {
this.setName = setName;
this.searchTerm = searchTerm;
this.keywordMatch = keywordMatch;
this.dataSourceId = dataSourceId;
}
/**
* @return The set name.
*/
public String getSetName() {
return setName;
}
/**
* @return The search term (determined from regex or keyword).
*/
public String getSearchTerm() {
return searchTerm;
}
/**
* @return The actual keyword match.
*/
public String getKeywordMatch() {
return keywordMatch;
}
/**
* @return The data source id or null.
*/
public Long getDataSourceId() {
return dataSourceId;
}
}

View File

@ -0,0 +1,78 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2021 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sleuthkit.autopsy.mainui.datamodel;
/**
* Parameters for a keyword search term.
*/
public class KeywordSearchTermParams {
private final String setName;
private final String searchTerm;
private final boolean hasChildren;
private final Long dataSourceId;
/**
* Main constructor.
*
* @param setName The set name.
* @param searchTerm The search term (determined from regex or
* keyword).
* @param hasChildren Whether or not this search term has children tree
* nodes (i.e. url regex search that further divides
* into different urls).
* @param dataSourceId The data source id or null.
*/
public KeywordSearchTermParams(String setName, String searchTerm, boolean hasChildren, Long dataSourceId) {
this.setName = setName;
this.searchTerm = searchTerm;
this.hasChildren = hasChildren;
this.dataSourceId = dataSourceId;
}
/**
* @return The set name.
*/
public String getSetName() {
return setName;
}
/**
* @return The search term (determined from regex or keyword).
*/
public String getSearchTerm() {
return searchTerm;
}
/**
* @return Whether or not this search term has children tree nodes (i.e.
* url regex search that further divides into different urls).
*/
public boolean hasChildren() {
return hasChildren;
}
/**
* @return The data source id or null.
*/
public Long getDataSourceId() {
return dataSourceId;
}
}

View File

@ -18,10 +18,15 @@
*/
package org.sleuthkit.autopsy.mainui.nodes;
import org.sleuthkit.autopsy.mainui.datamodel.KeywordSearchTermParams;
import org.sleuthkit.autopsy.mainui.datamodel.KeywordMatchParams;
import com.google.common.collect.ImmutableSet;
import java.beans.PropertyChangeEvent;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Children;
import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent;
@ -30,8 +35,11 @@ import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultDAO;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.AnalysisResultSetSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.KeywordHitSearchParam;
import org.sleuthkit.autopsy.mainui.datamodel.MainDAO;
import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO;
import static org.sleuthkit.autopsy.mainui.nodes.TreeNode.getDefaultLookup;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardArtifact.Category;
@ -39,7 +47,7 @@ import org.sleuthkit.datamodel.BlackboardArtifact.Category;
* Factory for displaying analysis result types in the tree.
*/
public class AnalysisResultTypeFactory extends TreeChildFactory<AnalysisResultSearchParam> {
private static Set<Integer> SET_TREE_ARTIFACTS = ImmutableSet.of(
BlackboardArtifact.Type.TSK_HASHSET_HIT.getTypeID(),
BlackboardArtifact.Type.TSK_INTERESTING_ARTIFACT_HIT.getTypeID(),
@ -76,13 +84,13 @@ public class AnalysisResultTypeFactory extends TreeChildFactory<AnalysisResultSe
@Override
protected TreeNode<AnalysisResultSearchParam> createNewNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSearchParam> rowData) {
// if (SET_TREE_ARTIFACTS.contains(rowData.getTypeData().getArtifactType().getTypeID())) {
// return new TreeTypeNode(rowData, new TreeSetFactory(rowData.getTypeData().getArtifactType(), dataSourceId, null));
// } else if (BlackboardArtifact.Type.TSK_KEYWORD_HIT.equals(rowData.getTypeData().getArtifactType())) {
// return new TreeTypeNode(rowData, new TreeSetFactory(rowData.getTypeData().getArtifactType(), dataSourceId, null));
// } else {
return new AnalysisResultTypeTreeNode(rowData);
// }
if (SET_TREE_ARTIFACTS.contains(rowData.getTypeData().getArtifactType().getTypeID())) {
return new TreeTypeNode(rowData, new TreeSetFactory(rowData.getTypeData().getArtifactType(), dataSourceId, null));
} else if (BlackboardArtifact.Type.TSK_KEYWORD_HIT.equals(rowData.getTypeData().getArtifactType())) {
return new TreeTypeNode(rowData, new TreeSetFactory(rowData.getTypeData().getArtifactType(), dataSourceId, null));
} else {
return new AnalysisResultTypeTreeNode(rowData);
}
}
@Override
@ -175,191 +183,245 @@ public class AnalysisResultTypeFactory extends TreeChildFactory<AnalysisResultSe
}
}
//
// /**
// * An analysis result type node that has nested children.
// */
// static class TreeTypeNode extends TreeNode<AnalysisResultSearchParam> {
//
// /**
// * Main constructor.
// *
// * @param itemData The data to display.
// */
// public TreeTypeNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSearchParam> itemData, ChildFactory childFactory) {
// super(itemData.getTypeData().getArtifactType().getTypeName(),
// getIconPath(itemData.getTypeData().getArtifactType()),
// itemData,
// Children.create(childFactory, true),
// getDefaultLookup(itemData));
// }
//
// @Override
// public void respondSelection(DataResultTopComponent dataResultPanel) {
// // GVDTODO...NO OP???
// }
// }
//
// /**
// * Factory displaying all hashset sets with count in the tree.
// */
// static class TreeSetFactory extends TreeChildFactory<AnalysisResultSetSearchParam> {
//
// private final BlackboardArtifact.Type artifactType;
// private final Long dataSourceId;
// private final String nullSetName;
//
// /**
// * Main constructor.
// *
// * @param artifactType The type of artifact.
// * @param dataSourceId The data source object id for which the results
// * should be filtered or null if no data source
// * filtering.
// * @param nullSetName The name of the set for artifacts with no
// * TSK_SET_NAME value. If null, items are omitted.
// */
// public TreeSetFactory(BlackboardArtifact.Type artifactType, Long dataSourceId, String nullSetName) {
// this.artifactType = artifactType;
// this.dataSourceId = dataSourceId;
// this.nullSetName = nullSetName;
// }
//
// @Override
// protected TreeResultsDTO<? extends AnalysisResultSetSearchParam> getChildResults() throws IllegalArgumentException, ExecutionException {
// return MainDAO.getInstance().getAnalysisResultDAO().getSetCounts(this.artifactType, this.dataSourceId, this.nullSetName);
// }
//
// @Override
// public boolean isRefreshRequired(PropertyChangeEvent evt) {
// return AnalysisResultTypeFactory.isRefreshRequired(artifactType, evt);
// }
//
// @Override
// protected TreeNode<AnalysisResultSetSearchParam> createNewNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> rowData) {
// return new TreeSetTypeNode(rowData, Children.LEAF);
// }
// }
//
// /**
// * A node for a set within an artifact type.
// */
// static class TreeSetTypeNode extends TreeNode<AnalysisResultSetSearchParam> {
//
// /**
// * Main constructor.
// *
// * @param artifactType The type of artifact.
// * @param itemData The data to display.
// */
// public TreeSetTypeNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> itemData, Children children) {
// super(itemData.getTypeData().getArtifactType().getTypeName(),
// getIconPath(itemData.getTypeData().getArtifactType()),
// itemData,
// children,
// getDefaultLookup(itemData));
// }
//
// @Override
// public void respondSelection(DataResultTopComponent dataResultPanel) {
// dataResultPanel.displayAnalysisResultSet(this.getItemData().getTypeData());
// }
// }
//
//
// @Messages({
// "AnalysisResultTypeFactory_adHocName=Adhoc Results"
// })
// static class KeywordSetFactory extends TreeSetFactory {
//
// public KeywordSetFactory(Long dataSourceId) {
// super(BlackboardArtifact.Type.TSK_KEYWORD_HIT, dataSourceId, Bundle.AnalysisResultTypeFactory_adHocName());
// }
//
// @Override
// protected TreeNode<AnalysisResultSetSearchParam> createNewNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> rowData) {
// return new TreeSetTypeNode(rowData, Children.LEAF);
// }
//
//
//
// }
//
// public static class KeywordSearchTermParams {
// private final String setName;
// private final String searchTerm;
// private final boolean hasChildren;
// private final Long dataSourceId;
//
// public KeywordSearchTermParams(String setName, String searchTerm, boolean hasChildren, Long dataSourceId) {
// this.setName = setName;
// this.searchTerm = searchTerm;
// this.hasChildren = hasChildren;
// this.dataSourceId = dataSourceId;
// }
//
// public String getSetName() {
// return setName;
// }
//
// public String getSearchTerm() {
// return searchTerm;
// }
//
// public boolean hasChildren() {
// return hasChildren;
// }
//
// public Long getDataSourceId() {
// return dataSourceId;
// }
// }
//
// static class KeywordSearchTermFactory extends TreeChildFactory<KeywordSearchTermParams> {
// private final AnalysisResultSetSearchParam setParams;
//
// public KeywordSearchTermFactory(AnalysisResultSetSearchParam setParams) {
// this.setParams = setParams;
// }
//
//
// @Override
// protected TreeNode<KeywordSearchTermParams> createNewNode(TreeResultsDTO.TreeItemDTO<? extends KeywordSearchTermParams> rowData) {
// return new KeywordSearchTermNode(rowData);
// }
//
// @Override
// protected TreeResultsDTO<? extends KeywordSearchTermParams> getChildResults() throws IllegalArgumentException, ExecutionException {
// return MainDAO.getInstance().getAnalysisResultDAO().getKeywordSetCounts(this.setParams);
// }
//
// @Override
// public boolean isRefreshRequired(PropertyChangeEvent evt) {
// return AnalysisResultTypeFactory.isRefreshRequired(BlackboardArtifact.Type.TSK_KEYWORD_HIT, evt);
// }
//
// }
//
// static class KeywordSearchTermNode extends TreeNode<KeywordSearchTermParams> {
//
// public KeywordSearchTermNode(TreeResultsDTO.TreeItemDTO<? extends KeywordSearchTermParams> itemData) {
// super(itemData.getTypeData().getSearchTerm(),
// getIconPath(BlackboardArtifact.Type.TSK_KEYWORD_HIT),
// itemData,
// itemData.getTypeData().hasChildren() ? Children.create(new KeywordFoundMatchFactory(itemData), true) : Children.LEAF,
// getDefaultLookup(itemData));
// }
//
// @Override
// public void respondSelection(DataResultTopComponent dataResultPanel) {
// KeywordSearchTermParams searchParams = this.getItemData().getTypeData();
//
// if (!searchParams.hasChildren()) {
// dataResultPanel.displayKeywordHits(new KeywordHitSearchParam(searchParams.getDataSourceId(), searchParams.getSetName(), null, searchParams.getSearchTerm()));
// }
// }
//
// }
// public static class KeywordFoundMatchFactory
// public static class KeywordFoundMatchNode
/**
* An analysis result type node that has nested children.
*/
static class TreeTypeNode extends TreeNode<AnalysisResultSearchParam> {
/**
* Main constructor.
*
* @param itemData The data to display.
*/
public TreeTypeNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSearchParam> itemData, ChildFactory childFactory) {
super(itemData.getTypeData().getArtifactType().getTypeName(),
getIconPath(itemData.getTypeData().getArtifactType()),
itemData,
Children.create(childFactory, true),
getDefaultLookup(itemData));
}
@Override
public void respondSelection(DataResultTopComponent dataResultPanel) {
// GVDTODO...NO OP???
}
}
/**
* Factory displaying all hashset sets with count in the tree.
*/
static class TreeSetFactory extends TreeChildFactory<AnalysisResultSetSearchParam> {
private final BlackboardArtifact.Type artifactType;
private final Long dataSourceId;
private final String nullSetName;
/**
* Main constructor.
*
* @param artifactType The type of artifact.
* @param dataSourceId The data source object id for which the results
* should be filtered or null if no data source
* filtering.
* @param nullSetName The name of the set for artifacts with no
* TSK_SET_NAME value. If null, items are omitted.
*/
public TreeSetFactory(BlackboardArtifact.Type artifactType, Long dataSourceId, String nullSetName) {
this.artifactType = artifactType;
this.dataSourceId = dataSourceId;
this.nullSetName = nullSetName;
}
@Override
protected TreeResultsDTO<? extends AnalysisResultSetSearchParam> getChildResults() throws IllegalArgumentException, ExecutionException {
return MainDAO.getInstance().getAnalysisResultDAO().getSetCounts(this.artifactType, this.dataSourceId, this.nullSetName);
}
@Override
public boolean isRefreshRequired(PropertyChangeEvent evt) {
return AnalysisResultTypeFactory.isRefreshRequired(artifactType, evt);
}
@Override
protected TreeNode<AnalysisResultSetSearchParam> createNewNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> rowData) {
return new TreeSetTypeNode(rowData, Children.LEAF);
}
}
/**
* A node for a set within an artifact type.
*/
static class TreeSetTypeNode extends TreeNode<AnalysisResultSetSearchParam> {
/**
* Main constructor.
*
* @param artifactType The type of artifact.
* @param itemData The data to display.
*/
public TreeSetTypeNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> itemData, Children children) {
super(itemData.getTypeData().getArtifactType().getTypeName(),
getIconPath(itemData.getTypeData().getArtifactType()),
itemData,
children,
getDefaultLookup(itemData));
}
@Override
public void respondSelection(DataResultTopComponent dataResultPanel) {
dataResultPanel.displayAnalysisResultSet(this.getItemData().getTypeData());
}
}
/**
* A factory that shows all sets in keyword hits.
*/
@Messages({
"AnalysisResultTypeFactory_adHocName=Adhoc Results"
})
static class KeywordSetFactory extends TreeSetFactory {
public KeywordSetFactory(Long dataSourceId) {
super(BlackboardArtifact.Type.TSK_KEYWORD_HIT, dataSourceId, Bundle.AnalysisResultTypeFactory_adHocName());
}
@Override
protected TreeNode<AnalysisResultSetSearchParam> createNewNode(TreeResultsDTO.TreeItemDTO<? extends AnalysisResultSetSearchParam> rowData) {
return new TreeSetTypeNode(rowData, Children.create(new KeywordSearchTermFactory(rowData.getTypeData()), true));
}
}
/**
* Factory for displaying all search terms (regex or exact) for a specific
* set.
*/
static class KeywordSearchTermFactory extends TreeChildFactory<KeywordSearchTermParams> {
private final AnalysisResultSetSearchParam setParams;
/**
* Main constructor.
*
* @param setParams The parameters for the set.
*/
public KeywordSearchTermFactory(AnalysisResultSetSearchParam setParams) {
this.setParams = setParams;
}
@Override
protected TreeNode<KeywordSearchTermParams> createNewNode(TreeResultsDTO.TreeItemDTO<? extends KeywordSearchTermParams> rowData) {
return new KeywordSearchTermNode(rowData);
}
@Override
protected TreeResultsDTO<? extends KeywordSearchTermParams> getChildResults() throws IllegalArgumentException, ExecutionException {
return MainDAO.getInstance().getAnalysisResultDAO().getKeywordSetCounts(this.setParams);
}
@Override
public boolean isRefreshRequired(PropertyChangeEvent evt) {
return AnalysisResultTypeFactory.isRefreshRequired(BlackboardArtifact.Type.TSK_KEYWORD_HIT, evt);
}
}
/**
* A node for an individual search term.
*/
static class KeywordSearchTermNode extends TreeNode<KeywordSearchTermParams> {
/**
* Main constructor.
*
* @param itemData The data for the search term.
*/
public KeywordSearchTermNode(TreeResultsDTO.TreeItemDTO<? extends KeywordSearchTermParams> itemData) {
super(itemData.getTypeData().getSearchTerm(),
getIconPath(BlackboardArtifact.Type.TSK_KEYWORD_HIT),
itemData,
itemData.getTypeData().hasChildren() ? Children.create(new KeywordFoundMatchFactory(itemData.getTypeData()), true) : Children.LEAF,
getDefaultLookup(itemData));
}
@Override
public void respondSelection(DataResultTopComponent dataResultPanel) {
KeywordSearchTermParams searchParams = this.getItemData().getTypeData();
if (!searchParams.hasChildren()) {
dataResultPanel.displayKeywordHits(
new KeywordHitSearchParam(
searchParams.getDataSourceId(),
searchParams.getSetName(),
null,
searchParams.getSearchTerm()));
}
}
}
/**
* A factory for found keyword matches based on the search term (for
* regex/substring).
*/
public static class KeywordFoundMatchFactory extends TreeChildFactory<KeywordMatchParams> {
private final KeywordSearchTermParams setParams;
/**
* Main constructor.
*
* @param params The search term parameters.
*/
public KeywordFoundMatchFactory(KeywordSearchTermParams params) {
this.setParams = params;
}
@Override
protected TreeNode<KeywordMatchParams> createNewNode(TreeResultsDTO.TreeItemDTO<? extends KeywordMatchParams> rowData) {
return new KeywordFoundMatchNode(rowData);
}
@Override
protected TreeResultsDTO<? extends KeywordMatchParams> getChildResults() throws IllegalArgumentException, ExecutionException {
return MainDAO.getInstance().getAnalysisResultDAO().getKeywordSearchTermCounts(this.setParams);
}
@Override
public boolean isRefreshRequired(PropertyChangeEvent evt) {
return AnalysisResultTypeFactory.isRefreshRequired(BlackboardArtifact.Type.TSK_KEYWORD_HIT, evt);
}
}
/**
* A node signifying a match for a specific keyword given a regex/substring
* search term.
*/
static class KeywordFoundMatchNode extends TreeNode<KeywordMatchParams> {
/**
* Main constructor.
* @param itemData The data for the match parameters.
*/
public KeywordFoundMatchNode(TreeResultsDTO.TreeItemDTO<? extends KeywordMatchParams> itemData) {
super(itemData.getTypeData().getKeywordMatch(),
getIconPath(BlackboardArtifact.Type.TSK_KEYWORD_HIT),
itemData,
Children.LEAF,
getDefaultLookup(itemData));
}
@Override
public void respondSelection(DataResultTopComponent dataResultPanel) {
KeywordMatchParams searchParams = this.getItemData().getTypeData();
dataResultPanel.displayKeywordHits(new KeywordHitSearchParam(
searchParams.getDataSourceId(),
searchParams.getSetName(),
searchParams.getKeywordMatch(),
searchParams.getSearchTerm()));
}
}
}

View File

@ -539,13 +539,13 @@ public class TableSearchTest extends NbTestCase {
// Test hash set hits
AnalysisResultDAO analysisResultDAO = MainDAO.getInstance().getAnalysisResultDAO();
HashHitSearchParam hashParam = new HashHitSearchParam(null, HASH_SET_1);
AnalysisResultTableSearchResultsDTO results = analysisResultDAO.getHashHitsForTable(hashParam, 0, null, false);
AnalysisResultTableSearchResultsDTO results = analysisResultDAO.getAnalysisResultSetHits(hashParam, 0, null, false);
assertEquals(BlackboardArtifact.Type.TSK_HASHSET_HIT, results.getArtifactType());
assertEquals(3, results.getTotalResultsCount());
assertEquals(3, results.getItems().size());
hashParam = new HashHitSearchParam(dataSource2.getId(), HASH_SET_1);
results = analysisResultDAO.getHashHitsForTable(hashParam, 0, null, false);
results = analysisResultDAO.getAnalysisResultSetHits(hashParam, 0, null, false);
assertEquals(BlackboardArtifact.Type.TSK_HASHSET_HIT, results.getArtifactType());
assertEquals(1, results.getTotalResultsCount());
assertEquals(1, results.getItems().size());