19 package org.sleuthkit.autopsy.datamodel;
 
   21 import java.beans.PropertyChangeEvent;
 
   22 import java.beans.PropertyChangeListener;
 
   23 import java.sql.ResultSet;
 
   24 import java.sql.SQLException;
 
   25 import java.util.ArrayList;
 
   26 import java.util.Collections;
 
   27 import java.util.HashMap;
 
   28 import java.util.HashSet;
 
   29 import java.util.LinkedHashMap;
 
   30 import java.util.List;
 
   32 import java.util.Observable;
 
   33 import java.util.Observer;
 
   35 import java.util.logging.Level;
 
   36 import org.openide.nodes.ChildFactory;
 
   37 import org.openide.nodes.Children;
 
   38 import org.openide.nodes.Node;
 
   39 import org.openide.nodes.Sheet;
 
   40 import org.openide.util.NbBundle;
 
   41 import org.openide.util.lookup.Lookups;
 
   55             .getMessage(
InterestingHits.class, 
"InterestingHits.interestingItems.text");
 
   63         interestingResults.
update();
 
   72             List<String> setNames;
 
   74                 setNames = 
new ArrayList<>(interestingItemsMap.keySet());
 
   76             Collections.sort(setNames);
 
   82                 return interestingItemsMap.get(setName);
 
   88                 interestingItemsMap.clear();
 
  100         @SuppressWarnings(
"deprecation")
 
  102             if (skCase == null) {
 
  107             int artId = artType.getTypeID();
 
  108             String query = 
"SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id "  
  109                     + 
"FROM blackboard_attributes,blackboard_artifacts WHERE "  
  110                     + 
"attribute_type_id=" + setNameId 
 
  111                     + 
" AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id"  
  112                     + 
" AND blackboard_artifacts.artifact_type_id=" + artId; 
 
  116                     ResultSet resultSet = dbQuery.getResultSet();
 
  117                     while (resultSet.next()) {
 
  118                         String value = resultSet.getString(
"value_text"); 
 
  119                         long artifactId = resultSet.getLong(
"artifact_id"); 
 
  120                         if (!interestingItemsMap.containsKey(value)) {
 
  121                             interestingItemsMap.put(value, 
new HashSet<>());
 
  123                         interestingItemsMap.get(value).add(artifactId);
 
  127                 logger.log(Level.WARNING, 
"SQL Exception occurred: ", ex); 
 
  134         return v.
visit(
this);
 
  143             super(Children.create(
new SetNameFactory(), 
true), Lookups.singleton(DISPLAY_NAME));
 
  144             super.setName(INTERESTING_ITEMS);
 
  145             super.setDisplayName(DISPLAY_NAME);
 
  146             this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png"); 
 
  156             return v.
visit(
this);
 
  161             Sheet s = super.createSheet();
 
  162             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  164                 ss = Sheet.createPropertiesSet();
 
  168             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.name"),
 
  169                     NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.displayName"),
 
  170                     NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.desc"),
 
  178             return getClass().getName();
 
  182     private class SetNameFactory extends ChildFactory.Detachable<String> implements Observer {
 
  189         private final PropertyChangeListener 
pcl = 
new PropertyChangeListener() {
 
  191             public void propertyChange(PropertyChangeEvent evt) {
 
  192                 String eventType = evt.getPropertyName();
 
  211                             interestingResults.
update();
 
  213                     } 
catch (IllegalStateException notUsed) {
 
  228                         interestingResults.
update();
 
  229                     } 
catch (IllegalStateException notUsed) {
 
  236                     if (evt.getNewValue() == null) {
 
  249             interestingResults.
update();
 
  250             interestingResults.addObserver(
this);
 
  258             interestingResults.deleteObserver(
this);
 
  273         public void update(Observable o, Object arg) {
 
  283             super(Children.create(
new HitFactory(setName), 
true), Lookups.singleton(setName));
 
  285             super.setName(setName);
 
  287             this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png"); 
 
  288             interestingResults.addObserver(
this);
 
  292             super.setDisplayName(setName + 
" (" + interestingResults.
getArtifactIds(setName).size() + 
")");
 
  302             Sheet s = super.createSheet();
 
  303             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  305                 ss = Sheet.createPropertiesSet();
 
  309             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.name"),
 
  310                     NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.name"),
 
  311                     NbBundle.getMessage(
this.getClass(), 
"InterestingHits.createSheet.name.desc"),
 
  319             return v.
visit(
this);
 
  323         public void update(Observable o, Object arg) {
 
  333             return getClass().getName();
 
  337     private class HitFactory extends ChildFactory<Long> implements Observer {
 
  345             interestingResults.addObserver(
this);
 
  351             if (skCase == null) {
 
  359                     artifactHits.put(
id, art);
 
  362                     logger.log(Level.SEVERE, 
"TSK Exception occurred", ex); 
 
  375         public void update(Observable o, Object arg) {
 
static final String DISPLAY_NAME
 
TSK_INTERESTING_ARTIFACT_HIT
 
BlackboardArtifact.Type getBlackboardArtifactType()
 
void removeIngestModuleEventListener(final PropertyChangeListener listener)
 
static final String INTERESTING_ITEMS
 
static synchronized IngestManager getInstance()
 
Node createNodeForKey(Long l)
 
static void removePropertyChangeListener(PropertyChangeListener listener)
 
void loadArtifacts(BlackboardArtifact.ARTIFACT_TYPE artType)
 
void update(Observable o, Object arg)
 
boolean createKeys(List< String > list)
 
Map< Long, BlackboardArtifact > artifactHits
 
boolean createKeys(List< Long > list)
 
List< String > getSetNames()
 
BlackboardArtifact getBlackboardArtifact(long artifactID)
 
T visit(DataSourcesNode in)
 
void removeIngestJobEventListener(final PropertyChangeListener listener)
 
final PropertyChangeListener pcl
 
SetNameNode(String setName)
 
Set< Long > getArtifactIds(String setName)
 
void addIngestJobEventListener(final PropertyChangeListener listener)
 
void update(Observable o, Object arg)
 
static void addPropertyChangeListener(PropertyChangeListener listener)
 
void update(Observable o, Object arg)
 
HitFactory(String setName)
 
void addIngestModuleEventListener(final PropertyChangeListener listener)
 
final Map< String, Set< Long > > interestingItemsMap
 
Node createNodeForKey(String key)
 
static Case getCurrentCase()
 
synchronized static Logger getLogger(String name)
 
InterestingHits(SleuthkitCase skCase)
 
final InterestingResults interestingResults
 
static final Logger logger
 
CaseDbQuery executeQuery(String query)