diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java index b4c0e02e59..f9452ac3b9 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java @@ -44,7 +44,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResult; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; import org.sleuthkit.autopsy.datamodel.NodeSelectionInfo; import org.sleuthkit.autopsy.mainui.nodes.SearchResultRootNode; -import org.sleuthkit.autopsy.mainui.datamodel.ThreePanelDAO; +import org.sleuthkit.autopsy.mainui.datamodel.MainDAO; import org.sleuthkit.autopsy.mainui.datamodel.SearchResultsDTO; /** diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java index 03b5030151..4c3a10e239 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java @@ -45,11 +45,11 @@ import org.sleuthkit.autopsy.mainui.nodes.DataArtifactNode; import org.sleuthkit.autopsy.mainui.nodes.FileNode; import org.sleuthkit.autopsy.mainui.datamodel.FileTypeExtensionsSearchParam; import org.sleuthkit.autopsy.mainui.nodes.SearchResultRootNode; -import org.sleuthkit.autopsy.mainui.datamodel.ThreePanelDAO; -import org.sleuthkit.autopsy.mainui.datamodel.RowResultDTO; +import org.sleuthkit.autopsy.mainui.datamodel.MainDAO; import org.sleuthkit.autopsy.mainui.datamodel.SearchResultsDTO; import org.sleuthkit.autopsy.directorytree.ExternalViewerShortcutAction; import org.sleuthkit.datamodel.BlackboardArtifact; +import org.sleuthkit.autopsy.mainui.datamodel.RowDTO; /** * A DataResultTopComponent object is a NetBeans top component that provides @@ -371,7 +371,7 @@ public final class DataResultTopComponent extends TopComponent implements DataRe dataResultPanel.setNode(selectedNode); } - private final ThreePanelDAO threePanelDAO = ThreePanelDAO.getInstance(); + private final MainDAO threePanelDAO = MainDAO.getInstance(); public void displayDataArtifact(DataArtifactSearchParam dataArtifactKey) { try { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index 971f971714..c9bc9636e3 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -88,7 +88,6 @@ import org.sleuthkit.autopsy.datamodel.BaseChildFactory.PageChangeEvent; import org.sleuthkit.autopsy.datamodel.BaseChildFactory.PageCountChangeEvent; import org.sleuthkit.autopsy.datamodel.BaseChildFactory.PageSizeChangeEvent; import org.sleuthkit.autopsy.mainui.nodes.SearchResultRootNode; -import org.sleuthkit.autopsy.mainui.datamodel.ThreePanelDAO; import org.sleuthkit.autopsy.mainui.datamodel.SearchResultsDTO; import org.sleuthkit.datamodel.Score.Significance; diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowResultDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowDTO.java similarity index 89% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowResultDTO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowDTO.java index 1d3214a480..a81f60d8aa 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowResultDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseRowDTO.java @@ -23,13 +23,13 @@ import java.util.List; /** * Base implementation for a row result. */ -public class BaseRowResultDTO implements RowResultDTO { +public class BaseRowDTO implements RowDTO { private final List cellValues; private final long id; private final String typeId; - public BaseRowResultDTO(List cellValues, String typeId, long id) { + public BaseRowDTO(List cellValues, String typeId, long id) { this.cellValues = cellValues; this.id = id; this.typeId = typeId; @@ -68,7 +68,7 @@ public class BaseRowResultDTO implements RowResultDTO { if (getClass() != obj.getClass()) { return false; } - final BaseRowResultDTO other = (BaseRowResultDTO) obj; + final BaseRowDTO other = (BaseRowDTO) obj; if (this.id != other.id) { return false; } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchParam.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchParam.java new file mode 100644 index 0000000000..6283c1ed9a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchParam.java @@ -0,0 +1,49 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2021 Basis Technology Corp. + * Contact: carrier sleuthkit 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; + +/** + * Base implementation of search parameters to provide to a DAO. + */ +public class BaseSearchParam implements SearchParam { + private final long startItem; + private final Long maxResultsCount; + + /** + * Constructor that gets all results. + */ + public BaseSearchParam() { + this(0, null); + } + + public BaseSearchParam(long startItem, Long maxResultsCount) { + this.startItem = startItem; + this.maxResultsCount = maxResultsCount; + } + + @Override + public long getStartItem() { + return startItem; + } + + @Override + public Long getMaxResultsCount() { + return maxResultsCount; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchResultsDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchResultsDTO.java index cda5fa2b32..62c3d09410 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchResultsDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/BaseSearchResultsDTO.java @@ -28,15 +28,15 @@ public class BaseSearchResultsDTO implements SearchResultsDTO { private final String typeId; private final String displayName; private final List columns; - private final List items; + private final List items; private final long totalResultsCount; private final long startItem; - public BaseSearchResultsDTO(String typeId, String displayName, List columns, List items) { + public BaseSearchResultsDTO(String typeId, String displayName, List columns, List items) { this(typeId, displayName, columns, items, 0, items == null ? 0 : items.size()); } - public BaseSearchResultsDTO(String typeId, String displayName, List columns, List items, long startItem, long totalResultsCount) { + public BaseSearchResultsDTO(String typeId, String displayName, List columns, List items, long startItem, long totalResultsCount) { this.typeId = typeId; this.displayName = displayName; this.columns = columns; @@ -61,7 +61,7 @@ public class BaseSearchResultsDTO implements SearchResultsDTO { } @Override - public List getItems() { + public List getItems() { return items; } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowResultDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowDTO.java similarity index 92% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowResultDTO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowDTO.java index 9088e3a64a..7ec560f105 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowResultDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CountsRowDTO.java @@ -35,7 +35,7 @@ import org.openide.util.NbBundle.Messages; "CountsRowResultDTO_columns_count_displayName=Name", "CountsRowResultDTO_columns_count_description=Name" }) -public class CountsRowResultDTO implements RowResultDTO { +public class CountsRowDTO implements RowDTO { private static final String DEFAULT_TYPE_ID = "COUNTS"; @@ -55,11 +55,11 @@ public class CountsRowResultDTO implements RowResultDTO { private final List cellValues; private final String typeId; - public CountsRowResultDTO(long id, String displayName, long count) { + public CountsRowDTO(long id, String displayName, long count) { this(DEFAULT_TYPE_ID, id, displayName, count); } - public CountsRowResultDTO(String typeId, long id, String displayName, long count) { + public CountsRowDTO(String typeId, long id, String displayName, long count) { this.typeId = typeId; this.id = id; this.displayName = displayName; diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDataArtifactDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java similarity index 97% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDataArtifactDAO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java index d903f3873b..d8561e1ddb 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDataArtifactDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java @@ -65,7 +65,7 @@ import org.sleuthkit.datamodel.TskCoreException; "ThreePanelDataArtifactDAO.dataArtifact.columnKeys.dataSource.displayName=Data Source", "ThreePanelDataArtifactDAO.dataArtifact.columnKeys.dataSource.description=Data Source" }) -public class ThreePanelDataArtifactDAO { +public class DataArtifactDAO { // GVDTODO there is a different standard for normal attr strings and email attr strings private static final int STRING_LENGTH_MAX = 160; @@ -117,11 +117,11 @@ public class ThreePanelDataArtifactDAO { Bundle.ThreePanelDataArtifactDAO_dataArtifact_columnKeys_dataSource_description() ); - private static ThreePanelDataArtifactDAO instance = null; + private static DataArtifactDAO instance = null; - synchronized static ThreePanelDataArtifactDAO getInstance() { + synchronized static DataArtifactDAO getInstance() { if (instance == null) { - instance = new ThreePanelDataArtifactDAO(); + instance = new DataArtifactDAO(); } return instance; @@ -174,7 +174,7 @@ public class ThreePanelDataArtifactDAO { columnKeys.add(DATASOURCE_COL); // determine all different attribute types present as well as row data for each artifact - List rows = new ArrayList<>(); + List rows = new ArrayList<>(); for (DataArtifact artifact : arts) { List cellValues = new ArrayList<>(); @@ -204,7 +204,7 @@ public class ThreePanelDataArtifactDAO { boolean isTimelineSupported = isTimelineSupported(attrValues.keySet()); - rows.add(new DataArtifactTableDTO(artifact, srcContent, linkedFile, isTimelineSupported, cellValues, id)); + rows.add(new DataArtifactRowDTO(artifact, srcContent, linkedFile, isTimelineSupported, cellValues, id)); } return new DataArtifactTableSearchResultsDTO(artType, columnKeys, rows); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactRowDTO.java similarity index 88% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableDTO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactRowDTO.java index 79409c7bb8..760cea2794 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactRowDTO.java @@ -25,7 +25,7 @@ import org.sleuthkit.datamodel.DataArtifact; /** * A result for a data artifact. */ -public class DataArtifactTableDTO extends BaseRowResultDTO { +public class DataArtifactRowDTO extends BaseRowDTO { private static final String TYPE_ID = "DATA_ARTIFACT"; @@ -39,7 +39,7 @@ public class DataArtifactTableDTO extends BaseRowResultDTO { final Content linkedFile; final boolean isTimelineSupported; - public DataArtifactTableDTO(DataArtifact dataArtifact, Content srcContent, Content linkedFile, boolean isTimelineSupported, List cellValues, long id) { + public DataArtifactRowDTO(DataArtifact dataArtifact, Content srcContent, Content linkedFile, boolean isTimelineSupported, List cellValues, long id) { super(cellValues, TYPE_ID, id); this.dataArtifact = dataArtifact; this.srcContent = srcContent; diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactSearchParam.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactSearchParam.java index 7abee2ba2e..291cbed1ab 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactSearchParam.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactSearchParam.java @@ -24,7 +24,7 @@ import org.sleuthkit.datamodel.BlackboardArtifact; /** * Key for data artifact in order to retrieve data from DAO. */ -public class DataArtifactSearchParam { +public class DataArtifactSearchParam extends BaseSearchParam { private final BlackboardArtifact.Type artifactType; private final Long dataSourceId; @@ -33,6 +33,12 @@ public class DataArtifactSearchParam { this.dataSourceId = dataSourceId; } + public DataArtifactSearchParam(BlackboardArtifact.Type artifactType, Long dataSourceId, long startItem, Long maxResultsCount) { + super(startItem, maxResultsCount); + this.artifactType = artifactType; + this.dataSourceId = dataSourceId; + } + public BlackboardArtifact.Type getArtifactType() { return artifactType; } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableSearchResultsDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableSearchResultsDTO.java index ff6ccfca37..1436634b78 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableSearchResultsDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactTableSearchResultsDTO.java @@ -30,7 +30,7 @@ public class DataArtifactTableSearchResultsDTO extends BaseSearchResultsDTO { private final BlackboardArtifact.Type artifactType; - public DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type artifactType, List columns, List items) { + public DataArtifactTableSearchResultsDTO(BlackboardArtifact.Type artifactType, List columns, List items) { super(TYPE_ID, artifactType.getDisplayName(), columns, items); this.artifactType = artifactType; } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileRowDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileRowDTO.java index c4078b7e06..98d9da9cf6 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileRowDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileRowDTO.java @@ -25,7 +25,7 @@ import org.sleuthkit.datamodel.TskData; /** * DTO Representing an abstract file in the results view. */ -public class FileRowDTO extends BaseRowResultDTO { +public class FileRowDTO extends BaseRowDTO { public enum ExtensionMediaType { IMAGE, VIDEO, AUDIO, DOC, EXECUTABLE, TEXT, WEB, PDF, ARCHIVE, UNCATEGORIZED @@ -37,15 +37,18 @@ public class FileRowDTO extends BaseRowResultDTO { return TYPE_ID; } - final AbstractFile abstractFile; - final String fileName; - final String extension; - final ExtensionMediaType extensionMediaType; - final boolean allocated; - final TskData.TSK_DB_FILES_TYPE_ENUM fileType; - final boolean encryptionDetected; + private final AbstractFile abstractFile; + private final String fileName; + private final String extension; + private final ExtensionMediaType extensionMediaType; + private final boolean allocated; + private final TskData.TSK_DB_FILES_TYPE_ENUM fileType; + private final boolean encryptionDetected; + private final boolean visibleChildren; - public FileRowDTO(AbstractFile abstractFile, long id, String fileName, String extension, ExtensionMediaType extensionMediaType, boolean allocated, TskData.TSK_DB_FILES_TYPE_ENUM fileType, boolean encryptionDetected, List cellValues) { + public FileRowDTO(AbstractFile abstractFile, long id, String fileName, String extension, + ExtensionMediaType extensionMediaType, boolean allocated, TskData.TSK_DB_FILES_TYPE_ENUM fileType, + boolean encryptionDetected, boolean visibleChildren, List cellValues) { super(cellValues, TYPE_ID, id); this.abstractFile = abstractFile; this.fileName = fileName; @@ -54,6 +57,7 @@ public class FileRowDTO extends BaseRowResultDTO { this.allocated = allocated; this.fileType = fileType; this.encryptionDetected = encryptionDetected; + this.visibleChildren = visibleChildren; } public ExtensionMediaType getExtensionMediaType() { @@ -83,5 +87,8 @@ public class FileRowDTO extends BaseRowResultDTO { public String getFileName() { return fileName; } - + + public boolean hasVisibleChildren() { + return visibleChildren; + } } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileTypeExtensionsSearchParam.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileTypeExtensionsSearchParam.java index 54822962f2..bfb39ff0e4 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileTypeExtensionsSearchParam.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileTypeExtensionsSearchParam.java @@ -23,7 +23,7 @@ import java.util.Objects; /** * Key for accessing data about file type extensions from the DAO. */ -public class FileTypeExtensionsSearchParam { +public class FileTypeExtensionsSearchParam extends BaseSearchParam { private final FileExtSearchFilter filter; private final Long dataSourceId; @@ -37,6 +37,13 @@ public class FileTypeExtensionsSearchParam { this.knownShown = showKnown; } + public FileTypeExtensionsSearchParam(FileExtSearchFilter filter, Long dataSourceId, boolean knownShown, long startItem, Long maxResultsCount) { + super(startItem, maxResultsCount); + this.filter = filter; + this.dataSourceId = dataSourceId; + this.knownShown = knownShown; + } + public FileExtSearchFilter getFilter() { return filter; } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java similarity index 67% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDAO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java index 3d18b8f481..6093cccbc8 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java @@ -22,26 +22,26 @@ package org.sleuthkit.autopsy.mainui.datamodel; * Main entry point for DAO for providing data to populate the data results * viewer. */ -public class ThreePanelDAO { +public class MainDAO { - private static ThreePanelDAO instance = null; + private static MainDAO instance = null; - public synchronized static ThreePanelDAO getInstance() { + public synchronized static MainDAO getInstance() { if (instance == null) { - instance = new ThreePanelDAO(); + instance = new MainDAO(); } return instance; } - private final ThreePanelDataArtifactDAO dataArtifactDAO = ThreePanelDataArtifactDAO.getInstance(); - private final ThreePanelViewsDAO viewsDAO = ThreePanelViewsDAO.getInstance(); + private final DataArtifactDAO dataArtifactDAO = DataArtifactDAO.getInstance(); + private final ViewsDAO viewsDAO = ViewsDAO.getInstance(); - public ThreePanelDataArtifactDAO getDataArtifactsDAO() { + public DataArtifactDAO getDataArtifactsDAO() { return dataArtifactDAO; } - public ThreePanelViewsDAO getViewsDAO() { + public ViewsDAO getViewsDAO() { return viewsDAO; } } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowResultDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowDTO.java similarity index 96% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowResultDTO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowDTO.java index 14f768ec9f..ce0ad1b603 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowResultDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/RowDTO.java @@ -23,7 +23,7 @@ import java.util.List; /** * DTO representing an individual row in search results. */ -public interface RowResultDTO { +public interface RowDTO { List getCellValues(); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchParam.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchParam.java new file mode 100644 index 0000000000..b64103554b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchParam.java @@ -0,0 +1,30 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2021 Basis Technology Corp. + * Contact: carrier sleuthkit 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; + +/** + * Describes parameters to provide to the DAO for fetching data. + */ +public interface SearchParam { + + long getStartItem(); + + // null if no max defined + Long getMaxResultsCount(); +} diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchResultsDTO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchResultsDTO.java index c0dbab4d9d..8f9e4b9caa 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchResultsDTO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/SearchResultsDTO.java @@ -32,7 +32,7 @@ public interface SearchResultsDTO { List getColumns(); - List getItems(); + List getItems(); long getTotalResultsCount(); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelViewsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java similarity index 88% rename from Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelViewsDAO.java rename to Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java index ed764dc027..6feea44708 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ThreePanelViewsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java @@ -71,7 +71,7 @@ import org.sleuthkit.datamodel.TskData; "ThreePanelViewsDAO.fileColumns.mimeType=MIME Type", "ThreePanelViewsDAO.fileColumns.extensionColLbl=Extension", "ThreePanelViewsDAO.fileColumns.noDescription=No Description"}) -public class ThreePanelViewsDAO { +public class ViewsDAO { private static final String FILE_VIEW_EXT_TYPE_ID = "FILE_VIEW_BY_EXT"; @@ -89,26 +89,25 @@ public class ThreePanelViewsDAO { getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_sizeColLbl()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_flagsDirColLbl()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_flagsMetaColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_modeColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_useridColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_groupidColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_metaAddrColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_attrAddrColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_typeDirColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_typeMetaColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_modeColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_useridColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_groupidColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_metaAddrColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_attrAddrColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_typeDirColLbl()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_typeMetaColLbl()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_knownColLbl()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_md5HashColLbl()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_sha256HashColLbl()), -// getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_objectId()), + // getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_objectId()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_mimeType()), getFileColumnKey(Bundle.ThreePanelViewsDAO_fileColumns_extensionColLbl())); - - private static ThreePanelViewsDAO instance = null; + private static ViewsDAO instance = null; - synchronized static ThreePanelViewsDAO getInstance() { + synchronized static ViewsDAO getInstance() { if (instance == null) { - instance = new ThreePanelViewsDAO(); + instance = new ViewsDAO(); } return instance; @@ -207,12 +206,13 @@ public class ThreePanelViewsDAO { String whereStatement = getFileWhereStatement(filter, dataSourceId, showKnown); List files = getCase().findAllFilesWhere(whereStatement); - List fileRows = new ArrayList<>(); + List fileRows = new ArrayList<>(); for (AbstractFile file : files) { - boolean encryptionDetected = FileTypeExtensions.getArchiveExtensions().contains("." + file.getNameExtension().toLowerCase()) - && file.getArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_ENCRYPTION_DETECTED).size() > 0; - + boolean isArchive = FileTypeExtensions.getArchiveExtensions().contains("." + file.getNameExtension().toLowerCase()); + boolean encryptionDetected = isArchive && file.getArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_ENCRYPTION_DETECTED).size() > 0; + boolean hasVisibleChildren = isArchive || file.isDir(); + List cellValues = Arrays.asList( file.getName(), // GVDTODO handle . and .. from getContentDisplayName() // GVDTODO translation column @@ -229,21 +229,19 @@ public class ThreePanelViewsDAO { file.getSize(), file.getDirFlagAsString(), file.getMetaFlagsAsString(), - -// mode, -// userid, -// groupid, -// metaAddr, -// attrAddr, -// typeDir, -// typeMeta, - + // mode, + // userid, + // groupid, + // metaAddr, + // attrAddr, + // typeDir, + // typeMeta, + file.getKnown().getName(), StringUtils.defaultString(file.getMd5Hash()), StringUtils.defaultString(file.getSha256Hash()), - -// objectId, - + // objectId, + StringUtils.defaultString(file.getMIMEType()), file.getNameExtension() ); @@ -257,6 +255,7 @@ public class ThreePanelViewsDAO { file.isDirNameFlagSet(TskData.TSK_FS_NAME_FLAG_ENUM.ALLOC), file.getType(), encryptionDetected, + hasVisibleChildren, cellValues)); } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/nodes/DataArtifactNode.java b/Core/src/org/sleuthkit/autopsy/mainui/nodes/DataArtifactNode.java index 8ebd806e1c..7e840f0b10 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/nodes/DataArtifactNode.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/nodes/DataArtifactNode.java @@ -65,7 +65,7 @@ import org.sleuthkit.autopsy.directorytree.ExternalViewerShortcutAction; import org.sleuthkit.autopsy.directorytree.ExtractAction; import org.sleuthkit.autopsy.directorytree.NewWindowViewAction; import org.sleuthkit.autopsy.directorytree.ViewContextAction; -import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactTableDTO; +import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactRowDTO; import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactTableSearchResultsDTO; import org.sleuthkit.datamodel.DataArtifact; import org.sleuthkit.datamodel.DerivedFile; @@ -86,7 +86,7 @@ public class DataArtifactNode extends AbstractNode { private static final Logger logger = Logger.getLogger(DataArtifactNode.class.getName()); - private static Lookup createLookup(DataArtifactTableDTO row) { + private static Lookup createLookup(DataArtifactRowDTO row) { DataArtifactItem artifactItem = new DataArtifactItem(row.getDataArtifact(), row.getSrcContent()); if (row.getSrcContent() == null) { return Lookups.fixed(row.getDataArtifact(), artifactItem); @@ -96,14 +96,14 @@ public class DataArtifactNode extends AbstractNode { } private final BlackboardArtifact.Type artifactType; - private final DataArtifactTableDTO artifactRow; + private final DataArtifactRowDTO artifactRow; private final List columns; - public DataArtifactNode(DataArtifactTableSearchResultsDTO tableData, DataArtifactTableDTO artifactRow) { + public DataArtifactNode(DataArtifactTableSearchResultsDTO tableData, DataArtifactRowDTO artifactRow) { this(tableData, artifactRow, IconsUtil.getIconFilePath(tableData.getArtifactType().getTypeID())); } - public DataArtifactNode(DataArtifactTableSearchResultsDTO tableData, DataArtifactTableDTO artifactRow, String iconPath) { + public DataArtifactNode(DataArtifactTableSearchResultsDTO tableData, DataArtifactRowDTO artifactRow, String iconPath) { super(Children.LEAF, createLookup(artifactRow)); // use first cell value for display name diff --git a/Core/src/org/sleuthkit/autopsy/mainui/nodes/SearchResultChildFactory.java b/Core/src/org/sleuthkit/autopsy/mainui/nodes/SearchResultChildFactory.java index f9a5a8ae50..46ccd873cf 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/nodes/SearchResultChildFactory.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/nodes/SearchResultChildFactory.java @@ -27,12 +27,12 @@ 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.mainui.datamodel.DataArtifactTableDTO; +import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactRowDTO; import org.sleuthkit.autopsy.mainui.datamodel.DataArtifactTableSearchResultsDTO; import org.sleuthkit.autopsy.mainui.datamodel.FileRowDTO; import org.sleuthkit.autopsy.mainui.nodes.SearchResultChildFactory.ChildKey; -import org.sleuthkit.autopsy.mainui.datamodel.RowResultDTO; import org.sleuthkit.autopsy.mainui.datamodel.SearchResultsDTO; +import org.sleuthkit.autopsy.mainui.datamodel.RowDTO; /** * Factory for populating results in a results viewer with a SearchResultsDTO. @@ -64,8 +64,8 @@ public class SearchResultChildFactory extends ChildFactory { protected Node createNodeForKey(ChildKey key) { String typeId = key.getRow().getTypeId(); try { - if (DataArtifactTableDTO.getTypeIdForClass().equals(typeId)) { - return new DataArtifactNode((DataArtifactTableSearchResultsDTO) key.getSearchResults(), (DataArtifactTableDTO) key.getRow()); + if (DataArtifactRowDTO.getTypeIdForClass().equals(typeId)) { + return new DataArtifactNode((DataArtifactTableSearchResultsDTO) key.getSearchResults(), (DataArtifactRowDTO) key.getRow()); } else if (FileRowDTO.getTypeIdForClass().equals(typeId)) { return new FileNode(key.getSearchResults(), (FileRowDTO) key.getRow()); } else { @@ -90,9 +90,9 @@ public class SearchResultChildFactory extends ChildFactory { static class ChildKey { private final SearchResultsDTO searchResults; - private final RowResultDTO row; + private final RowDTO row; - ChildKey(SearchResultsDTO searchResults, RowResultDTO child) { + ChildKey(SearchResultsDTO searchResults, RowDTO child) { this.searchResults = searchResults; this.row = child; } @@ -101,7 +101,7 @@ public class SearchResultChildFactory extends ChildFactory { return searchResults; } - RowResultDTO getRow() { + RowDTO getRow() { return row; }