mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
refactoring
This commit is contained in:
parent
4b8d50f7a3
commit
7eee782fcf
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user