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.Arrays;
 
   25 import java.util.List;
 
   26 import java.util.logging.Level;
 
   27 import javax.swing.Action;
 
   28 import org.joda.time.DateTime;
 
   29 import org.joda.time.DateTimeZone;
 
   30 import org.openide.nodes.Children;
 
   31 import org.openide.nodes.PropertySupport;
 
   32 import org.openide.nodes.Sheet;
 
   33 import org.openide.util.NbBundle;
 
   34 import org.openide.util.lookup.Lookups;
 
   64         super(Children.LEAF, Lookups.fixed(event, file, artifact));
 
   70         super(Children.LEAF, Lookups.fixed(event, file));
 
   77         "NodeProperty.displayName.icon=Icon",
 
   78         "NodeProperty.displayName.description=Description",
 
   79         "NodeProperty.displayName.baseType=Base Type",
 
   80         "NodeProperty.displayName.subType=Sub Type",
 
   81         "NodeProperty.displayName.known=Known",
 
   82         "NodeProperty.displayName.dateTime=Date/Time"})
 
   84         Sheet s = super.createSheet();
 
   85         Sheet.Set properties = s.get(Sheet.PROPERTIES);
 
   86         if (properties == null) {
 
   87             properties = Sheet.createPropertiesSet();
 
   91         properties.put(
new NodeProperty<>(
"icon", Bundle.NodeProperty_displayName_icon(), 
"icon", 
true)); 
 
   93         properties.put(
new NodeProperty<>(
"description", Bundle.NodeProperty_displayName_description(), 
"description", 
event.getFullDescription())); 
 
   94         properties.put(
new NodeProperty<>(
"eventBaseType", Bundle.NodeProperty_displayName_baseType(), 
"base type", 
event.getEventType().getSuperType().getDisplayName())); 
 
   95         properties.put(
new NodeProperty<>(
"eventSubType", Bundle.NodeProperty_displayName_subType(), 
"sub type", 
event.getEventType().getDisplayName())); 
 
   96         properties.put(
new NodeProperty<>(
"Known", Bundle.NodeProperty_displayName_known(), 
"known", 
event.getKnown().toString())); 
 
  114         "EventNode.getAction.errorTitle=Error getting actions",
 
  115         "EventNode.getAction.linkedFileMessage=There was a problem getting actions for the selected result. " 
  116         + 
" The 'View File in Timeline' action will not be available."})
 
  118         Action[] superActions = super.getActions(context);
 
  119         List<Action> actionsList = 
new ArrayList<>();
 
  120         actionsList.addAll(Arrays.asList(superActions));
 
  122         final AbstractFile sourceFile = getLookup().lookup(AbstractFile.class);
 
  128         final BlackboardArtifact artifact = getLookup().lookup(BlackboardArtifact.class);
 
  129         if (artifact != null) {
 
  131                 AbstractFile linkedfile = findLinked(artifact);
 
  132                 if (linkedfile != null) {
 
  135             } 
catch (TskCoreException ex) {
 
  136                 LOGGER.log(Level.SEVERE, MessageFormat.format(
"Error getting linked file from blackboard artifact{0}.", artifact.getArtifactID()), ex); 
 
  141             if (null != sourceFile) {
 
  149         actionsList.addAll(factoryActions);
 
  150         return actionsList.toArray(
new Action[actionsList.size()]);
 
  160         throw new UnsupportedOperationException(
"Not supported yet."); 
 
  165         return getClass().getName();
 
  172     final private class TimeProperty extends PropertySupport.ReadWrite<String> {
 
  181         TimeProperty(String name, String displayName, String shortDescription, String value) {
 
  182             super(name, String.class, displayName, shortDescription);
 
  183             setValue(
"suppressCustomEditor", Boolean.TRUE); 
 
  188                 } 
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
 
  189                     LOGGER.log(Level.SEVERE, 
"Unexpected error setting date/time property on EventNode explorer node", ex); 
 
  196         public String 
getValue() throws IllegalAccessException, InvocationTargetException {
 
  201         public void setValue(String t) 
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
 
  204             firePropertyChange(
"time", oldValue, t); 
 
  223         final SingleEvent eventById = eventsModel.getEventById(eventID);
 
  226         AbstractFile file = sleuthkitCase.getAbstractFileById(eventById.
getFileID());
 
  229             BlackboardArtifact blackboardArtifact = sleuthkitCase.getBlackboardArtifact(eventById.
getArtifactID().get());
 
  230             return new EventNode(eventById, file, blackboardArtifact);
 
  248     static AbstractFile findLinked(BlackboardArtifact artifact) 
throws TskCoreException {
 
  250         BlackboardAttribute pathIDAttribute = artifact.getAttribute(
new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID));
 
  252         if (pathIDAttribute != null) {
 
  253             long contentID = pathIDAttribute.getValueLong();
 
  254             if (contentID != -1) {
 
  255                 return artifact.getSleuthkitCase().getAbstractFileById(contentID);
 
Optional< Long > getArtifactID()
static EventNode createEventNode(final Long eventID, FilteredEventsModel eventsModel)
Action[] getActions(boolean context)
static ReadOnlyObjectProperty< TimeZone > getTimeZone()
static List< Action > getActions(File file, boolean isArtifactSource)
String getDateTimeString()
static ViewFileInTimelineAction createViewSourceFileAction(AbstractFile file)
static final long serialVersionUID
SleuthkitCase getSleuthkitCase()
static void error(String title, String message)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
static final Logger LOGGER
static DateTimeFormatter getZonedFormatter()
static ViewFileInTimelineAction createViewFileAction(AbstractFile file)