19package org.sleuthkit.autopsy.datamodel;
21import java.beans.PropertyChangeEvent;
22import java.beans.PropertyChangeListener;
23import java.sql.ResultSet;
24import java.sql.SQLException;
25import java.util.ArrayList;
26import java.util.Collections;
27import java.util.EnumSet;
28import java.util.HashMap;
29import java.util.HashSet;
32import java.util.Observable;
33import java.util.Observer;
35import java.util.logging.Level;
36import org.openide.nodes.Children;
37import org.openide.nodes.Node;
38import org.openide.nodes.Sheet;
39import org.openide.util.NbBundle;
40import org.openide.util.WeakListeners;
41import org.openide.util.lookup.Lookups;
42import org.sleuthkit.autopsy.casemodule.Case;
43import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
44import org.sleuthkit.autopsy.coreutils.Logger;
45import org.sleuthkit.autopsy.ingest.IngestManager;
46import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
47import org.sleuthkit.datamodel.SleuthkitCase;
48import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery;
49import org.sleuthkit.datamodel.TskCoreException;
50import org.sleuthkit.autopsy.datamodel.Artifacts.UpdatableCountTypeNode;
51import org.sleuthkit.datamodel.AnalysisResult;
52import static org.sleuthkit.datamodel.BlackboardArtifact.Type.TSK_MALWARE;
53import org.sleuthkit.datamodel.Score;
86 this.filteringDSObjId = objId;
92 return visitor.
visit(
this);
99 private class MalwareResults
extends Observable implements Observer {
110 Set<Long> getArtifactIds() {
116 @SuppressWarnings(
"deprecation")
117 final
void update() {
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() +
" )";
133 query +=
" AND blackboard_artifacts.data_source_obj_id = " +
filteringDSObjId;
136 try (CaseDbQuery dbQuery =
skCase.executeQuery(query)) {
137 ResultSet resultSet = dbQuery.getResultSet();
138 synchronized (malwareHits) {
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();
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<>();
317 public void update(Observable o, Object arg) {
328 AnalysisResult art =
skCase.getBlackboard().getAnalysisResultById(
id);
334 }
catch (TskCoreException ex) {
335 logger.log(Level.SEVERE,
"TSK Exception occurred", ex);
340 return Collections.emptyList();
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
synchronized static Logger getLogger(String name)
UpdatableCountTypeNode(Children children, Lookup lookup, String baseName, long filteringDSObjId, BlackboardArtifact.Type... types)
final long filteringDSObjId
static final Logger logger
BaseChildFactory(String nodeName)
List< AnalysisResult > makeKeys()
final Map< Long, AnalysisResult > artifactHits
Node createNodeForKey(AnalysisResult key)
HitFactory(String nodeName)
void update(Observable o, Object arg)
final Set< Long > malwareHits
final PropertyChangeListener weakPcl
void update(Observable o, Object arg)
final PropertyChangeListener pcl
final long filteringDSObjId
static final Set< IngestManager.IngestJobEvent > INGEST_JOB_EVENTS_OF_INTEREST
MalwareHits(SleuthkitCase skCase)
static final Set< IngestManager.IngestModuleEvent > INGEST_MODULE_EVENTS_OF_INTEREST
static final Logger logger
MalwareHits(SleuthkitCase skCase, long objId)
final MalwareResults malwareResults
static synchronized IngestManager getInstance()
void removeIngestModuleEventListener(final PropertyChangeListener listener)
void removeIngestJobEventListener(final PropertyChangeListener listener)
void addIngestModuleEventListener(final PropertyChangeListener listener)
void addIngestJobEventListener(final PropertyChangeListener listener)
BlackboardArtifact.Type getBlackboardArtifactType()
T visit(DataSourceFilesNode in)