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.EnumSet;
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.LinkedHashMap;
31 import java.util.List;
33 import java.util.Observable;
34 import java.util.Observer;
36 import java.util.logging.Level;
37 import org.openide.nodes.ChildFactory;
38 import org.openide.nodes.Children;
39 import org.openide.nodes.Node;
40 import org.openide.nodes.Sheet;
41 import org.openide.util.NbBundle;
42 import org.openide.util.lookup.Lookups;
49 import org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
50 import org.
sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
52 import org.
sleuthkit.datamodel.SleuthkitCase.CaseDbQuery;
61 private static final String
HASHSET_HITS = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getLabel();
62 private static final String
DISPLAY_NAME = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName();
74 return visitor.
visit(
this);
91 List<String> getSetNames() {
94 names =
new ArrayList<>(hashSetHitsMap.keySet());
96 Collections.sort(names);
100 Set<Long> getArtifactIds(String hashSetName) {
102 return hashSetHitsMap.get(hashSetName);
106 @SuppressWarnings(
"deprecation")
107 final
void update() {
109 hashSetHitsMap.clear();
112 if (skCase == null) {
116 int setNameId = ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID();
117 int artId = ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID();
118 String query =
"SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id "
119 +
"FROM blackboard_attributes,blackboard_artifacts WHERE "
120 +
"attribute_type_id=" + setNameId
121 +
" AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id"
122 +
" AND blackboard_artifacts.artifact_type_id=" + artId;
124 try (CaseDbQuery dbQuery = skCase.executeQuery(query)) {
125 ResultSet resultSet = dbQuery.getResultSet();
127 while (resultSet.next()) {
128 String setName = resultSet.getString(
"value_text");
129 long artifactId = resultSet.getLong(
"artifact_id");
130 if (!hashSetHitsMap.containsKey(setName)) {
131 hashSetHitsMap.put(setName,
new HashSet<Long>());
133 hashSetHitsMap.get(setName).add(artifactId);
136 }
catch (TskCoreException | SQLException ex) {
137 logger.log(Level.WARNING,
"SQL Exception occurred: ", ex);
151 super(Children.create(
new HashsetNameFactory(),
true), Lookups.singleton(DISPLAY_NAME));
152 super.setName(HASHSET_HITS);
153 super.setDisplayName(DISPLAY_NAME);
154 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/hashset_hits.png");
164 return visitor.
visit(
this);
169 Sheet sheet = super.createSheet();
170 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
171 if (sheetSet == null) {
172 sheetSet = Sheet.createPropertiesSet();
176 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.name"),
177 NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.displayName"),
178 NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.desc"),
186 return getClass().getName();
200 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
202 public void propertyChange(PropertyChangeEvent evt) {
203 String eventType = evt.getPropertyName();
219 if (null != eventData && eventData.
getBlackboardArtifactType().getTypeID() == ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
220 hashsetResults.update();
237 hashsetResults.update();
245 if (evt.getNewValue() == null) {
258 hashsetResults.update();
259 hashsetResults.addObserver(
this);
267 hashsetResults.deleteObserver(
this);
272 list.addAll(hashsetResults.getSetNames());
282 public void update(Observable o, Object arg) {
295 super(Children.create(
new HitFactory(hashSetName),
true), Lookups.singleton(hashSetName));
296 super.setName(hashSetName);
299 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/hashset_hits.png");
300 hashsetResults.addObserver(
this);
307 super.setDisplayName(hashSetName +
" (" + hashsetResults.getArtifactIds(hashSetName).size() +
")");
317 Sheet sheet = super.createSheet();
318 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
319 if (sheetSet == null) {
320 sheetSet = Sheet.createPropertiesSet();
324 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.name"),
325 NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.displayName"),
326 NbBundle.getMessage(
this.getClass(),
"HashsetHits.createSheet.name.desc"),
334 return visitor.
visit(
this);
338 public void update(Observable o, Object arg) {
348 return getClass().getName();
355 private class HitFactory extends ChildFactory.Detachable<Long> implements Observer {
367 hashsetResults.addObserver(
this);
372 hashsetResults.deleteObserver(
this);
378 if (skCase == null) {
382 hashsetResults.getArtifactIds(hashsetName).forEach((
id) -> {
384 if (!artifactHits.containsKey(
id)) {
385 BlackboardArtifact art = skCase.getBlackboardArtifact(
id);
386 artifactHits.put(
id, art);
389 }
catch (TskException ex) {
390 logger.log(Level.SEVERE,
"TSK Exception occurred", ex);
398 BlackboardArtifact art = artifactHits.get(
id);
403 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 final String DISPLAY_NAME
HitFactory(String hashsetName)
boolean createKeys(List< String > list)
Node createNodeForKey(String key)
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
void addIngestModuleEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
void update(Observable o, Object arg)
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
Node createNodeForKey(Long id)
final HashsetResults hashsetResults