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;
 
   89         List<String> getSetNames() {
 
   92                 names = 
new ArrayList<>(hashSetHitsMap.keySet());
 
   94             Collections.sort(names);
 
   98         Set<Long> getArtifactIds(String hashSetName) {
 
  100                 return hashSetHitsMap.get(hashSetName);
 
  104         @SuppressWarnings(
"deprecation")
 
  105         final 
void update() {
 
  107                 hashSetHitsMap.clear();
 
  110             if (skCase == null) {
 
  114             int setNameId = ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID();
 
  115             int artId = ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID();
 
  116             String query = 
"SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id "  
  117                     + 
"FROM blackboard_attributes,blackboard_artifacts WHERE "  
  118                     + 
"attribute_type_id=" + setNameId 
 
  119                     + 
" AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id"  
  120                     + 
" AND blackboard_artifacts.artifact_type_id=" + artId; 
 
  122             try (CaseDbQuery dbQuery = skCase.
executeQuery(query)) {
 
  123                 ResultSet resultSet = dbQuery.getResultSet();
 
  125                     while (resultSet.next()) {
 
  126                         String setName = resultSet.getString(
"value_text"); 
 
  127                         long artifactId = resultSet.getLong(
"artifact_id"); 
 
  128                         if (!hashSetHitsMap.containsKey(setName)) {
 
  129                             hashSetHitsMap.put(setName, 
new HashSet<Long>());
 
  131                         hashSetHitsMap.get(setName).add(artifactId);
 
  134             } 
catch (TskCoreException | SQLException ex) {
 
  135                 logger.log(Level.WARNING, 
"SQL Exception occurred: ", ex); 
 
  149             super(Children.create(
new HashsetNameFactory(), 
true), Lookups.singleton(DISPLAY_NAME));
 
  150             super.setName(HASHSET_HITS);
 
  151             super.setDisplayName(DISPLAY_NAME);
 
  152             this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/hashset_hits.png"); 
 
  162             return v.
visit(
this);
 
  167             Sheet s = super.createSheet();
 
  168             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  170                 ss = Sheet.createPropertiesSet();
 
  174             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.name"),
 
  175                     NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.displayName"),
 
  176                     NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.desc"),
 
  184             return getClass().getName();
 
  198         private final PropertyChangeListener 
pcl = 
new PropertyChangeListener() {
 
  200             public void propertyChange(PropertyChangeEvent evt) {
 
  201                 String eventType = evt.getPropertyName();
 
  218                             hashsetResults.update();
 
  220                     } 
catch (IllegalStateException notUsed) {
 
  235                         hashsetResults.update();
 
  236                     } 
catch (IllegalStateException notUsed) {
 
  243                     if (evt.getNewValue() == null) {
 
  256             hashsetResults.update();
 
  257             hashsetResults.addObserver(
this);
 
  265             hashsetResults.deleteObserver(
this);
 
  270             list.addAll(hashsetResults.getSetNames());
 
  280         public void update(Observable o, Object arg) {
 
  293             super(Children.create(
new HitFactory(hashSetName), 
true), Lookups.singleton(hashSetName));
 
  294             super.setName(hashSetName);
 
  297             this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/hashset_hits.png"); 
 
  298             hashsetResults.addObserver(
this);
 
  305             super.setDisplayName(hashSetName + 
" (" + hashsetResults.getArtifactIds(hashSetName).size() + 
")");
 
  315             Sheet s = super.createSheet();
 
  316             Sheet.Set ss = s.get(Sheet.PROPERTIES);
 
  318                 ss = Sheet.createPropertiesSet();
 
  322             ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.name"),
 
  323                     NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.displayName"),
 
  324                     NbBundle.getMessage(
this.getClass(), 
"HashsetHits.createSheet.name.desc"),
 
  332             return v.
visit(
this);
 
  336         public void update(Observable o, Object arg) {
 
  346             return getClass().getName();
 
  353     private class HitFactory extends ChildFactory.Detachable<Long> implements Observer {
 
  365             hashsetResults.addObserver(
this);
 
  370             hashsetResults.deleteObserver(
this);
 
  376             if (skCase == null) {
 
  380             hashsetResults.getArtifactIds(hashsetName).forEach((
id) -> {
 
  384                     artifactHits.put(
id, art);
 
  387                     logger.log(Level.SEVERE, 
"TSK Exception occurred", ex); 
 
  400         public void update(Observable o, Object arg) {
 
BlackboardArtifact.Type getBlackboardArtifactType()
 
void removeIngestModuleEventListener(final PropertyChangeListener listener)
 
Map< Long, BlackboardArtifact > artifactHits
 
static synchronized IngestManager getInstance()
 
HashsetNameNode(String hashSetName)
 
static void removePropertyChangeListener(PropertyChangeListener listener)
 
static final String DISPLAY_NAME
 
HitFactory(String hashsetName)
 
boolean createKeys(List< String > list)
 
Node createNodeForKey(String key)
 
BlackboardArtifact getBlackboardArtifact(long artifactID)
 
static final String HASHSET_HITS
 
static final Logger logger
 
T visit(DataSourcesNode in)
 
void update(Observable o, Object arg)
 
HashsetHits(SleuthkitCase skCase)
 
void removeIngestJobEventListener(final PropertyChangeListener listener)
 
boolean createKeys(List< Long > list)
 
void addIngestJobEventListener(final PropertyChangeListener listener)
 
final Map< String, Set< Long > > hashSetHitsMap
 
void update(Observable o, Object arg)
 
final PropertyChangeListener pcl
 
static void addPropertyChangeListener(PropertyChangeListener listener)
 
void addIngestModuleEventListener(final PropertyChangeListener listener)
 
static Case getCurrentCase()
 
synchronized static Logger getLogger(String name)
 
void update(Observable o, Object arg)
 
Node createNodeForKey(Long id)
 
final HashsetResults hashsetResults
 
CaseDbQuery executeQuery(String query)