From fb8b9e1d7e794edfd22f6c013c5d8f934f298320 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Thu, 7 Nov 2019 14:35:29 -0500 Subject: [PATCH 1/4] Created PoolNode --- .../autopsy/datamodel/ContentNodeVisitor.java | 7 + .../datamodel/CreateSleuthkitNodeVisitor.java | 6 + .../datamodel/DisplayableItemNodeVisitor.java | 7 + .../sleuthkit/autopsy/datamodel/PoolNode.java | 261 ++++++++++++++++++ .../sleuthkit/autopsy/images/pool-icon.png | Bin 0 -> 293 bytes .../ingest/GetFilesContentVisitor.java | 6 + 6 files changed, 287 insertions(+) create mode 100644 Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java create mode 100644 Core/src/org/sleuthkit/autopsy/images/pool-icon.png diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java index 2277cb4b56..af7eb3a249 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentNodeVisitor.java @@ -35,6 +35,8 @@ interface ContentNodeVisitor { T visit(LocalDirectoryNode ldn); T visit(VolumeNode vn); + + T visit(PoolNode pn); T visit(DirectoryNode dn); @@ -85,6 +87,11 @@ interface ContentNodeVisitor { public T visit(VolumeNode vn) { return defaultVisit(vn); } + + @Override + public T visit(PoolNode pn) { + return defaultVisit(pn); + } @Override public T visit(LayoutFileNode lcn) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/CreateSleuthkitNodeVisitor.java index d9ff5fc33b..b5d808153d 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.Pool; import org.sleuthkit.datamodel.SlackFile; import org.sleuthkit.datamodel.SleuthkitItemVisitor; import org.sleuthkit.datamodel.SleuthkitVisitableItem; @@ -58,6 +59,11 @@ public class CreateSleuthkitNodeVisitor extends SleuthkitItemVisitor.Default visit(Volume volume) { return new VolumeNode(volume); } + + @Override + public AbstractContentNode visit(Pool pool) { + return new PoolNode(pool); + } @Override public AbstractContentNode visit(LayoutFile lf) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java index bb324bc7bb..6246a212a7 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java @@ -59,6 +59,8 @@ public interface DisplayableItemNodeVisitor { T visit(ImageNode in); T visit(VolumeNode vn); + + T visit(PoolNode pn); T visit(SlackFileNode sfn); @@ -257,6 +259,11 @@ public interface DisplayableItemNodeVisitor { public T visit(ImageNode in) { return defaultVisit(in); } + + @Override + public T visit(PoolNode pn) { + return defaultVisit(pn); + } @Override public T visit(VolumeNode vn) { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java new file mode 100644 index 0000000000..7fde1902c7 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java @@ -0,0 +1,261 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 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 java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import javax.swing.Action; +import org.apache.commons.lang3.tuple.Pair; +import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; +import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; +import org.sleuthkit.autopsy.coreutils.Logger; +import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR; +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.TskCoreException; +import org.sleuthkit.datamodel.VirtualDirectory; +import org.sleuthkit.datamodel.Pool; +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 PoolNode extends AbstractContentNode { + + private static final Logger logger = Logger.getLogger(PoolNode.class.getName()); + private static final Set INGEST_MODULE_EVENTS_OF_INTEREST = EnumSet.of(IngestManager.IngestModuleEvent.CONTENT_CHANGED); + + /** + * Helper so that the display name and the name used in building the path + * are determined the same way. + * + * @param vol Volume to get the name of + * + * @return short name for the Volume + */ + static String nameForPool(Pool pool) { + return "pool!!!"; // TODO + Long.toString(pool.getAddr()); //NON-NLS + } + + /** + * + * @param pool underlying Content instance + */ + public PoolNode(Pool pool) { + super(pool); + + // set name, display name, and icon + String poolName = nameForPool(pool); + + this.setDisplayName(poolName); + + this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/pool-icon.png"); //NON-NLS + // Listen for ingest events so that we can detect new added files (e.g. carved) + IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS_OF_INTEREST, pcl); + // Listen for case events so that we can detect when case is closed + Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), pcl); + } + + private void removeListeners() { + IngestManager.getInstance().removeIngestModuleEventListener(pcl); + Case.removeEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), pcl); + } + + /* + * This property change listener refreshes the tree when a new file is + * carved out of the unallocated space of this volume. + */ + private final PropertyChangeListener pcl = (PropertyChangeEvent evt) -> { + String eventType = evt.getPropertyName(); + + if (eventType.equals(Case.Events.CURRENT_CASE.toString())) { + if (evt.getNewValue() == null) { + // case was closed. Remove listeners so that we don't get called with a stale case handle + removeListeners(); + } + } + }; + + /** + * Right click action for volume node + * + * @param popup + * + * @return + */ + @Override + public Action[] getActions(boolean popup) { + List actionsList = new ArrayList<>(); + + for (Action a : super.getActions(true)) { + actionsList.add(a); + } + /* + actionsList.add(new FileSystemDetailsAction(content)); + actionsList.add(new NewWindowViewAction( + NbBundle.getMessage(this.getClass(), "VolumeNode.getActions.viewInNewWin.text"), this)); + actionsList.addAll(ExplorerNodeActionVisitor.getActions(content)); +*/ // TODO! + 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); + } +// TODO + 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; + } + + @Override + public T accept(ContentNodeVisitor visitor) { + return visitor.visit(this); + } + + @Override + public boolean isLeafTypeNode() { + return false; + } + + @Override + public T accept(DisplayableItemNodeVisitor visitor) { + return visitor.visit(this); + } + + @Override + public String getItemType() { + return DisplayableItemNode.FILE_PARENT_NODE_KEY; + } + + /** + * Reads and returns a list of all tags associated with this content node. + * + * Null implementation of an abstract method. + * + * @return list of tags associated with the node. + */ + @Override + protected List getAllTagsFromDatabase() { + return new ArrayList<>(); + } + + /** + * Returns correlation attribute instance for the underlying content of the + * node. + * + * Null implementation of an abstract method. + * + * @return correlation attribute instance for the underlying content of the + * node. + */ + @Override + protected CorrelationAttributeInstance getCorrelationAttributeInstance() { + return null; + } + + /** + * Returns Score property for the node. + * + * Null implementation of an abstract method. + * + * @param tags list of tags. + * + * @return Score property for the underlying content of the node. + */ + @Override + protected Pair getScorePropertyAndDescription(List tags) { + return Pair.of(DataResultViewerTable.Score.NO_SCORE, NO_DESCR); + } + + /** + * Returns comment property for the node. + * + * Null implementation of an abstract method. + * + * @param tags list of tags + * @param attribute correlation attribute instance + * + * @return Comment property for the underlying content of the node. + */ + @Override + protected DataResultViewerTable.HasCommentStatus getCommentProperty(List tags, CorrelationAttributeInstance attribute) { + return DataResultViewerTable.HasCommentStatus.NO_COMMENT; + } + + /** + * Returns occurrences/count property for the node. + * + * Null implementation of an abstract method. + * + * @param attributeType the type of the attribute to count + * @param attributeValue the value of the attribute to coun + * @param defaultDescription a description to use when none is determined by + * the getCountPropertyAndDescription method + * + * @return count property for the underlying content of the node. + */ + @Override + protected Pair getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) { + return Pair.of(-1L, NO_DESCR); + } +} diff --git a/Core/src/org/sleuthkit/autopsy/images/pool-icon.png b/Core/src/org/sleuthkit/autopsy/images/pool-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f093b965bbea1d8cb4604b5f55d1ff6843562631 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!Cjs%jv*HQXD2H1F$MCl?srnMWD@FhS?5y3 zq9WAktTa)3qD-T*!bA@hAzow8ZUx0Z0v_K~CojFb^li5H^DQmTHq~lQwHb-*&cg4v zv{e^039hhAx#uMRl*N2UldIGTChirNxc)ec%{;)fD#cy>#Jb2OUV56x%hjv)x!5%P zKe4XtQ%m)XrrF=OTYg`-HuuQ9VjlmeGo&q?s visit(VolumeSystem vs) { return getAllFromChildren(vs); } + + @Override + public Collection visit(Pool pool) { + return getAllFromChildren(pool); + } @Override public Collection visit(Report r) { From 771ec7df96c933e244ff7204735db3dcbbe3310e Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Fri, 15 Nov 2019 08:57:04 -0500 Subject: [PATCH 2/4] Cleanup --- .../datamodel/Bundle.properties-MERGED | 17 ++- .../sleuthkit/autopsy/datamodel/PoolNode.java | 105 +++++------------- 2 files changed, 42 insertions(+), 80 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED index 0e0df5a58c..ae4211741a 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Bundle.properties-MERGED @@ -268,10 +268,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 @@ -301,6 +301,15 @@ OpenReportAction.actionPerformed.NoAssociatedEditorMessage=There is no associate OpenReportAction.actionPerformed.NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way. OpenReportAction.actionPerformed.MissingReportFileMessage=The report file no longer exists. OpenReportAction.actionPerformed.ReportFileOpenPermissionDeniedMessage=Permission to open the report file was denied. +PoolNode.createSheet.name.desc=no description +PoolNode.createSheet.name.displayName=Name +PoolNode.createSheet.name.name=Name +PoolNode.createSheet.offset.desc=no description +PoolNode.createSheet.offset.displayName=Starting offset +PoolNode.createSheet.offset.name=Starting offset +PoolNode.createSheet.type.desc=no description +PoolNode.createSheet.type.displayName=Type +PoolNode.createSheet.type.name=Type RecentFiles.aut0DayFilter.displayName.text=Final Day RecentFiles.aut1dayFilter.displayName.text=Final Day - 1 RecentFiles.aut2dayFilter.displayName.text=Final Day - 2 diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java index 7fde1902c7..576641f167 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java @@ -18,53 +18,36 @@ */ package org.sleuthkit.autopsy.datamodel; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.EnumSet; import java.util.List; -import java.util.Set; -import java.util.logging.Level; import javax.swing.Action; import org.apache.commons.lang3.tuple.Pair; import org.openide.nodes.Sheet; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; import org.sleuthkit.autopsy.coreutils.Logger; import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR; -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.TskCoreException; -import org.sleuthkit.datamodel.VirtualDirectory; import org.sleuthkit.datamodel.Pool; -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 + * This class is used to represent the "Node" for the pool. */ public class PoolNode extends AbstractContentNode { private static final Logger logger = Logger.getLogger(PoolNode.class.getName()); - private static final Set INGEST_MODULE_EVENTS_OF_INTEREST = EnumSet.of(IngestManager.IngestModuleEvent.CONTENT_CHANGED); /** * Helper so that the display name and the name used in building the path * are determined the same way. * - * @param vol Volume to get the name of + * @param pool Pool to get the name of * - * @return short name for the Volume + * @return short name for the pool */ static String nameForPool(Pool pool) { - return "pool!!!"; // TODO + Long.toString(pool.getAddr()); //NON-NLS + return pool.getType().getName(); } /** @@ -76,36 +59,11 @@ public class PoolNode extends AbstractContentNode { // set name, display name, and icon String poolName = nameForPool(pool); - this.setDisplayName(poolName); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/pool-icon.png"); //NON-NLS - // Listen for ingest events so that we can detect new added files (e.g. carved) - IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS_OF_INTEREST, pcl); - // Listen for case events so that we can detect when case is closed - Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), pcl); } - private void removeListeners() { - IngestManager.getInstance().removeIngestModuleEventListener(pcl); - Case.removeEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), pcl); - } - - /* - * This property change listener refreshes the tree when a new file is - * carved out of the unallocated space of this volume. - */ - private final PropertyChangeListener pcl = (PropertyChangeEvent evt) -> { - String eventType = evt.getPropertyName(); - - if (eventType.equals(Case.Events.CURRENT_CASE.toString())) { - if (evt.getNewValue() == null) { - // case was closed. Remove listeners so that we don't get called with a stale case handle - removeListeners(); - } - } - }; - /** * Right click action for volume node * @@ -120,16 +78,22 @@ public class PoolNode extends AbstractContentNode { for (Action a : super.getActions(true)) { actionsList.add(a); } - /* - actionsList.add(new FileSystemDetailsAction(content)); - actionsList.add(new NewWindowViewAction( - NbBundle.getMessage(this.getClass(), "VolumeNode.getActions.viewInNewWin.text"), this)); - actionsList.addAll(ExplorerNodeActionVisitor.getActions(content)); -*/ // TODO! + return actionsList.toArray(new Action[actionsList.size()]); } + @NbBundle.Messages({ + "PoolNode.createSheet.name.name=Name", + "PoolNode.createSheet.name.displayName=Name", + "PoolNode.createSheet.name.desc=no description", + "PoolNode.createSheet.offset.name=Starting offset", + "PoolNode.createSheet.offset.displayName=Starting offset", + "PoolNode.createSheet.offset.desc=no description", + "PoolNode.createSheet.type.name=Type", + "PoolNode.createSheet.type.displayName=Type", + "PoolNode.createSheet.type.desc=no description", + }) @Override protected Sheet createSheet() { Sheet sheet = super.createSheet(); @@ -138,31 +102,20 @@ public class PoolNode extends AbstractContentNode { sheetSet = Sheet.createPropertiesSet(); sheet.put(sheetSet); } -// TODO - 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"), + + Pool pool = this.getContent(); + sheetSet.put(new NodeProperty<>(Bundle.PoolNode_createSheet_name_name(), + Bundle.PoolNode_createSheet_name_displayName(), + Bundle.PoolNode_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()));*/ + sheetSet.put(new NodeProperty<>(Bundle.PoolNode_createSheet_offset_name(), + Bundle.PoolNode_createSheet_offset_displayName(), + Bundle.PoolNode_createSheet_offset_desc(), + pool.getOffset())); + sheetSet.put(new NodeProperty<>(Bundle.PoolNode_createSheet_type_name(), + Bundle.PoolNode_createSheet_type_displayName(), + Bundle.PoolNode_createSheet_type_desc(), + pool.getType().getName())); return sheet; } From c1f8efba5f3dade2775a313eacba34bbe8f0dc30 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Wed, 20 Nov 2019 11:20:06 -0500 Subject: [PATCH 3/4] Changed pool icon --- .../org/sleuthkit/autopsy/images/pool-icon.png | Bin 293 -> 3188 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/images/pool-icon.png b/Core/src/org/sleuthkit/autopsy/images/pool-icon.png index f093b965bbea1d8cb4604b5f55d1ff6843562631..7300066c2d639500f74e86f78e79c4d2e1224472 100644 GIT binary patch delta 3183 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 VzoMdQWZ?h+002ovPDHLkV1m-E9j5>Q delta 266 zcmV+l0rmd$7^MP`B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pFx=BPqR5(w~ks%HOQ49sYLLxZ=5{X2vL~;Zq5{W}1kt>lLfg>Q1 zNF)*sGf9geA^Z?X_9c_0-KFhoOXswNLp*yXLVajq2SXF@w10+saDox2Ib_~KALRr$ zxPnC*$N~$f(hB@T7MZ{ds$@qe$gWwWN-inKcPDzjL_C21$gXzsgnO8RoAn+a From 4b20b1f05fd6cff23b74c6f4d14de79e284e687d Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Mon, 25 Nov 2019 12:35:42 -0500 Subject: [PATCH 4/4] Change item type key. Remove unused logger. --- Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java index 576641f167..81e057d438 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/PoolNode.java @@ -26,7 +26,6 @@ import org.openide.nodes.Sheet; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; -import org.sleuthkit.autopsy.coreutils.Logger; import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR; import org.sleuthkit.datamodel.Pool; import org.sleuthkit.datamodel.Tag; @@ -36,8 +35,6 @@ import org.sleuthkit.datamodel.Tag; */ public class PoolNode extends AbstractContentNode { - private static final Logger logger = Logger.getLogger(PoolNode.class.getName()); - /** * Helper so that the display name and the name used in building the path * are determined the same way. @@ -137,7 +134,7 @@ public class PoolNode extends AbstractContentNode { @Override public String getItemType() { - return DisplayableItemNode.FILE_PARENT_NODE_KEY; + return getClass().getName(); } /**