diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED index 16a5f738fb..6dd6851b03 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED @@ -45,6 +45,7 @@ AttachmentNode.getActions.openInExtViewer.text=Open in External Viewer Ctrl+E AttachmentNode.getActions.searchFilesSameMD5.text=Search for files with the same MD5 hash AttachmentNode.getActions.viewFileInDir.text=View File in Directory AttachmentNode.getActions.viewInNewWin.text=View in New Window +# {0} - node name BaseChildFactory.NoSuchEventBusException.message=No event bus for node: {0} BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details BlackboardArtifactNode.createSheet.artifactDetails.name=Result Details @@ -170,6 +171,23 @@ KeywordHits.kwHits.text=Keyword Hits KeywordHits.simpleLiteralSearch.text=Single Literal Keyword Search KeywordHits.singleRegexSearch.text=Single Regular Expression Search LayoutFileNode.getActions.viewFileInDir.text=View File in Directory +LocalFilesDataSourceNode.createSheet.deviceId.desc=Device ID of the image +LocalFilesDataSourceNode.createSheet.deviceId.displayName=Device ID +LocalFilesDataSourceNode.createSheet.deviceId.name=Device ID +LocalFilesDataSourceNode.createSheet.name.desc=no description +LocalFilesDataSourceNode.createSheet.name.displayName=Name +LocalFilesDataSourceNode.createSheet.name.name=Name +LocalFilesDataSourceNode.createSheet.noDesc=no description +LocalFilesDataSourceNode.createSheet.size.desc=Size of the data source in bytes. +LocalFilesDataSourceNode.createSheet.size.displayName=Size (Bytes) +LocalFilesDataSourceNode.createSheet.size.name=Size (Bytes) +LocalFilesDataSourceNode.createSheet.timezone.desc=Timezone of the image +LocalFilesDataSourceNode.createSheet.timezone.displayName=Timezone +LocalFilesDataSourceNode.createSheet.timezone.name=Timezone +LocalFilesDataSourceNode.createSheet.type.desc=Type of the image. +LocalFilesDataSourceNode.createSheet.type.displayName=Type +LocalFilesDataSourceNode.createSheet.type.name=Type +LocalFilesDataSourceNode.createSheet.type.text=Logical File Set OpenIDE-Module-Name=DataModel AbstractContentChildren.CreateTSKNodeVisitor.exception.noNodeMsg=No Node defined for the given SleuthkitItem AbstractContentChildren.createAutopsyNodeVisitor.exception.noNodeMsg=No Node defined for the given DisplayableItem @@ -271,10 +289,10 @@ ImageNode.getActions.viewInNewWin.text=View in New Window ImageNode.createSheet.name.name=Name ImageNode.createSheet.name.displayName=Name ImageNode.createSheet.name.desc=no description -Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null! -Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""! -Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed!\n\nDetails: {0} -Installer.tskLibErr.err=Fatal Error! +Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null\! +Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""\! +Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed\!\n\nDetails: {0} +Installer.tskLibErr.err=Fatal Error\! InterestingHits.interestingItems.text=INTERESTING ITEMS InterestingHits.displayName.text=Interesting Items InterestingHits.createSheet.name.name=Name @@ -377,19 +395,6 @@ ViewsNode.name.text=File Views ViewsNode.createSheet.name.name=Name ViewsNode.createSheet.name.displayName=Name ViewsNode.createSheet.name.desc=no description -VirtualDirectoryNode.createSheet.deviceId.desc=Device ID of the image -VirtualDirectoryNode.createSheet.deviceId.displayName=Device ID -VirtualDirectoryNode.createSheet.deviceId.name=Device ID -VirtualDirectoryNode.createSheet.size.desc=Size of the data source in bytes. -VirtualDirectoryNode.createSheet.size.displayName=Size (Bytes) -VirtualDirectoryNode.createSheet.size.name=Size (Bytes) -VirtualDirectoryNode.createSheet.timezone.desc=Timezone of the image -VirtualDirectoryNode.createSheet.timezone.displayName=Timezone -VirtualDirectoryNode.createSheet.timezone.name=Timezone -VirtualDirectoryNode.createSheet.type.desc=Type of the image. -VirtualDirectoryNode.createSheet.type.displayName=Type -VirtualDirectoryNode.createSheet.type.name=Type -VirtualDirectoryNode.createSheet.type.text=Logical File Set VirtualDirectoryNode.getActions.viewInNewWin.text=View in New Window VirtualDirectoryNode.createSheet.name.name=Name VirtualDirectoryNode.createSheet.name.displayName=Name diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java index 3f6706952a..e7ce03dd7d 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -55,6 +55,8 @@ interface ContentNodeVisitor { T visit(UnsupportedContentNode ucn); T visit(OsAccountNode bban); + + T visit(LocalFilesDataSourceNode lfdsn); /** * Visitor with an implementable default behavior for all types. Override @@ -137,5 +139,10 @@ interface ContentNodeVisitor { public T visit(OsAccountNode bban) { return defaultVisit(bban); } + + @Override + public T visit(LocalFilesDataSourceNode lfdsn) { + return defaultVisit(lfdsn); + } } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java index 7601f4a88c..00712fc99a 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java @@ -28,6 +28,7 @@ import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.LayoutFile; import org.sleuthkit.datamodel.LocalDirectory; import org.sleuthkit.datamodel.LocalFile; +import org.sleuthkit.datamodel.LocalFilesDataSource; import org.sleuthkit.datamodel.Pool; import org.sleuthkit.datamodel.SlackFile; import org.sleuthkit.datamodel.SleuthkitItemVisitor; @@ -111,4 +112,9 @@ public class CreateSleuthkitNodeVisitor extends SleuthkitItemVisitor.Default visit(LocalFilesDataSource ld) { + return new LocalFilesDataSourceNode(ld); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java index 5ee350da34..47db7732ea 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011 - 2018 Basis Technology Corp. + * Copyright 2011 - 2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -202,6 +202,8 @@ public interface DisplayableItemNodeVisitor { * Unsupported node */ T visit(UnsupportedContentNode ucn); + + T visit(LocalFilesDataSourceNode lfdsn); /** * Visitor with an implementable default behavior for all types. Override @@ -574,5 +576,10 @@ public interface DisplayableItemNodeVisitor { public T visit(UnsupportedContentNode node) { return defaultVisit(node); } + + @Override + public T visit(LocalFilesDataSourceNode node) { + return defaultVisit(node); + } } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/LocalFilesDataSourceNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFilesDataSourceNode.java new file mode 100755 index 0000000000..cd011898e9 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFilesDataSourceNode.java @@ -0,0 +1,99 @@ +/* + * 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.datamodel; + +import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; +import org.sleuthkit.datamodel.LocalFilesDataSource; + +/** + * + * + */ +public class LocalFilesDataSourceNode extends VirtualDirectoryNode { + + private final LocalFilesDataSource localFileDataSource; + + public LocalFilesDataSourceNode(LocalFilesDataSource ld) { + super(ld); + localFileDataSource = ld; + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/fileset-icon-16.png"); //NON-NLS + } + + @Override + @NbBundle.Messages({"LocalFilesDataSourceNode.createSheet.size.name=Size (Bytes)", + "LocalFilesDataSourceNode.createSheet.size.displayName=Size (Bytes)", + "LocalFilesDataSourceNode.createSheet.size.desc=Size of the data source in bytes.", + "LocalFilesDataSourceNode.createSheet.type.name=Type", + "LocalFilesDataSourceNode.createSheet.type.displayName=Type", + "LocalFilesDataSourceNode.createSheet.type.desc=Type of the image.", + "LocalFilesDataSourceNode.createSheet.type.text=Logical File Set", + "LocalFilesDataSourceNode.createSheet.timezone.name=Timezone", + "LocalFilesDataSourceNode.createSheet.timezone.displayName=Timezone", + "LocalFilesDataSourceNode.createSheet.timezone.desc=Timezone of the image", + "LocalFilesDataSourceNode.createSheet.deviceId.name=Device ID", + "LocalFilesDataSourceNode.createSheet.deviceId.displayName=Device ID", + "LocalFilesDataSourceNode.createSheet.deviceId.desc=Device ID of the image", + "LocalFilesDataSourceNode.createSheet.name.name=Name", + "LocalFilesDataSourceNode.createSheet.name.displayName=Name", + "LocalFilesDataSourceNode.createSheet.name.desc=no description", + "LocalFilesDataSourceNode.createSheet.noDesc=no description",}) + protected Sheet createSheet() { + Sheet sheet = new Sheet(); + Sheet.Set sheetSet = Sheet.createPropertiesSet(); + sheet.put(sheetSet); + + sheetSet.put(new NodeProperty<>(Bundle.LocalFilesDataSourceNode_createSheet_name_name(), + Bundle.LocalFilesDataSourceNode_createSheet_name_displayName(), + Bundle.LocalFilesDataSourceNode_createSheet_name_desc(), + getName())); + + sheetSet.put(new NodeProperty<>(Bundle.LocalFilesDataSourceNode_createSheet_type_name(), + Bundle.LocalFilesDataSourceNode_createSheet_type_displayName(), + Bundle.LocalFilesDataSourceNode_createSheet_type_desc(), + Bundle.LocalFilesDataSourceNode_createSheet_type_text())); + + sheetSet.put(new NodeProperty<>(Bundle.LocalFilesDataSourceNode_createSheet_size_name(), + Bundle.LocalFilesDataSourceNode_createSheet_size_displayName(), + Bundle.LocalFilesDataSourceNode_createSheet_size_desc(), + this.content.getSize())); + + sheetSet.put(new NodeProperty<>(Bundle.LocalFilesDataSourceNode_createSheet_timezone_name(), + Bundle.LocalFilesDataSourceNode_createSheet_timezone_displayName(), + Bundle.LocalFilesDataSourceNode_createSheet_timezone_desc(), + "")); + + sheetSet.put(new NodeProperty<>(Bundle.LocalFilesDataSourceNode_createSheet_deviceId_name(), + Bundle.LocalFilesDataSourceNode_createSheet_deviceId_displayName(), + Bundle.LocalFilesDataSourceNode_createSheet_deviceId_desc(), + localFileDataSource.getDeviceId())); + + return sheet; + } + + @Override + public T accept(ContentNodeVisitor visitor) { + return visitor.visit(this); + } + + @Override + public T accept(DisplayableItemNodeVisitor visitor) { + return visitor.visit(this); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java index 86aedbd0af..4092dc599f 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2019 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,16 +18,9 @@ */ package org.sleuthkit.autopsy.datamodel; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.logging.Level; import org.openide.nodes.Sheet; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.datamodel.SleuthkitCase; -import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.VirtualDirectory; /** @@ -47,76 +40,12 @@ public class VirtualDirectoryNode extends SpecialDirectoryNode { super(ld); this.setDisplayName(nameForVirtualDirectory(ld)); - - //set icon for name, special case for logical file set - if (ld.isDataSource()) { - this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/fileset-icon-16.png"); //NON-NLS - } else { - this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/folder-icon-virtual.png"); //TODO NON-NLS - } + + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/folder-icon-virtual.png"); //TODO NON-NLS } @Override - @NbBundle.Messages({"VirtualDirectoryNode.createSheet.size.name=Size (Bytes)", - "VirtualDirectoryNode.createSheet.size.displayName=Size (Bytes)", - "VirtualDirectoryNode.createSheet.size.desc=Size of the data source in bytes.", - "VirtualDirectoryNode.createSheet.type.name=Type", - "VirtualDirectoryNode.createSheet.type.displayName=Type", - "VirtualDirectoryNode.createSheet.type.desc=Type of the image.", - "VirtualDirectoryNode.createSheet.type.text=Logical File Set", - "VirtualDirectoryNode.createSheet.timezone.name=Timezone", - "VirtualDirectoryNode.createSheet.timezone.displayName=Timezone", - "VirtualDirectoryNode.createSheet.timezone.desc=Timezone of the image", - "VirtualDirectoryNode.createSheet.deviceId.name=Device ID", - "VirtualDirectoryNode.createSheet.deviceId.displayName=Device ID", - "VirtualDirectoryNode.createSheet.deviceId.desc=Device ID of the image"}) protected Sheet createSheet() { - //Do a special strategy for virtual directories.. - if(this.content.isDataSource()){ - Sheet sheet = new Sheet(); - Sheet.Set sheetSet = Sheet.createPropertiesSet(); - sheet.put(sheetSet); - - sheetSet.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.createSheet.name.name"), - NbBundle.getMessage(this.getClass(), - "VirtualDirectoryNode.createSheet.name.displayName"), - NbBundle.getMessage(this.getClass(), "VirtualDirectoryNode.createSheet.name.desc"), - getName())); - - sheetSet.put(new NodeProperty<>(Bundle.VirtualDirectoryNode_createSheet_type_name(), - Bundle.VirtualDirectoryNode_createSheet_type_displayName(), - Bundle.VirtualDirectoryNode_createSheet_type_desc(), - Bundle.VirtualDirectoryNode_createSheet_type_text())); - sheetSet.put(new NodeProperty<>(Bundle.VirtualDirectoryNode_createSheet_size_name(), - Bundle.VirtualDirectoryNode_createSheet_size_displayName(), - Bundle.VirtualDirectoryNode_createSheet_size_desc(), - this.content.getSize())); - try (SleuthkitCase.CaseDbQuery query = Case.getCurrentCaseThrows().getSleuthkitCase().executeQuery("SELECT time_zone FROM data_source_info WHERE obj_id = " + this.content.getId())) { - ResultSet timeZoneSet = query.getResultSet(); - if (timeZoneSet.next()) { - sheetSet.put(new NodeProperty<>(Bundle.VirtualDirectoryNode_createSheet_timezone_name(), - Bundle.VirtualDirectoryNode_createSheet_timezone_displayName(), - Bundle.VirtualDirectoryNode_createSheet_timezone_desc(), - timeZoneSet.getString("time_zone"))); - } - } catch (SQLException | TskCoreException | NoCurrentCaseException ex) { - logger.log(Level.SEVERE, "Failed to get time zone for the following image: " + this.content.getId(), ex); - } - try (SleuthkitCase.CaseDbQuery query = Case.getCurrentCaseThrows().getSleuthkitCase().executeQuery("SELECT device_id FROM data_source_info WHERE obj_id = " + this.content.getId());) { - ResultSet deviceIdSet = query.getResultSet(); - if (deviceIdSet.next()) { - sheetSet.put(new NodeProperty<>(Bundle.VirtualDirectoryNode_createSheet_deviceId_name(), - Bundle.VirtualDirectoryNode_createSheet_deviceId_displayName(), - Bundle.VirtualDirectoryNode_createSheet_deviceId_desc(), - deviceIdSet.getString("device_id"))); - } - } catch (SQLException | TskCoreException | NoCurrentCaseException ex) { - logger.log(Level.SEVERE, "Failed to get device id for the following image: " + this.content.getId(), ex); - } - return sheet; - } - - //Otherwise default to the AAFN createSheet method. Sheet defaultSheet = super.createSheet(); Sheet.Set defaultSheetSet = defaultSheet.get(Sheet.PROPERTIES);