19 package org.sleuthkit.autopsy.datamodel;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.Collections;
24 import java.util.EnumSet;
25 import java.util.List;
27 import java.util.logging.Level;
28 import java.util.stream.Collectors;
29 import javax.swing.Action;
30 import org.openide.nodes.ChildFactory;
31 import org.openide.nodes.Children;
32 import org.openide.nodes.Sheet;
33 import org.openide.util.NbBundle;
34 import org.openide.util.NbBundle.Messages;
35 import org.openide.util.WeakListeners;
36 import org.openide.util.lookup.Lookups;
51 @NbBundle.Messages(value = {
"PersonNode_unknownPersonNode_title=Unknown Persons"})
54 private static final String ICON_PATH =
"org/sleuthkit/autopsy/images/person.png";
61 return Bundle.PersonNode_unknownPersonNode_title();
67 private static class PersonChildren extends ChildFactory.Detachable<HostGrouping> {
71 private static final Set<
Case.
Events> CHILD_EVENTS = EnumSet.of(
76 private static final Set<String> CHILD_EVENTS_STR = CHILD_EVENTS.stream()
78 .collect(Collectors.toSet());
94 private final PropertyChangeListener hostAddedDeletedPcl =
new PropertyChangeListener() {
96 public void propertyChange(PropertyChangeEvent evt) {
97 String eventType = evt.getPropertyName();
98 if (eventType != null && CHILD_EVENTS_STR.contains(eventType)) {
116 return key == null ? null :
new HostNode(key);
120 protected boolean createKeys(List<HostGrouping> toPopulate) {
121 List<Host> hosts = Collections.emptyList();
125 String personName = person == null || person.getName() == null ?
"<unknown>" : person.getName();
126 logger.log(Level.WARNING, String.format(
"Unable to get data sources for host: %s", personName), ex);
129 toPopulate.addAll(hosts.stream()
130 .map(HostGrouping::new)
132 .collect(Collectors.toList()));
144 private final PropertyChangeListener personChangePcl =
new PropertyChangeListener() {
146 public void propertyChange(PropertyChangeEvent evt) {
147 String eventType = evt.getPropertyName();
149 ((PersonsChangedEvent) evt).getNewValue().stream()
150 .filter(p -> p != null && p.getPersonId() == personId)
152 .ifPresent((newPerson) -> {
153 setName(newPerson.getName());
154 setDisplayName(newPerson.getName());
167 return (person == null || person.getName() == null)
168 ? getUnknownPersonId()
178 this(person, getDisplayName(person));
189 person == null ? Lookups.fixed(displayName) : Lookups.fixed(person, displayName));
190 super.setName(displayName);
191 super.setDisplayName(displayName);
192 this.setIconBaseWithExtension(ICON_PATH);
193 this.person = person;
194 this.personId = person == null ? null : person.getPersonId();
196 WeakListeners.propertyChange(personChangePcl,
this));
206 return getClass().getName();
211 return visitor.
visit(
this);
215 "PersonGroupingNode_createSheet_nameProperty=Name",})
218 Sheet sheet = Sheet.createDefault();
219 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
220 if (sheetSet == null) {
221 sheetSet = Sheet.createPropertiesSet();
225 sheetSet.put(
new NodeProperty<>(
"Name", Bundle.PersonGroupingNode_createSheet_nameProperty(),
"", getDisplayName()));
231 @Messages({
"PersonGroupingNode_actions_rename=Rename Person...",
232 "PersonGroupingNode_actions_delete=Delete Person"})
234 if (this.person == null) {
235 return new Action[0];
boolean createKeys(List< HostGrouping > toPopulate)
PersonGroupingNode(Person person, String displayName)
T visit(DataSourcesNode in)
Action[] getActions(boolean context)
static String getDisplayName(Person person)
SleuthkitCase getSleuthkitCase()
static String getUnknownPersonId()
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
HostNode createNodeForKey(HostGrouping key)
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)