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;
30import java.util.LinkedHashMap;
33import java.util.Observable;
34import java.util.Observer;
36import java.util.logging.Level;
37import org.openide.nodes.ChildFactory;
38import org.openide.nodes.Children;
39import org.openide.nodes.Node;
40import org.openide.nodes.Sheet;
41import org.openide.util.NbBundle;
42import org.openide.util.WeakListeners;
43import org.openide.util.lookup.Lookups;
44import org.sleuthkit.autopsy.casemodule.Case;
45import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
46import org.sleuthkit.autopsy.coreutils.Logger;
47import org.sleuthkit.autopsy.ingest.IngestManager;
48import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
49import org.sleuthkit.datamodel.BlackboardArtifact;
50import org.sleuthkit.datamodel.BlackboardAttribute;
51import org.sleuthkit.datamodel.SleuthkitCase;
52import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery;
53import org.sleuthkit.datamodel.TskCoreException;
54import org.sleuthkit.datamodel.AnalysisResult;
55import org.sleuthkit.autopsy.datamodel.Artifacts.UpdatableCountTypeNode;
92 this.filteringDSObjId = objId;
111 List<String> getSetNames() {
112 List<String> setNames;
116 Collections.sort(setNames, (a, b) -> a.compareToIgnoreCase(b));
129 Set<Long> getArtifactIds(String setName) {
151 @SuppressWarnings(
"deprecation")
157 int setNameId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID();
159 String query =
"SELECT value_text, blackboard_artifacts.artifact_obj_id "
160 +
"FROM blackboard_attributes,blackboard_artifacts WHERE "
161 +
"attribute_type_id=" + setNameId
162 +
" AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id"
163 +
" AND blackboard_artifacts.artifact_type_id = " +
artifactType.getTypeID();
165 query +=
" AND blackboard_artifacts.data_source_obj_id = " +
filteringDSObjId;
168 try (CaseDbQuery dbQuery =
skCase.executeQuery(query)) {
169 synchronized (interestingItemsMap) {
170 ResultSet resultSet = dbQuery.getResultSet();
171 while (resultSet.next()) {
172 String value = resultSet.getString(
"value_text");
173 long artifactObjId = resultSet.getLong(
"artifact_obj_id");
175 .computeIfAbsent(value, (k) -> new HashSet<>())
179 }
catch (TskCoreException | SQLException ex) {
180 logger.log(Level.WARNING,
"SQL Exception occurred: ", ex);
186 public <T> T accept(AutopsyItemVisitor<T> visitor) {
187 return visitor.visit(
this);
193 private class SetNameFactory extends ChildFactory.Detachable<String> implements Observer {
200 private final PropertyChangeListener
pcl = (PropertyChangeEvent evt) -> {
201 String eventType = evt.getPropertyName();
244 if (evt.getNewValue() ==
null) {
251 private final PropertyChangeListener
weakPcl = WeakListeners.propertyChange(
pcl,
null);
265 public void update(Observable o, Object arg) {
300 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png");
306 super.setDisplayName(
setName +
" (" + sizeOfSet +
")");
316 Sheet sheet = super.createSheet();
317 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
318 if (sheetSet ==
null) {
319 sheetSet = Sheet.createPropertiesSet();
323 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
324 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
325 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.desc"),
333 return visitor.
visit(
this);
337 public void update(Observable o, Object arg) {
347 return getClass().getName();
372 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png");
382 Sheet sheet = super.createSheet();
383 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
384 if (sheetSet ==
null) {
385 sheetSet = Sheet.createPropertiesSet();
388 sheetSet.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
389 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
390 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.desc"),
397 return visitor.
visit(
this);
406 return getClass().getName();
416 private final Map<Long, AnalysisResult>
artifactHits =
new HashMap<>();
441 AnalysisResult art =
skCase.getBlackboard().getAnalysisResultById(
id);
447 }
catch (TskCoreException ex) {
448 logger.log(Level.SEVERE,
"TSK Exception occurred", ex);
454 return Collections.emptyList();
463 public void update(Observable o, Object arg) {
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)
DisplayableItemNode(Children children)
HitFactory(String setName)
void update(Observable o, Object arg)
Node createNodeForKey(AnalysisResult art)
List< AnalysisResult > makeKeys()
final Map< Long, AnalysisResult > artifactHits
final Map< String, Set< Long > > interestingItemsMap
final PropertyChangeListener pcl
void update(Observable o, Object arg)
final PropertyChangeListener weakPcl
boolean createKeys(List< String > list)
Node createNodeForKey(String key)
SetNameNode(String setName)
void update(Observable o, Object arg)
InterestingHits(SleuthkitCase skCase, BlackboardArtifact.Type artifactType)
final long filteringDSObjId
final InterestingResults interestingResults
final BlackboardArtifact.Type artifactType
static final Set< IngestManager.IngestModuleEvent > INGEST_MODULE_EVENTS_OF_INTEREST
static final Set< IngestManager.IngestJobEvent > INGEST_JOB_EVENTS_OF_INTEREST
static final Logger logger
InterestingHits(SleuthkitCase skCase, BlackboardArtifact.Type artifactType, long objId)
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)