19 package org.sleuthkit.autopsy.datamodel;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.EnumSet;
26 import java.util.List;
28 import java.util.logging.Level;
29 import javax.swing.Action;
30 import org.apache.commons.lang3.tuple.Pair;
31 import org.openide.nodes.Sheet;
32 import org.openide.util.NbBundle;
33 import org.openide.util.NbBundle.Messages;
70 static String nameForImage(Image i) {
81 String imgName = nameForImage(img);
82 this.setDisplayName(imgName);
83 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/hard-drive-icon.jpg");
104 @Messages({
"ImageNode.action.runIngestMods.text=Run Ingest Modules",
105 "ImageNode.getActions.openFileSearchByAttr.text=Open File Search by Attributes"})
108 List<Action> actionsList =
new ArrayList<>();
109 for (Action a : super.getActions(
true)) {
113 actionsList.add(
new FileSearchAction(Bundle.ImageNode_getActions_openFileSearchByAttr_text()));
116 actionsList.add(
new NewWindowViewAction(NbBundle.getMessage(
this.getClass(),
"ImageNode.getActions.viewInNewWin.text"),
this));
118 return actionsList.toArray(
new Action[0]);
122 @Messages({
"ImageNode.createSheet.size.name=Size (Bytes)",
123 "ImageNode.createSheet.size.displayName=Size (Bytes)",
124 "ImageNode.createSheet.size.desc=Size of the data source in bytes.",
125 "ImageNode.createSheet.type.name=Type",
126 "ImageNode.createSheet.type.displayName=Type",
127 "ImageNode.createSheet.type.desc=Type of the image.",
128 "ImageNode.createSheet.type.text=Image",
129 "ImageNode.createSheet.sectorSize.name=Sector Size (Bytes)",
130 "ImageNode.createSheet.sectorSize.displayName=Sector Size (Bytes)",
131 "ImageNode.createSheet.sectorSize.desc=Sector size of the image in bytes.",
132 "ImageNode.createSheet.timezone.name=Timezone",
133 "ImageNode.createSheet.timezone.displayName=Timezone",
134 "ImageNode.createSheet.timezone.desc=Timezone of the image",
135 "ImageNode.createSheet.deviceId.name=Device ID",
136 "ImageNode.createSheet.deviceId.displayName=Device ID",
137 "ImageNode.createSheet.deviceId.desc=Device ID of the image"})
139 Sheet sheet = super.createSheet();
140 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
141 if (sheetSet == null) {
142 sheetSet = Sheet.createPropertiesSet();
146 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ImageNode.createSheet.name.name"),
147 NbBundle.getMessage(
this.getClass(),
"ImageNode.createSheet.name.displayName"),
148 NbBundle.getMessage(
this.getClass(),
"ImageNode.createSheet.name.desc"),
151 sheetSet.put(
new NodeProperty<>(Bundle.ImageNode_createSheet_type_name(),
152 Bundle.ImageNode_createSheet_type_displayName(),
153 Bundle.ImageNode_createSheet_type_desc(),
154 Bundle.ImageNode_createSheet_type_text()));
156 sheetSet.put(
new NodeProperty<>(Bundle.ImageNode_createSheet_size_name(),
157 Bundle.ImageNode_createSheet_size_displayName(),
158 Bundle.ImageNode_createSheet_size_desc(),
160 sheetSet.put(
new NodeProperty<>(Bundle.ImageNode_createSheet_sectorSize_name(),
161 Bundle.ImageNode_createSheet_sectorSize_displayName(),
162 Bundle.ImageNode_createSheet_sectorSize_desc(),
165 sheetSet.put(
new NodeProperty<>(Bundle.ImageNode_createSheet_timezone_name(),
166 Bundle.ImageNode_createSheet_timezone_displayName(),
167 Bundle.ImageNode_createSheet_timezone_desc(),
170 sheetSet.put(
new NodeProperty<>(Bundle.ImageNode_createSheet_deviceId_name(),
171 Bundle.ImageNode_createSheet_deviceId_displayName(),
172 Bundle.ImageNode_createSheet_deviceId_desc(),
179 public <T> T accept(ContentNodeVisitor<T> visitor) {
180 return visitor.visit(
this);
190 return visitor.
visit(
this);
195 return getClass().getName();
203 private final PropertyChangeListener
pcl = (PropertyChangeEvent evt) -> {
204 String eventType = evt.getPropertyName();
212 if ((moduleContentEvent.getSource() instanceof Content) ==
false) {
215 Content newContent = (Content) moduleContentEvent.getSource();
218 Content parent = newContent.getParent();
219 if (parent != null) {
221 if (parent.getName().equals(VirtualDirectory.NAME_CARVED)) {
223 if (newContent.getDataSource().getId() ==
getContent().getDataSource().getId()) {
226 while ((parent = parent.getParent()) != null) {
235 }
catch (TskCoreException ex) {
238 logger.log(Level.WARNING,
"Failed to post key refresh event.", ex);
241 if (evt.getNewValue() == null) {
257 return new ArrayList<>();
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized IngestManager getInstance()
static List< Action > getActions(Content c)
CorrelationAttributeInstance getCorrelationAttributeInstance()
Action[] getActions(boolean context)
Pair< Long, String > getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription)
final PropertyChangeListener pcl
T visit(DataSourceFilesNode in)
static void post(String nodeName, Object event)
static final Logger logger
DataResultViewerTable.HasCommentStatus getCommentProperty(List< Tag > tags, CorrelationAttributeInstance attribute)
void addIngestModuleEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
List< Tag > getAllTagsFromDatabase()
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static final Set< IngestManager.IngestModuleEvent > INGEST_MODULE_EVENTS_OF_INTEREST
static final String NO_DESCR