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.Comparator;
26 import java.util.EnumSet;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.logging.Level;
30 import org.openide.nodes.ChildFactory;
31 import org.openide.nodes.Children;
32 import org.openide.nodes.Node;
33 import org.openide.nodes.Sheet;
34 import org.openide.util.NbBundle;
35 import org.openide.util.lookup.Lookups;
41 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT;
42 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
43 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_GEN_INFO;
44 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT;
45 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT;
46 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT;
47 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT;
59 public static final String
NAME = NbBundle.getMessage(
RootNode.class,
"ExtractedContentNode.name.text");
74 static String getIconFilePath(
int typeID) {
75 String filePath =
"org/sleuthkit/autopsy/images/";
76 if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_BOOKMARK.getTypeID()) {
77 return filePath +
"bookmarks.png";
78 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_COOKIE.getTypeID()) {
79 return filePath +
"cookies.png";
80 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_HISTORY.getTypeID()) {
81 return filePath +
"history.png";
82 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID()) {
83 return filePath +
"downloads.png";
84 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_RECENT_OBJECT.getTypeID()) {
85 return filePath +
"recent_docs.png";
86 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_TRACKPOINT.getTypeID()) {
87 return filePath +
"gps_trackpoint.png";
88 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INSTALLED_PROG.getTypeID()) {
89 return filePath +
"programs.png";
90 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_DEVICE_ATTACHED.getTypeID()) {
91 return filePath +
"usb_devices.png";
92 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
93 return filePath +
"mail-icon-16.png";
94 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXTRACTED_TEXT.getTypeID()) {
95 return filePath +
"text-file.png";
96 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_SEARCH_QUERY.getTypeID()) {
97 return filePath +
"searchquery.png";
98 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA_EXIF.getTypeID()) {
99 return filePath +
"camera-icon-16.png";
100 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_OS_INFO.getTypeID()) {
101 return filePath +
"computer.png";
102 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_SERVICE_ACCOUNT.getTypeID()) {
103 return filePath +
"account-icon-16.png";
104 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CONTACT.getTypeID()) {
105 return filePath +
"contact.png";
106 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID()) {
107 return filePath +
"message.png";
108 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CALLLOG.getTypeID()) {
109 return filePath +
"calllog.png";
110 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CALENDAR_ENTRY.getTypeID()) {
111 return filePath +
"calendar.png";
112 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_SPEED_DIAL_ENTRY.getTypeID()) {
113 return filePath +
"speeddialentry.png";
114 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_BLUETOOTH_PAIRING.getTypeID()) {
115 return filePath +
"bluetooth.png";
116 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_BOOKMARK.getTypeID()) {
117 return filePath +
"gpsfav.png";
118 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_LAST_KNOWN_LOCATION.getTypeID()) {
119 return filePath +
"gps-lastlocation.png";
120 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_SEARCH.getTypeID()) {
121 return filePath +
"gps-search.png";
122 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID()) {
123 return filePath +
"installed.png";
124 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_ENCRYPTION_DETECTED.getTypeID()) {
125 return filePath +
"encrypted-file.png";
126 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()) {
127 return filePath +
"mismatch-16.png";
128 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_ROUTE.getTypeID()) {
129 return filePath +
"gps_trackpoint.png";
130 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_REMOTE_DRIVE.getTypeID()) {
131 return filePath +
"drive_network.png";
132 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_FACE_DETECTED.getTypeID()) {
133 return filePath +
"face.png";
135 return filePath +
"artifact-icon.png";
141 super(Children.create(
new TypeFactory(),
true), Lookups.singleton(NAME));
143 super.setDisplayName(NAME);
144 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/extracted_content.png");
154 return v.
visit(
this);
159 Sheet s = super.createSheet();
160 Sheet.Set ss = s.get(Sheet.PROPERTIES);
162 ss = Sheet.createPropertiesSet();
166 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ExtractedContentNode.createSheet.name.name"),
167 NbBundle.getMessage(
this.getClass(),
"ExtractedContentNode.createSheet.name.displayName"),
168 NbBundle.getMessage(
this.getClass(),
"ExtractedContentNode.createSheet.name.desc"),
175 return getClass().getName();
184 private class TypeFactory extends ChildFactory.Detachable<BlackboardArtifact.Type> {
186 private final ArrayList<BlackboardArtifact.Type>
doNotShow =
new ArrayList<>();
194 doNotShow.add(
new BlackboardArtifact.Type(TSK_GEN_INFO));
195 doNotShow.add(
new BlackboardArtifact.Type(TSK_EMAIL_MSG));
196 doNotShow.add(
new BlackboardArtifact.Type(TSK_HASHSET_HIT));
197 doNotShow.add(
new BlackboardArtifact.Type(TSK_KEYWORD_HIT));
198 doNotShow.add(
new BlackboardArtifact.Type(TSK_INTERESTING_FILE_HIT));
199 doNotShow.add(
new BlackboardArtifact.Type(TSK_INTERESTING_ARTIFACT_HIT));
200 doNotShow.add(
new BlackboardArtifact.Type(TSK_ACCOUNT));
203 private final PropertyChangeListener
pcl = (PropertyChangeEvent evt) -> {
204 String eventType = evt.getPropertyName();
219 if (null != event && !(this.
doNotShow.contains(event.getBlackboardArtifactType()))) {
222 }
catch (IllegalStateException notUsed) {
237 }
catch (IllegalStateException notUsed) {
244 if (evt.getNewValue() == null) {
263 typeNodeList.clear();
267 protected boolean createKeys(List<BlackboardArtifact.Type> list) {
269 if (skCase != null) {
271 List<BlackboardArtifact.Type> types = skCase.getArtifactTypesInUse();
273 Collections.sort(types,
274 new Comparator<BlackboardArtifact.Type>() {
276 public int compare(BlackboardArtifact.Type a, BlackboardArtifact.Type b) {
277 return a.getDisplayName().compareTo(b.getDisplayName());
284 for (BlackboardArtifact.Type art : types) {
285 TypeNode node = typeNodeList.get(art);
287 node.updateDisplayName();
290 }
catch (TskCoreException ex) {
291 Logger.
getLogger(
TypeFactory.class.getName()).log(Level.SEVERE,
"Error getting list of artifacts in use: " + ex.getLocalizedMessage());
300 typeNodeList.put(key, node);
313 private final BlackboardArtifact.Type
type;
318 super.setName(
type.getTypeName());
324 final void updateDisplayName() {
325 if (skCase == null) {
333 this.childCount = skCase.getBlackboardArtifactsTypeCount(
type.getTypeID());
334 }
catch (TskException ex) {
335 Logger.getLogger(TypeNode.class.getName())
336 .log(Level.WARNING,
"Error getting child count", ex);
338 super.setDisplayName(
type.getDisplayName() +
" \u200E(\u200E" + childCount +
")\u200E");
343 Sheet s = super.createSheet();
344 Sheet.Set ss = s.get(Sheet.PROPERTIES);
346 ss = Sheet.createPropertiesSet();
350 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.artType.name"),
351 NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.artType.displayName"),
352 NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.artType.desc"),
353 type.getDisplayName()));
355 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.childCnt.name"),
356 NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.childCnt.displayName"),
357 NbBundle.getMessage(
this.getClass(),
"ArtifactTypeNode.createSheet.childCnt.desc"),
365 return v.
visit(
this);
375 return getClass().getName() +
type.getDisplayName();
384 private BlackboardArtifact.Type
type;
391 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
393 public void propertyChange(PropertyChangeEvent evt) {
394 String eventType = evt.getPropertyName();
411 if (null != event && event.getBlackboardArtifactType().equals(
type)) {
414 }
catch (IllegalStateException notUsed) {
430 }
catch (IllegalStateException notUsed) {
452 protected boolean createKeys(List<BlackboardArtifact> list) {
453 if (skCase != null) {
455 List<BlackboardArtifact> arts = skCase.getBlackboardArtifacts(
type.getTypeID());
457 }
catch (TskException ex) {
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized IngestManager getInstance()
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
void addIngestJobEventListener(final PropertyChangeListener listener)
void addIngestModuleEventListener(final PropertyChangeListener listener)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)