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.List;
32 import java.util.Observable;
33 import java.util.Observer;
35 import java.util.logging.Level;
36 import org.openide.nodes.Children;
37 import org.openide.nodes.Node;
38 import org.openide.nodes.Sheet;
39 import org.openide.util.NbBundle;
40 import org.openide.util.WeakListeners;
41 import org.openide.util.lookup.Lookups;
86 this.filteringDSObjId = objId;
92 return visitor.
visit(
this);
110 Set<Long> getArtifactIds() {
112 return Collections.unmodifiableSet(malwareHits);
116 @SuppressWarnings(
"deprecation")
117 final
void update() {
122 if (skCase == null) {
126 String query =
"SELECT blackboard_artifacts.artifact_obj_id "
127 +
"FROM blackboard_artifacts,tsk_analysis_results WHERE "
128 +
"blackboard_artifacts.artifact_type_id=" + TSK_MALWARE.getTypeID()
129 +
" AND tsk_analysis_results.artifact_obj_id=blackboard_artifacts.artifact_obj_id"
130 +
" AND (tsk_analysis_results.significance=" + Score.Significance.NOTABLE.getId()
131 +
" OR tsk_analysis_results.significance=" + Score.Significance.LIKELY_NOTABLE.getId() +
" )";
132 if (filteringDSObjId > 0) {
133 query +=
" AND blackboard_artifacts.data_source_obj_id = " +
filteringDSObjId;
136 try (CaseDbQuery dbQuery = skCase.
executeQuery(query)) {
137 ResultSet resultSet = dbQuery.getResultSet();
139 while (resultSet.next()) {
140 long artifactObjId = resultSet.getLong(
"artifact_obj_id");
141 malwareHits.add(artifactObjId);
144 }
catch (TskCoreException | SQLException ex) {
145 logger.log(Level.WARNING,
"SQL Exception occurred: ", ex);
152 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
154 public void propertyChange(PropertyChangeEvent evt) {
155 String eventType = evt.getPropertyName();
172 malwareResults.update();
189 malwareResults.update();
197 if (evt.getNewValue() == null) {
205 private final PropertyChangeListener
weakPcl = WeakListeners.propertyChange(pcl, null);
226 public void update(Observable o, Object arg) {
237 super(Children.create(
new HitFactory(TSK_MALWARE.getDisplayName()),
true),
238 Lookups.singleton(TSK_MALWARE.getDisplayName()),
239 TSK_MALWARE.getDisplayName(),
243 super.setName(TSK_MALWARE.getTypeName());
245 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/artifact-icon.png");
255 return visitor.
visit(
this);
260 Sheet sheet = super.createSheet();
261 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
262 if (sheetSet == null) {
263 sheetSet = Sheet.createPropertiesSet();
267 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"MalwareHits.createSheet.name.name"),
268 NbBundle.getMessage(
this.getClass(),
"MalwareHits.createSheet.name.displayName"),
269 NbBundle.getMessage(
this.getClass(),
"MalwareHits.createSheet.name.desc"),
277 return getClass().getName();
285 void updateDisplayName() {
286 super.setDisplayName(TSK_MALWARE.getDisplayName() +
" (" + malwareResults.getArtifactIds().size() +
")");
295 private final Map<Long, AnalysisResult>
artifactHits =
new HashMap<>();
303 malwareResults.addObserver(
this);
308 malwareResults.deleteObserver(
this);
317 public void update(Observable o, Object arg) {
323 if (skCase != null) {
325 malwareResults.getArtifactIds().forEach((
id) -> {
327 if (!artifactHits.containsKey(
id)) {
332 artifactHits.put(
id, art);
335 logger.log(Level.SEVERE,
"TSK Exception occurred", ex);
338 return new ArrayList<>(artifactHits.values());
340 return Collections.emptyList();
BlackboardArtifact.Type getBlackboardArtifactType()
void update(Observable o, Object arg)
final PropertyChangeListener pcl
void removeIngestModuleEventListener(final PropertyChangeListener listener)
AnalysisResult getAnalysisResultById(long artifactObjId)
final long filteringDSObjId
static synchronized IngestManager getInstance()
Blackboard getBlackboard()
final PropertyChangeListener weakPcl
final MalwareResults malwareResults
final Map< Long, AnalysisResult > artifactHits
Node createNodeForKey(AnalysisResult key)
void removeIngestJobEventListener(final PropertyChangeListener listener)
List< AnalysisResult > makeKeys()
static final Set< IngestManager.IngestModuleEvent > INGEST_MODULE_EVENTS_OF_INTEREST
static final Logger logger
void addIngestJobEventListener(final PropertyChangeListener listener)
MalwareHits(SleuthkitCase skCase, long objId)
T visit(DataSourceFilesNode in)
HitFactory(String nodeName)
List< BlackboardAttribute > getAttributes()
void addIngestModuleEventListener(final PropertyChangeListener listener)
MalwareHits(SleuthkitCase skCase)
static final Set< IngestManager.IngestJobEvent > INGEST_JOB_EVENTS_OF_INTEREST
void update(Observable o, Object arg)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static final Type TSK_MALWARE
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
final Set< Long > malwareHits
final long filteringDSObjId
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
CaseDbQuery executeQuery(String query)