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.HashMap;
 
   27 import java.util.List;
 
   28 import java.util.logging.Level;
 
   29 import org.openide.nodes.ChildFactory;
 
   30 import org.openide.nodes.Children;
 
   31 import org.openide.nodes.Node;
 
   32 import org.openide.nodes.Sheet;
 
   33 import org.openide.util.NbBundle;
 
   34 import org.openide.util.lookup.Lookups;
 
   40 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT;
 
   41 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
 
   42 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_GEN_INFO;
 
   43 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT;
 
   44 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT;
 
   45 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT;
 
   46 import static org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT;
 
   58     public static final String 
NAME = NbBundle.getMessage(
RootNode.class, 
"ExtractedContentNode.name.text");
 
   73     static String getIconFilePath(
int typeID) {
 
   74         String filePath = 
"org/sleuthkit/autopsy/images/"; 
 
   75         if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_BOOKMARK.getTypeID()) {
 
   76             return filePath + 
"bookmarks.png"; 
 
   77         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_COOKIE.getTypeID()) {
 
   78             return filePath + 
"cookies.png"; 
 
   79         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_HISTORY.getTypeID()) {
 
   80             return filePath + 
"history.png"; 
 
   81         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID()) {
 
   82             return filePath + 
"downloads.png"; 
 
   83         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_RECENT_OBJECT.getTypeID()) {
 
   84             return filePath + 
"recent_docs.png"; 
 
   85         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_TRACKPOINT.getTypeID()) {
 
   86             return filePath + 
"gps_trackpoint.png"; 
 
   87         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INSTALLED_PROG.getTypeID()) {
 
   88             return filePath + 
"programs.png"; 
 
   89         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_DEVICE_ATTACHED.getTypeID()) {
 
   90             return filePath + 
"usb_devices.png"; 
 
   91         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
 
   92             return filePath + 
"mail-icon-16.png"; 
 
   93         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXTRACTED_TEXT.getTypeID()) {
 
   94             return filePath + 
"text-file.png"; 
 
   95         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_SEARCH_QUERY.getTypeID()) {
 
   96             return filePath + 
"searchquery.png"; 
 
   97         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA_EXIF.getTypeID()) {
 
   98             return filePath + 
"camera-icon-16.png"; 
 
   99         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_OS_INFO.getTypeID()) {
 
  100             return filePath + 
"computer.png"; 
 
  101         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_SERVICE_ACCOUNT.getTypeID()) {
 
  102             return filePath + 
"account-icon-16.png"; 
 
  103         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CONTACT.getTypeID()) {
 
  104             return filePath + 
"contact.png"; 
 
  105         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID()) {
 
  106             return filePath + 
"message.png"; 
 
  107         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CALLLOG.getTypeID()) {
 
  108             return filePath + 
"calllog.png"; 
 
  109         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_CALENDAR_ENTRY.getTypeID()) {
 
  110             return filePath + 
"calendar.png"; 
 
  111         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_SPEED_DIAL_ENTRY.getTypeID()) {
 
  112             return filePath + 
"speeddialentry.png"; 
 
  113         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_BLUETOOTH_PAIRING.getTypeID()) {
 
  114             return filePath + 
"bluetooth.png"; 
 
  115         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_BOOKMARK.getTypeID()) {
 
  116             return filePath + 
"gpsfav.png"; 
 
  117         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_LAST_KNOWN_LOCATION.getTypeID()) {
 
  118             return filePath + 
"gps-lastlocation.png"; 
 
  119         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_SEARCH.getTypeID()) {
 
  120             return filePath + 
"gps-search.png"; 
 
  121         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID()) {
 
  122             return filePath + 
"installed.png"; 
 
  123         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_ENCRYPTION_DETECTED.getTypeID()) {
 
  124             return filePath + 
"encrypted-file.png"; 
 
  125         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()) {
 
  126             return filePath + 
"mismatch-16.png"; 
 
  127         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_GPS_ROUTE.getTypeID()) {
 
  128             return filePath + 
"gps_trackpoint.png"; 
 
  129         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_REMOTE_DRIVE.getTypeID()) {
 
  130             return filePath + 
"drive_network.png"; 
 
  131         } 
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_FACE_DETECTED.getTypeID()) {
 
  132             return filePath + 
"face.png"; 
 
  134         return filePath + 
"artifact-icon.png"; 
 
  140             super(Children.create(
new TypeFactory(), 
true), Lookups.singleton(NAME));
 
  142             super.setDisplayName(NAME);
 
  143             this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/extracted_content.png"); 
 
  153             return v.
visit(
this);
 
  158             Sheet s = super.createSheet();
 
  159             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  161                 ss = Sheet.createPropertiesSet();
 
  165             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"ExtractedContentNode.createSheet.name.name"),
 
  166                     NbBundle.getMessage(
this.getClass(), 
"ExtractedContentNode.createSheet.name.displayName"),
 
  167                     NbBundle.getMessage(
this.getClass(), 
"ExtractedContentNode.createSheet.name.desc"),
 
  188     private class TypeFactory extends ChildFactory.Detachable<BlackboardArtifact.Type> {
 
  190         private final ArrayList<BlackboardArtifact.Type> 
doNotShow = 
new ArrayList<>();
 
  198             doNotShow.add(
new BlackboardArtifact.Type(TSK_GEN_INFO));
 
  199             doNotShow.add(
new BlackboardArtifact.Type(TSK_EMAIL_MSG));
 
  200             doNotShow.add(
new BlackboardArtifact.Type(TSK_HASHSET_HIT));
 
  201             doNotShow.add(
new BlackboardArtifact.Type(TSK_KEYWORD_HIT));
 
  202             doNotShow.add(
new BlackboardArtifact.Type(TSK_INTERESTING_FILE_HIT));
 
  203             doNotShow.add(
new BlackboardArtifact.Type(TSK_INTERESTING_ARTIFACT_HIT));
 
  204             doNotShow.add(
new BlackboardArtifact.Type(TSK_ACCOUNT));
 
  207         private final PropertyChangeListener 
pcl = (PropertyChangeEvent evt) -> {
 
  208             String eventType = evt.getPropertyName();
 
  223                     if (null != event && !(this.
doNotShow.contains(event.getBlackboardArtifactType()))) {
 
  226                 } 
catch (IllegalStateException notUsed) {
 
  241                 } 
catch (IllegalStateException notUsed) {
 
  248                 if (evt.getNewValue() == null) {
 
  267             typeNodeList.clear();
 
  271         protected boolean createKeys(List<BlackboardArtifact.Type> list) {
 
  273             if (skCase != null) {
 
  275                     List<BlackboardArtifact.Type> types = skCase.getArtifactTypesInUse();
 
  277                     Collections.sort(types,
 
  278                             new Comparator<BlackboardArtifact.Type>() {
 
  280                         public int compare(BlackboardArtifact.Type a, BlackboardArtifact.Type b) {
 
  281                             return a.getDisplayName().compareTo(b.getDisplayName());
 
  288                     for (BlackboardArtifact.Type art : types) {
 
  289                         TypeNode node = typeNodeList.get(art);
 
  291                             node.updateDisplayName();
 
  294                 } 
catch (TskCoreException ex) {
 
  295                     Logger.
getLogger(
TypeFactory.class.getName()).log(Level.SEVERE, 
"Error getting list of artifacts in use: " + ex.getLocalizedMessage()); 
 
  304             typeNodeList.put(key, node);
 
  317         private BlackboardArtifact.Type 
type;
 
  322             super.setName(
type.getTypeName());
 
  328         final void updateDisplayName() {
 
  329             if (skCase == null) {
 
  337                 this.childCount = skCase.getBlackboardArtifactsTypeCount(
type.getTypeID());
 
  338             } 
catch (TskException ex) {
 
  339                 Logger.getLogger(TypeNode.class.getName())
 
  340                         .log(Level.WARNING, 
"Error getting child count", ex); 
 
  342             super.setDisplayName(
type.getDisplayName() + 
" \u200E(\u200E" + childCount + 
")\u200E");
 
  347             Sheet s = super.createSheet();
 
  348             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  350                 ss = Sheet.createPropertiesSet();
 
  354             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.artType.name"),
 
  355                     NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.artType.displayName"),
 
  356                     NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.artType.desc"),
 
  357                     type.getDisplayName()));
 
  359             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.childCnt.name"),
 
  360                     NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.childCnt.displayName"),
 
  361                     NbBundle.getMessage(
this.getClass(), 
"ArtifactTypeNode.createSheet.childCnt.desc"),
 
  369             return v.
visit(
this);
 
  393         private BlackboardArtifact.Type 
type;
 
  400         private final PropertyChangeListener 
pcl = 
new PropertyChangeListener() {
 
  402             public void propertyChange(PropertyChangeEvent evt) {
 
  403                 String eventType = evt.getPropertyName();
 
  420                         if (null != event && event.getBlackboardArtifactType().equals(
type)) {
 
  423                     } 
catch (IllegalStateException notUsed) {
 
  439                     } 
catch (IllegalStateException notUsed) {
 
  461         protected boolean createKeys(List<BlackboardArtifact> list) {
 
  462             if (skCase != null) {
 
  464                     List<BlackboardArtifact> arts = skCase.getBlackboardArtifacts(
type.getTypeID());
 
  466                 } 
catch (TskException ex) {
 
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized IngestManager getInstance()
static void removePropertyChangeListener(PropertyChangeListener listener)
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
void addIngestJobEventListener(final PropertyChangeListener listener)
static void addPropertyChangeListener(PropertyChangeListener listener)
void addIngestModuleEventListener(final PropertyChangeListener listener)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)