19package org.sleuthkit.autopsy.datamodel;
21import java.beans.PropertyChangeEvent;
22import java.beans.PropertyChangeListener;
23import java.util.Collections;
24import java.util.EnumSet;
27import java.util.logging.Level;
28import java.util.stream.Collectors;
29import javax.swing.Action;
30import org.openide.nodes.ChildFactory;
31import org.openide.nodes.Children;
32import org.openide.nodes.Sheet;
33import org.openide.util.NbBundle;
34import org.openide.util.NbBundle.Messages;
35import org.openide.util.WeakListeners;
36import org.openide.util.lookup.Lookups;
37import org.sleuthkit.autopsy.casemodule.Case;
38import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
39import org.sleuthkit.autopsy.casemodule.events.PersonsUpdatedEvent;
40import org.sleuthkit.autopsy.coreutils.Logger;
41import org.sleuthkit.autopsy.datamodel.persons.DeletePersonAction;
42import org.sleuthkit.autopsy.datamodel.persons.EditPersonAction;
43import org.sleuthkit.datamodel.Host;
44import org.sleuthkit.datamodel.Person;
45import org.sleuthkit.datamodel.TskCoreException;
54@NbBundle.Messages(value = {
"PersonNode_unknownPersonNode_title=Unknown Persons"})
57 private static final String
ICON_PATH =
"org/sleuthkit/autopsy/images/person.png";
66 return Bundle.PersonNode_unknownPersonNode_title();
72 private static class PersonChildren
extends ChildFactory.Detachable<HostGrouping> {
84 .collect(Collectors.toSet());
93 PersonChildren(Person
person) {
108 public void propertyChange(PropertyChangeEvent evt) {
109 String eventType = evt.getPropertyName();
131 return key ==
null ? null :
new HostNode(key);
135 protected boolean createKeys(List<HostGrouping> toPopulate) {
136 List<Host>
hosts = Collections.emptyList();
145 String personName =
person ==
null ||
person.getName() ==
null ?
"<unknown>" :
person.getName();
146 logger.log(Level.WARNING, String.format(
"Unable to get data sources for host: %s", personName), ex);
149 toPopulate.addAll(
hosts.stream()
150 .map(HostGrouping::new)
152 .collect(Collectors.toList()));
167 public void propertyChange(PropertyChangeEvent evt) {
168 String eventType = evt.getPropertyName();
171 .filter(p -> p !=
null && p.getPersonId() ==
personId)
173 .ifPresent((newPerson) -> {
174 setName(newPerson.getName());
175 setDisplayName(newPerson.getName());
202 this(person, getDisplayName(person));
213 person ==
null ? Lookups.fixed(displayName) : Lookups.fixed(
person, displayName));
214 super.setName(displayName);
215 super.setDisplayName(displayName);
216 this.setIconBaseWithExtension(
ICON_PATH);
218 this.personId =
person ==
null ? null :
person.getPersonId();
229 return getClass().getName();
234 return visitor.
visit(
this);
238 "PersonGroupingNode_createSheet_nameProperty=Name",})
241 Sheet sheet = Sheet.createDefault();
242 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
243 if (sheetSet ==
null) {
244 sheetSet = Sheet.createPropertiesSet();
254 @Messages({
"PersonGroupingNode_actions_rename=Rename Person...",
255 "PersonGroupingNode_actions_delete=Delete Person"})
257 if (this.person ==
null) {
258 return new Action[0];
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
SleuthkitCase getSleuthkitCase()
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
synchronized static Logger getLogger(String name)
DisplayableItemNode(Children children)
HostNode createNodeForKey(HostGrouping key)
static final Logger logger
final PropertyChangeListener hostAddedDeletedPcl
static final Set< String > HOST_EVENTS_OF_INTEREST_NAMES
boolean createKeys(List< HostGrouping > toPopulate)
final PropertyChangeListener weakPcl
static final Set< Case.Events > HOST_EVENTS_OF_INTEREST
final PropertyChangeListener weakPcl
static String getUnknownPersonId()
static final String ICON_PATH
final PropertyChangeListener personChangePcl
PersonNode(Person person, String displayName)
static String getDisplayName(Person person)
Action[] getActions(boolean context)
HOSTS_REMOVED_FROM_PERSON
T visit(DataSourceFilesNode in)