19 package org.sleuthkit.autopsy.timeline.explorernodes;
21 import java.lang.reflect.InvocationTargetException;
22 import java.text.MessageFormat;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.logging.Level;
29 import javax.annotation.Nonnull;
30 import javax.swing.Action;
31 import org.joda.time.DateTime;
32 import org.joda.time.DateTimeZone;
33 import org.openide.nodes.Children;
34 import org.openide.nodes.PropertySupport;
35 import org.openide.nodes.Sheet;
36 import org.openide.util.NbBundle;
37 import org.openide.util.Utilities;
38 import org.openide.util.lookup.Lookups;
81 super(Children.LEAF, Lookups.fixed(event, file, artifact));
94 super(Children.LEAF, Lookups.fixed(event, file));
102 "NodeProperty.displayName.icon=Icon",
103 "NodeProperty.displayName.description=Description",
104 "NodeProperty.displayName.eventType=Event Type",
105 "NodeProperty.displayName.known=Known",
106 "NodeProperty.displayName.dateTime=Date/Time"})
108 Sheet sheet = super.createSheet();
109 Sheet.Set properties = sheet.get(Sheet.PROPERTIES);
110 if (properties == null) {
111 properties = Sheet.createPropertiesSet();
112 sheet.put(properties);
115 properties.put(
new NodeProperty<>(
"icon", Bundle.NodeProperty_displayName_icon(),
"icon",
true));
118 properties.put(
new NodeProperty<>(
"eventType", Bundle.NodeProperty_displayName_eventType(),
"event type",
event.getEventType().getDisplayName()));
136 "EventNode.getAction.errorTitle=Error getting actions",
137 "EventNode.getAction.linkedFileMessage=There was a problem getting actions for the selected result. "
138 +
" The 'View File in Timeline' action will not be available."})
140 List<Action> actionsList =
new ArrayList<>();
141 Collections.addAll(actionsList, super.getActions(context));
148 if (artifact != null) {
152 if (linkedfile != null) {
156 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting linked file from blackboard artifact{0}.", artifact.
getArtifactID()), ex);
168 actionsList.addAll(factoryActions);
169 if (factoryActions.isEmpty()) {
176 return actionsList.toArray(
new Action[actionsList.size()]);
190 if (pathIDAttribute != null) {
192 if (contentID != -1) {
193 return artifact.getSleuthkitCase().getAbstractFileById(contentID);
206 throw new UnsupportedOperationException(
"Not supported yet.");
211 return getClass().getName();
218 final private class TimeProperty extends PropertySupport.ReadWrite<String> {
227 TimeProperty(String name, String displayName, String shortDescription, String value) {
228 super(name, String.class, displayName, shortDescription);
229 setValue(
"suppressCustomEditor", Boolean.TRUE);
234 }
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
235 logger.log(Level.SEVERE,
"Unexpected error setting date/time property on EventNode explorer node", ex);
242 public String
getValue() throws IllegalAccessException, InvocationTargetException {
247 public void setValue(String newValue)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
250 firePropertyChange(
"time", oldValue, newValue);
266 SleuthkitCase sleuthkitCase = eventsModel.getSleuthkitCase();
272 final TimelineEvent eventById = eventsModel.getEventById(eventID);
277 return new EventNode(eventById, file, blackboardArtifact);
284 final Collection<BlackboardArtifact> selectedArtifactsList
285 =
new HashSet<>(Utilities.actionsGlobalContext().lookupAll(
BlackboardArtifact.class));
286 return selectedArtifactsList.size() == 1;
Action[] getActions(boolean context)
static boolean isExactlyOneArtifactSelected()
static List< Action > getActions(File file, boolean isArtifactSource)
static synchronized AddBlackboardArtifactTagAction getInstance()
static synchronized DeleteFileBlackboardArtifactTagAction getInstance()
Content getContentById(long id)
static EventNode createEventNode(final Long eventID, EventsModel eventsModel)
BlackboardArtifact getBlackboardArtifact(long artifactID)
Optional< Long > getArtifactID()
String getDateTimeString()
static ViewFileInTimelineAction createViewSourceFileAction(AbstractFile file)
static ReadOnlyObjectProperty< TimeZone > timeZoneProperty()
static AbstractFile findLinked(BlackboardArtifact artifact)
void setValue(String newValue)
static void error(String title, String message)
synchronized static Logger getLogger(String name)
final TimelineEvent event
static String getImagePath(TimelineEventType type)
static DateTimeFormatter getZonedFormatter()
static final Logger logger
static ViewFileInTimelineAction createViewFileAction(AbstractFile file)