19 package org.sleuthkit.autopsy.datamodel;
22 import java.beans.PropertyChangeEvent;
23 import java.beans.PropertyChangeListener;
24 import java.sql.ResultSet;
25 import java.sql.SQLException;
26 import java.util.ArrayList;
27 import java.util.Collections;
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.Exceptions;
41 import org.openide.util.NbBundle;
42 import org.openide.util.lookup.Lookups;
57 .getMessage(
InterestingHits.class,
"InterestingHits.interestingItems.text");
65 interestingResults.
update();
72 List<String> setNames =
new ArrayList<>(interestingItemsMap.keySet());
73 Collections.sort(setNames);
78 return interestingItemsMap.get(setName);
82 interestingItemsMap.clear();
92 @SuppressWarnings(
"deprecation")
99 int artId = artType.getTypeID();
100 String query =
"SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id "
101 +
"FROM blackboard_attributes,blackboard_artifacts WHERE "
102 +
"attribute_type_id=" + setNameId
103 +
" AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id"
104 +
" AND blackboard_artifacts.artifact_type_id=" + artId;
107 ResultSet resultSet = dbQuery.getResultSet();
108 while (resultSet.next()) {
109 String value = resultSet.getString(
"value_text");
110 long artifactId = resultSet.getLong(
"artifact_id");
111 if (!interestingItemsMap.containsKey(value)) {
112 interestingItemsMap.put(value,
new HashSet<>());
114 interestingItemsMap.get(value).add(artifactId);
117 logger.log(Level.WARNING,
"SQL Exception occurred: ", ex);
123 public <T> T accept(AutopsyItemVisitor<T> v) {
124 return v.visit(
this);
133 super(Children.create(
new SetNameFactory(),
true), Lookups.singleton(DISPLAY_NAME));
134 super.setName(INTERESTING_ITEMS);
135 super.setDisplayName(DISPLAY_NAME);
136 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png");
146 return v.
visit(
this);
151 Sheet s = super.createSheet();
152 Sheet.Set ss = s.get(Sheet.PROPERTIES);
154 ss = Sheet.createPropertiesSet();
158 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
159 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.displayName"),
160 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.desc"),
167 private class SetNameFactory extends ChildFactory.Detachable<String> implements Observer {
173 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
175 public void propertyChange(PropertyChangeEvent evt) {
176 String eventType = evt.getPropertyName();
181 interestingResults.
update();
186 interestingResults.
update();
190 if (evt.getNewValue() == null) {
203 interestingResults.
update();
204 interestingResults.addObserver(
this);
212 interestingResults.deleteObserver(
this);
227 public void update(Observable o, Object arg) {
235 super(Children.create(
new HitFactory(setName),
true), Lookups.singleton(setName));
237 super.setName(setName);
239 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/interesting_item.png");
240 interestingResults.addObserver(
this);
244 super.setDisplayName(setName +
" (" + interestingResults.
getArtifactIds(setName).size() +
")");
254 Sheet s = super.createSheet();
255 Sheet.Set ss = s.get(Sheet.PROPERTIES);
257 ss = Sheet.createPropertiesSet();
261 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
262 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.name"),
263 NbBundle.getMessage(
this.getClass(),
"InterestingHits.createSheet.name.desc"),
271 return v.
visit(
this);
275 public void update(Observable o, Object arg) {
280 private class HitFactory extends ChildFactory<Long> implements Observer {
286 interestingResults.addObserver(
this);
299 if (skCase == null) {
305 Exceptions.printStackTrace(ex);
311 public void update(Observable o, Object arg) {
static final String DISPLAY_NAME
TSK_INTERESTING_ARTIFACT_HIT
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static final String INTERESTING_ITEMS
static synchronized IngestManager getInstance()
Node createNodeForKey(Long l)
void loadArtifacts(BlackboardArtifact.ARTIFACT_TYPE artType)
void update(Observable o, Object arg)
boolean createKeys(List< String > list)
boolean createKeys(List< Long > list)
List< String > getSetNames()
BlackboardArtifact getBlackboardArtifact(long artifactID)
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
final PropertyChangeListener pcl
SetNameNode(String setName)
Set< Long > getArtifactIds(String setName)
void addIngestJobEventListener(final PropertyChangeListener listener)
void update(Observable o, Object arg)
void update(Observable o, Object arg)
static synchronized void removePropertyChangeListener(PropertyChangeListener listener)
HitFactory(String setName)
void addIngestModuleEventListener(final PropertyChangeListener listener)
final Map< String, Set< Long > > interestingItemsMap
static synchronized void addPropertyChangeListener(PropertyChangeListener listener)
Node createNodeForKey(String key)
InterestingHits(SleuthkitCase skCase)
final InterestingResults interestingResults
static Logger getLogger(String name)
static final Logger logger
CaseDbQuery executeQuery(String query)