mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 01:07:42 +00:00
search result children and loading in DataResultTopComponent
This commit is contained in:
parent
bb255017ca
commit
33c5c08a43
@ -18,10 +18,12 @@
|
||||
*/
|
||||
package org.sleuthkit.autopsy.corecomponents;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Level;
|
||||
import javax.swing.JComponent;
|
||||
import org.openide.explorer.ExplorerManager;
|
||||
@ -39,6 +41,9 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.datamodel.DataArtifactTypeNodev2;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableDTO;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableSearchResultsDTO;
|
||||
import org.sleuthkit.autopsy.directorytree.ExternalViewerShortcutAction;
|
||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||
|
||||
@ -361,9 +366,21 @@ public final class DataResultTopComponent extends TopComponent implements DataRe
|
||||
public void setNode(Node selectedNode) {
|
||||
dataResultPanel.setNode(selectedNode);
|
||||
}
|
||||
|
||||
|
||||
private final ThreePanelDAO threePanelDAO = ThreePanelDAO.getInstance();
|
||||
|
||||
public void displayDataArtifact(BlackboardArtifact.Type artifactType, Long dataSourceId) {
|
||||
setNode(new TableFilterNode(new DataArtifactTypeNodev2(artifactType, dataSourceId), true));
|
||||
try {
|
||||
DataArtifactTableSearchResultsDTO table = threePanelDAO.getDataArtifactsForTable(artifactType, dataSourceId);
|
||||
dataResultPanel.setNode(new DataArtifactTypeNodev2(table));
|
||||
dataResultPanel.setNumberOfChildNodes(table.getTotalResultsCount());
|
||||
} catch (ExecutionException | IllegalArgumentException ex) {
|
||||
logger.log(Level.WARNING, MessageFormat.format(
|
||||
"There was an error fetching data for artifact type: {0} and data source id: {1}.",
|
||||
artifactType.getTypeName(),
|
||||
dataSourceId == null ? "<null>" : dataSourceId),
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -175,6 +175,10 @@ FileNode.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E
|
||||
FileNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash
|
||||
FileNode.getActions.viewFileInDir.text=View File in Directory
|
||||
FileNode.getActions.viewInNewWin.text=View Item in New Window
|
||||
FileNodev2.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E
|
||||
FileNodev2.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash
|
||||
FileNodev2.getActions.viewFileInDir.text=View File in Directory
|
||||
FileNodev2.getActions.viewInNewWin.text=View Item in New Window
|
||||
FileTypeExtensionFilters.tskDatabaseFilter.text=Databases
|
||||
FileTypes.bgCounting.placeholder=\ (counting...)
|
||||
FileTypes.createSheet.name.desc=no description
|
||||
|
@ -5,71 +5,25 @@
|
||||
*/
|
||||
package org.sleuthkit.autopsy.datamodel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
import org.openide.nodes.ChildFactory;
|
||||
import org.openide.nodes.Node;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.datamodel.DataArtifactFactoryv2.ChildData;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactRow;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableDTO;
|
||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableSearchResultsDTO;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author gregd
|
||||
*/
|
||||
public class DataArtifactFactoryv2 extends ChildFactory.Detachable<DataArtifactFactoryv2.ChildData> {
|
||||
public class DataArtifactFactoryv2 extends SearchResultChildFactory<DataArtifactTableSearchResultsDTO, DataArtifactTableDTO> {
|
||||
|
||||
public static class ChildData {
|
||||
|
||||
private final DataArtifactTableDTO tableData;
|
||||
private final DataArtifactRow artifactRow;
|
||||
|
||||
public ChildData(DataArtifactTableDTO tableData, DataArtifactRow artifactRow) {
|
||||
this.tableData = tableData;
|
||||
this.artifactRow = artifactRow;
|
||||
}
|
||||
|
||||
public DataArtifactTableDTO getTableData() {
|
||||
return tableData;
|
||||
}
|
||||
|
||||
public DataArtifactRow getArtifactRow() {
|
||||
return artifactRow;
|
||||
}
|
||||
public DataArtifactFactoryv2() {
|
||||
}
|
||||
|
||||
private static final Logger logger = Logger.getLogger(DataArtifactFactoryv2.class.getName());
|
||||
|
||||
private final BlackboardArtifact.Type type;
|
||||
private final Long filteringDSObjId;
|
||||
private final ThreePanelDAO dao = ThreePanelDAO.getInstance();
|
||||
|
||||
DataArtifactFactoryv2(BlackboardArtifact.Type type, Long filteringDSObjId) {
|
||||
this.type = type;
|
||||
this.filteringDSObjId = filteringDSObjId;
|
||||
public DataArtifactFactoryv2(DataArtifactTableSearchResultsDTO initialResults) {
|
||||
super(initialResults);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean createKeys(List<ChildData> toPopulate) {
|
||||
try {
|
||||
DataArtifactTableDTO table = dao.getDataArtifactsForTable(type, filteringDSObjId);
|
||||
List<ChildData> keys = table.getRows().stream()
|
||||
.map((row) -> new ChildData(table, row))
|
||||
.collect(Collectors.toList());
|
||||
toPopulate.addAll(keys);
|
||||
return true;
|
||||
} catch (ExecutionException ex) {
|
||||
logger.log(Level.WARNING, "There was an error fetching data for type: " + type, ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Node createNodeForKey(ChildData key) {
|
||||
return new DataArtifactNodev2(key.getTableData(), key.getArtifactRow());
|
||||
protected Node createNodeForKey(DataArtifactTableSearchResultsDTO searchResults, DataArtifactTableDTO itemData) {
|
||||
return new DataArtifactNodev2(searchResults, itemData);
|
||||
}
|
||||
}
|
||||
|
@ -61,8 +61,8 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
|
||||
import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint;
|
||||
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
||||
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactRow;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableDTO;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableSearchResultsDTO;
|
||||
import org.sleuthkit.autopsy.texttranslation.TextTranslationService;
|
||||
import org.sleuthkit.autopsy.directorytree.ExportCSVAction;
|
||||
import org.sleuthkit.autopsy.directorytree.ExternalViewerAction;
|
||||
@ -88,7 +88,7 @@ public class DataArtifactNodev2 extends AbstractNode {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(DataArtifactNodev2.class.getName());
|
||||
|
||||
private static Lookup createLookup(DataArtifactRow row) {
|
||||
private static Lookup createLookup(DataArtifactTableDTO row) {
|
||||
DataArtifactItem artifactItem = new DataArtifactItem(row.getDataArtifact(), row.getSrcContent());
|
||||
if (row.getSrcContent() == null) {
|
||||
return Lookups.fixed(row.getDataArtifact(), artifactItem);
|
||||
@ -99,15 +99,15 @@ public class DataArtifactNodev2 extends AbstractNode {
|
||||
|
||||
private final BlackboardArtifact.Type artifactType;
|
||||
private final Map<Integer, BlackboardAttribute.Type> attributeTypes;
|
||||
private final DataArtifactRow artifactRow;
|
||||
private final DataArtifactTableDTO artifactRow;
|
||||
private final boolean hasSupportedTimeStamp;
|
||||
private String translatedSourceName = null;
|
||||
|
||||
public DataArtifactNodev2(DataArtifactTableDTO tableData, DataArtifactRow artifactRow) {
|
||||
public DataArtifactNodev2(DataArtifactTableSearchResultsDTO tableData, DataArtifactTableDTO artifactRow) {
|
||||
this(tableData, artifactRow, IconsUtil.getIconFilePath(tableData.getArtifactType().getTypeID()));
|
||||
}
|
||||
|
||||
public DataArtifactNodev2(DataArtifactTableDTO tableData, DataArtifactRow artifactRow, String iconPath) {
|
||||
public DataArtifactNodev2(DataArtifactTableSearchResultsDTO tableData, DataArtifactTableDTO artifactRow, String iconPath) {
|
||||
super(Children.LEAF, createLookup(artifactRow));
|
||||
|
||||
setDisplayName(artifactRow.getSrcContent().getName());
|
||||
|
@ -9,23 +9,26 @@ import org.openide.nodes.AbstractNode;
|
||||
import org.openide.nodes.Children;
|
||||
import org.openide.nodes.Sheet;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.DataArtifactTableSearchResultsDTO;
|
||||
import org.sleuthkit.autopsy.datamodel.utils.IconsUtil;
|
||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author gregd
|
||||
*/
|
||||
public class DataArtifactTypeNodev2 extends AbstractNode {
|
||||
|
||||
private final BlackboardArtifact.Type artifactType;
|
||||
|
||||
public DataArtifactTypeNodev2(BlackboardArtifact.Type artifactType, Long dataSourceId) {
|
||||
super(Children.create(new DataArtifactFactoryv2(artifactType, dataSourceId), true));
|
||||
setName(artifactType.getTypeName());
|
||||
setDisplayName(artifactType.getDisplayName());
|
||||
this.artifactType = artifactType;
|
||||
String iconPath = IconsUtil.getIconFilePath(artifactType.getTypeID());
|
||||
private final SearchResultChildFactory<?,?> factory;
|
||||
|
||||
public DataArtifactTypeNodev2(DataArtifactTableSearchResultsDTO initialResults) {
|
||||
this(initialResults, new DataArtifactFactoryv2(initialResults));
|
||||
}
|
||||
|
||||
private DataArtifactTypeNodev2(DataArtifactTableSearchResultsDTO initialResults, DataArtifactFactoryv2 factory) {
|
||||
super(Children.create(factory, true));
|
||||
this.factory = factory;
|
||||
setName(initialResults.getArtifactType().getTypeName());
|
||||
setDisplayName(initialResults.getArtifactType().getDisplayName());
|
||||
String iconPath = IconsUtil.getIconFilePath(initialResults.getArtifactType().getTypeID());
|
||||
setIconBaseWithExtension(iconPath != null && iconPath.charAt(0) == '/' ? iconPath.substring(1) : iconPath);
|
||||
}
|
||||
|
||||
@ -41,12 +44,13 @@ public class DataArtifactTypeNodev2 extends AbstractNode {
|
||||
sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.name"),
|
||||
NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.displayName"),
|
||||
NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.artType.desc"),
|
||||
this.artifactType.getDisplayName()));
|
||||
getDisplayName()));
|
||||
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.desc"),
|
||||
// getChildCount()));
|
||||
sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.name"),
|
||||
NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.displayName"),
|
||||
NbBundle.getMessage(this.getClass(), "ArtifactTypeNode.createSheet.childCnt.desc"),
|
||||
this.factory.getResultCount()));
|
||||
|
||||
return sheet;
|
||||
}
|
||||
}
|
||||
|
@ -197,28 +197,28 @@ public class FileNodev2 extends AbstractNode {
|
||||
*/
|
||||
@Override
|
||||
@NbBundle.Messages({
|
||||
"FileNode.getActions.viewFileInDir.text=View File in Directory",
|
||||
"FileNode.getActions.viewInNewWin.text=View Item in New Window",
|
||||
"FileNode.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E",
|
||||
"FileNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash"})
|
||||
"FileNodev2.getActions.viewFileInDir.text=View File in Directory",
|
||||
"FileNodev2.getActions.viewInNewWin.text=View Item in New Window",
|
||||
"FileNodev2.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E",
|
||||
"FileNodev2.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash"})
|
||||
public Action[] getActions(boolean context) {
|
||||
List<Action> actionsList = new ArrayList<>();
|
||||
|
||||
// GVDTODO: action requires node
|
||||
// if (!this.directoryBrowseMode) {
|
||||
// actionsList.add(new ViewContextAction(Bundle.FileNode_getActions_viewFileInDir_text(), this));
|
||||
// actionsList.add(new ViewContextAction(Bundle.FileNodev2_getActions_viewFileInDir_text(), this));
|
||||
// }
|
||||
|
||||
|
||||
actionsList.add(ViewFileInTimelineAction.createViewFileAction(this.fileData.getAbstractFile()));
|
||||
actionsList.add(null); // Creates an item separator
|
||||
|
||||
actionsList.add(new NewWindowViewAction(Bundle.FileNode_getActions_viewInNewWin_text(), this));
|
||||
actionsList.add(new NewWindowViewAction(Bundle.FileNodev2_getActions_viewInNewWin_text(), this));
|
||||
final Collection<AbstractFile> selectedFilesList
|
||||
= new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
|
||||
if (selectedFilesList.size() == 1) {
|
||||
actionsList.add(new ExternalViewerAction(
|
||||
Bundle.FileNode_getActions_openInExtViewer_text(), this));
|
||||
Bundle.FileNodev2_getActions_openInExtViewer_text(), this));
|
||||
} else {
|
||||
actionsList.add(ExternalViewerShortcutAction.getInstance());
|
||||
}
|
||||
|
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.sleuthkit.autopsy.datamodel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import org.openide.nodes.ChildFactory;
|
||||
import org.openide.nodes.Node;
|
||||
import org.sleuthkit.autopsy.datamodel.SearchResultChildFactory.ChildKey;
|
||||
import org.sleuthkit.autopsy.datamodel.ThreePanelDAO.SearchResultsDTO;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author gregd
|
||||
*/
|
||||
public abstract class SearchResultChildFactory<T extends SearchResultsDTO<S>, S> extends ChildFactory<ChildKey<S, T>> {
|
||||
|
||||
private T results;
|
||||
|
||||
public SearchResultChildFactory() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public SearchResultChildFactory(T initialResults) {
|
||||
this.results = initialResults;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean createKeys(List<ChildKey<S, T>> toPopulate) {
|
||||
T results = this.results;
|
||||
|
||||
if (results != null) {
|
||||
List<ChildKey<S, T>> childKeys = results.getItems().stream()
|
||||
.map((item) -> new ChildKey<>(results, item))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
toPopulate.addAll(childKeys);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Node createNodeForKey(ChildKey<S, T> key) {
|
||||
return createNodeForKey(key.getSearchResults(), key.getChild());
|
||||
}
|
||||
|
||||
protected abstract Node createNodeForKey(T searchResults, S itemData);
|
||||
|
||||
public void update(T newResults) {
|
||||
this.results = newResults;
|
||||
this.refresh(false);
|
||||
}
|
||||
|
||||
public int getResultCount() {
|
||||
return results == null ? 0 : results.getTotalResultsCount();
|
||||
}
|
||||
|
||||
|
||||
static class ChildKey<S, T extends SearchResultsDTO<S>> {
|
||||
|
||||
private final T searchResults;
|
||||
private final S child;
|
||||
|
||||
ChildKey(T searchResults, S child) {
|
||||
this.searchResults = searchResults;
|
||||
this.child = child;
|
||||
}
|
||||
|
||||
T getSearchResults() {
|
||||
return searchResults;
|
||||
}
|
||||
|
||||
S getChild() {
|
||||
return child;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 97 * hash + Objects.hashCode(this.child);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final ChildKey<?, ?> other = (ChildKey<?, ?>) obj;
|
||||
if (!Objects.equals(this.child, other.child)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -53,14 +53,14 @@ public class ThreePanelDAO {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private final Cache<DataArtifactCacheKey, DataArtifactTableDTO> dataArtifactCache = CacheBuilder.newBuilder().maximumSize(1000).build();
|
||||
private final Cache<DataArtifactCacheKey, DataArtifactTableSearchResultsDTO> dataArtifactCache = CacheBuilder.newBuilder().maximumSize(1000).build();
|
||||
private final Cache<Long, List<FilesContentTableDTO>> filesCache = CacheBuilder.newBuilder().maximumSize(1000).build();
|
||||
|
||||
private SleuthkitCase getCase() throws NoCurrentCaseException {
|
||||
return Case.getCurrentCaseThrows().getSleuthkitCase();
|
||||
}
|
||||
|
||||
private DataArtifactTableDTO fetchDataArtifactsForTable(DataArtifactCacheKey cacheKey) throws NoCurrentCaseException, TskCoreException {
|
||||
private DataArtifactTableSearchResultsDTO fetchDataArtifactsForTable(DataArtifactCacheKey cacheKey) throws NoCurrentCaseException, TskCoreException {
|
||||
SleuthkitCase skCase = getCase();
|
||||
Blackboard blackboard = skCase.getBlackboard();
|
||||
|
||||
@ -74,7 +74,7 @@ public class ThreePanelDAO {
|
||||
|
||||
// determine all different attribute types present as well as row data for each artifact
|
||||
Set<BlackboardAttribute.Type> attributeTypes = new HashSet<>();
|
||||
List<DataArtifactRow> rows = new ArrayList<>();
|
||||
List<DataArtifactTableDTO> rows = new ArrayList<>();
|
||||
|
||||
for (DataArtifact artifact : arts) {
|
||||
long id = artifact.getId();
|
||||
@ -91,14 +91,14 @@ public class ThreePanelDAO {
|
||||
|
||||
Content srcContent = artifact.getParent();
|
||||
String dataSourceName = getDataSourceName(srcContent);
|
||||
rows.add(new DataArtifactRow(id, attributeValues, artifact, srcContent, linkedFile, dataSourceName));
|
||||
rows.add(new DataArtifactTableDTO(id, attributeValues, artifact, srcContent, linkedFile, dataSourceName));
|
||||
}
|
||||
|
||||
List<BlackboardAttribute.Type> attributeTypeSortedList = attributeTypes.stream()
|
||||
.sorted((a, b) -> a.getDisplayName().compareToIgnoreCase(b.getDisplayName()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return new DataArtifactTableDTO(artType, attributeTypeSortedList, rows);
|
||||
return new DataArtifactTableSearchResultsDTO(artType, attributeTypeSortedList, rows);
|
||||
}
|
||||
|
||||
private String getDataSourceName(Content srcContent) throws TskCoreException {
|
||||
@ -181,7 +181,7 @@ public class ThreePanelDAO {
|
||||
}
|
||||
}
|
||||
|
||||
public DataArtifactTableDTO getDataArtifactsForTable(BlackboardArtifact.Type artType, Long dataSourceId) throws ExecutionException, IllegalArgumentException {
|
||||
public DataArtifactTableSearchResultsDTO getDataArtifactsForTable(BlackboardArtifact.Type artType, Long dataSourceId) throws ExecutionException, IllegalArgumentException {
|
||||
if (artType == null || artType.getCategory() != BlackboardArtifact.Category.DATA_ARTIFACT) {
|
||||
throw new IllegalArgumentException(MessageFormat.format("Illegal data. "
|
||||
+ "Artifact type must be non-null and data artifact. "
|
||||
@ -305,7 +305,7 @@ public class ThreePanelDAO {
|
||||
|
||||
}
|
||||
|
||||
public static class DataArtifactRow {
|
||||
public static class DataArtifactTableDTO {
|
||||
|
||||
private final long id;
|
||||
|
||||
@ -316,7 +316,7 @@ public class ThreePanelDAO {
|
||||
private final Content linkedFile;
|
||||
private String dataSourceName;
|
||||
|
||||
public DataArtifactRow(long id, Map<Integer, Object> attributeValues, DataArtifact dataArtifact, Content srcContent, Content linkedFile, String dataSourceName) {
|
||||
public DataArtifactTableDTO(long id, Map<Integer, Object> attributeValues, DataArtifact dataArtifact, Content srcContent, Content linkedFile, String dataSourceName) {
|
||||
this.id = id;
|
||||
this.attributeValues = attributeValues;
|
||||
this.dataArtifact = dataArtifact;
|
||||
@ -348,18 +348,57 @@ public class ThreePanelDAO {
|
||||
public String getDataSourceName() {
|
||||
return dataSourceName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 67 * hash + (int) (this.id ^ (this.id >>> 32));
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final DataArtifactTableDTO other = (DataArtifactTableDTO) obj;
|
||||
if (this.id != other.id) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public interface SearchResultsDTO<T> {
|
||||
int getTotalResultsCount();
|
||||
List<T> getItems();
|
||||
}
|
||||
|
||||
public static class DataArtifactTableDTO {
|
||||
public static class DataArtifactTableSearchResultsDTO implements SearchResultsDTO<DataArtifactTableDTO> {
|
||||
|
||||
private final BlackboardArtifact.Type artifactType;
|
||||
private final List<BlackboardAttribute.Type> attributeTypes;
|
||||
private final List<DataArtifactRow> rows;
|
||||
private final List<DataArtifactTableDTO> items;
|
||||
private final int totalResultsCount;
|
||||
|
||||
public DataArtifactTableDTO(BlackboardArtifact.Type artifactType, List<BlackboardAttribute.Type> attributeKeys, List<DataArtifactRow> rows) {
|
||||
public DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type artifactType, List<BlackboardAttribute.Type> attributeKeys, List<DataArtifactTableDTO> items) {
|
||||
this(artifactType, attributeKeys, items, items.size());
|
||||
}
|
||||
|
||||
|
||||
public DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type artifactType, List<BlackboardAttribute.Type> attributeKeys, List<DataArtifactTableDTO> items, int totalResultsCount) {
|
||||
this.artifactType = artifactType;
|
||||
this.attributeTypes = attributeKeys;
|
||||
this.rows = rows;
|
||||
this.items = items;
|
||||
this.totalResultsCount = totalResultsCount;
|
||||
}
|
||||
|
||||
public BlackboardArtifact.Type getArtifactType() {
|
||||
@ -370,9 +409,17 @@ public class ThreePanelDAO {
|
||||
return attributeTypes;
|
||||
}
|
||||
|
||||
public List<DataArtifactRow> getRows() {
|
||||
return rows;
|
||||
@Override
|
||||
public List<DataArtifactTableDTO> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTotalResultsCount() {
|
||||
return totalResultsCount;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public enum FilesType {
|
||||
|
154
Core/src/org/sleuthkit/autopsy/datamodel/VolumeNodev2.java
Normal file
154
Core/src/org/sleuthkit/autopsy/datamodel/VolumeNodev2.java
Normal file
@ -0,0 +1,154 @@
|
||||
///*
|
||||
// * Autopsy Forensic Browser
|
||||
// *
|
||||
// * Copyright 2011-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.datamodel;
|
||||
//
|
||||
//import java.beans.PropertyChangeEvent;
|
||||
//import java.beans.PropertyChangeListener;
|
||||
//import java.util.ArrayList;
|
||||
//import java.util.Arrays;
|
||||
//import java.util.EnumSet;
|
||||
//import java.util.List;
|
||||
//import java.util.Set;
|
||||
//import java.util.logging.Level;
|
||||
//import javax.swing.Action;
|
||||
//import org.openide.nodes.AbstractNode;
|
||||
//import org.openide.nodes.Sheet;
|
||||
//import org.openide.util.NbBundle;
|
||||
//import org.sleuthkit.autopsy.casemodule.Case;
|
||||
//import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
//import org.sleuthkit.autopsy.datamodel.BaseChildFactory.NoSuchEventBusException;
|
||||
//import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor;
|
||||
//import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
|
||||
//import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
//import org.sleuthkit.autopsy.ingest.ModuleContentEvent;
|
||||
//import org.sleuthkit.datamodel.Content;
|
||||
//import org.sleuthkit.datamodel.Pool;
|
||||
//import org.sleuthkit.datamodel.TskCoreException;
|
||||
//import org.sleuthkit.datamodel.VirtualDirectory;
|
||||
//import org.sleuthkit.datamodel.Volume;
|
||||
//import org.sleuthkit.autopsy.directorytree.FileSystemDetailsAction;
|
||||
//import org.sleuthkit.datamodel.Tag;
|
||||
//
|
||||
///**
|
||||
// * This class is used to represent the "Node" for the volume. Its child is the
|
||||
// * root directory of a file system
|
||||
// */
|
||||
//public class VolumeNodev2 extends AbstractNode {
|
||||
//
|
||||
// private static final Logger logger = Logger.getLogger(VolumeNodev2.class.getName());
|
||||
//
|
||||
//
|
||||
// public static class VolumeTableDTO {
|
||||
// private final long volAddr;
|
||||
//
|
||||
// public long getVolAddr() {
|
||||
// return volAddr;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
////
|
||||
//// static String nameForVolume(VolumeTableDTO vol) {
|
||||
//// return "vol" + Long.toString(vol.getAddr()); //NON-NLS
|
||||
//// }
|
||||
//
|
||||
// /**
|
||||
// *
|
||||
// * @param vol underlying Content instance
|
||||
// */
|
||||
// public VolumeNodev2(VolumeTableDTO vol) {
|
||||
// super(vol);
|
||||
//
|
||||
// // set name, display name, and icon
|
||||
// String volName = nameForVolume(vol);
|
||||
// long end = vol.getStart() + (vol.getLength() - 1);
|
||||
// String tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + "-" + end + ")";
|
||||
//
|
||||
// // If this is a pool volume use a custom display name
|
||||
// try {
|
||||
// if (vol.getParent() != null
|
||||
// && vol.getParent().getParent() instanceof Pool) {
|
||||
// // Pool volumes are not contiguous so printing a range of blocks is inaccurate
|
||||
// tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + ")";
|
||||
// }
|
||||
// } catch (TskCoreException ex) {
|
||||
// logger.log(Level.WARNING, "Error looking up parent(s) of volume with obj ID = " + vol.getId(), ex);
|
||||
// }
|
||||
// this.setDisplayName(tempVolName);
|
||||
//
|
||||
// this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/vol-icon.png"); //NON-NLS
|
||||
// }
|
||||
//
|
||||
//
|
||||
// /**
|
||||
// * Right click action for volume node
|
||||
// *
|
||||
// * @param popup
|
||||
// *
|
||||
// * @return
|
||||
// */
|
||||
// @Override
|
||||
// public Action[] getActions(boolean popup) {
|
||||
// List<Action> actionsList = new ArrayList<>();
|
||||
// actionsList.add(new FileSystemDetailsAction(content));
|
||||
// actionsList.add(new NewWindowViewAction(
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.getActions.viewInNewWin.text"), this));
|
||||
// actionsList.addAll(ExplorerNodeActionVisitor.getActions(content));
|
||||
// actionsList.add(null);
|
||||
// actionsList.addAll(Arrays.asList(super.getActions(true)));
|
||||
//
|
||||
// return actionsList.toArray(new Action[actionsList.size()]);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected Sheet createSheet() {
|
||||
// Sheet sheet = super.createSheet();
|
||||
// Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
|
||||
// if (sheetSet == null) {
|
||||
// sheetSet = Sheet.createPropertiesSet();
|
||||
// sheet.put(sheetSet);
|
||||
// }
|
||||
//
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.name.desc"),
|
||||
// this.getDisplayName()));
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.id.desc"),
|
||||
// content.getAddr()));
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.startSector.desc"),
|
||||
// content.getStart()));
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.lenSectors.desc"),
|
||||
// content.getLength()));
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.description.desc"),
|
||||
// content.getDescription()));
|
||||
// sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.name"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.displayName"),
|
||||
// NbBundle.getMessage(this.getClass(), "VolumeNode.createSheet.flags.desc"),
|
||||
// content.getFlagsAsString()));
|
||||
//
|
||||
// return sheet;
|
||||
// }
|
||||
//}
|
Loading…
x
Reference in New Issue
Block a user