19 package org.sleuthkit.autopsy.datamodel;
 
   21 import java.beans.PropertyChangeEvent;
 
   22 import java.beans.PropertyChangeListener;
 
   23 import java.util.ArrayList;
 
   24 import java.util.EnumSet;
 
   25 import java.util.List;
 
   28 import java.util.logging.Level;
 
   29 import java.util.stream.Collectors;
 
   30 import org.apache.commons.lang3.StringUtils;
 
   31 import org.openide.nodes.Children;
 
   32 import org.openide.nodes.Sheet;
 
   33 import org.openide.util.NbBundle;
 
   34 import org.openide.util.WeakListeners;
 
   56     @NbBundle.Messages(
"AbstractAbstractFileNode.addFileProperty.desc=no description")
 
   57     private static final String 
NO_DESCR = AbstractAbstractFileNode_addFileProperty_desc();
 
   67         String ext = abstractFile.getNameExtension();
 
   68         if (StringUtils.isNotBlank(ext)) {
 
  101     private final PropertyChangeListener 
pcl = (PropertyChangeEvent evt) -> {
 
  102         String eventType = evt.getPropertyName();
 
  110             if ((moduleContentEvent.getSource() instanceof Content) == 
false) {
 
  113             Content newContent = (Content) moduleContentEvent.getSource();
 
  116             if (
getContent().getId() == newContent.getId()) {
 
  119                     Children parentsChildren = getParentNode().getChildren();
 
  124                     if (parentsChildren instanceof ContentChildren) {
 
  125                         ((ContentChildren) parentsChildren).refreshChildren();
 
  126                         parentsChildren.getNodesCount();
 
  128                 } 
catch (NullPointerException ex) {
 
  133             if (evt.getNewValue() == null) {
 
  139             if (event.getAddedTag().getContent().equals(content)) {
 
  144             if (event.getDeletedTagInfo().getContentID() == content.getId()) {
 
  158     private final PropertyChangeListener 
weakPcl = WeakListeners.propertyChange(pcl, null);
 
  161         this.setSheet(createSheet());
 
  164     @NbBundle.Messages({
"AbstractAbstractFileNode.nameColLbl=Name",
 
  165         "AbstractAbstractFileNode.locationColLbl=Location",
 
  166         "AbstractAbstractFileNode.modifiedTimeColLbl=Modified Time",
 
  167         "AbstractAbstractFileNode.changeTimeColLbl=Change Time",
 
  168         "AbstractAbstractFileNode.accessTimeColLbl=Access Time",
 
  169         "AbstractAbstractFileNode.createdTimeColLbl=Created Time",
 
  170         "AbstractAbstractFileNode.sizeColLbl=Size",
 
  171         "AbstractAbstractFileNode.flagsDirColLbl=Flags(Dir)",
 
  172         "AbstractAbstractFileNode.flagsMetaColLbl=Flags(Meta)",
 
  173         "AbstractAbstractFileNode.modeColLbl=Mode",
 
  174         "AbstractAbstractFileNode.useridColLbl=UserID",
 
  175         "AbstractAbstractFileNode.groupidColLbl=GroupID",
 
  176         "AbstractAbstractFileNode.metaAddrColLbl=Meta Addr.",
 
  177         "AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr.",
 
  178         "AbstractAbstractFileNode.typeDirColLbl=Type(Dir)",
 
  179         "AbstractAbstractFileNode.typeMetaColLbl=Type(Meta)",
 
  180         "AbstractAbstractFileNode.knownColLbl=Known",
 
  181         "AbstractAbstractFileNode.inHashsetsColLbl=In Hashsets",
 
  182         "AbstractAbstractFileNode.md5HashColLbl=MD5 Hash",
 
  183         "AbstractAbstractFileNode.objectId=Object ID",
 
  184         "AbstractAbstractFileNode.mimeType=MIME Type",
 
  185         "AbstractAbstractFileNode.extensionColLbl=Extension"})
 
  188         NAME(AbstractAbstractFileNode_nameColLbl()),
 
  189         LOCATION(AbstractAbstractFileNode_locationColLbl()),
 
  190         MOD_TIME(AbstractAbstractFileNode_modifiedTimeColLbl()),
 
  194         SIZE(AbstractAbstractFileNode_sizeColLbl()),
 
  197         MODE(AbstractAbstractFileNode_modeColLbl()),
 
  198         USER_ID(AbstractAbstractFileNode_useridColLbl()),
 
  199         GROUP_ID(AbstractAbstractFileNode_groupidColLbl()),
 
  202         TYPE_DIR(AbstractAbstractFileNode_typeDirColLbl()),
 
  204         KNOWN(AbstractAbstractFileNode_knownColLbl()),
 
  205         HASHSETS(AbstractAbstractFileNode_inHashsetsColLbl()),
 
  206         MD5HASH(AbstractAbstractFileNode_md5HashColLbl()),
 
  214             this.displayString = displayString;
 
  219             return displayString;
 
  231         map.put(NAME.toString(), getContentDisplayName(content));
 
  237         map.put(SIZE.toString(), content.getSize());
 
  238         map.put(FLAGS_DIR.toString(), content.getDirFlagAsString());
 
  239         map.put(FLAGS_META.toString(), content.getMetaFlagsAsString());
 
  240         map.put(MODE.toString(), content.getModesAsString());
 
  241         map.put(USER_ID.toString(), content.getUid());
 
  242         map.put(GROUP_ID.toString(), content.getGid());
 
  243         map.put(META_ADDR.toString(), content.getMetaAddr());
 
  244         map.put(ATTR_ADDR.toString(), content.getAttrType().getValue() + 
"-" + content.getAttributeId());
 
  245         map.put(TYPE_DIR.toString(), content.getDirType().getLabel());
 
  246         map.put(TYPE_META.toString(), content.getMetaType().toString());
 
  247         map.put(KNOWN.toString(), content.getKnown().getName());
 
  249         map.put(MD5HASH.toString(), StringUtils.defaultString(content.getMd5Hash()));
 
  250         map.put(ObjectID.toString(), content.getId());
 
  251         map.put(MIMETYPE.toString(), StringUtils.defaultString(content.getMIMEType()));
 
  252         map.put(EXTENSION.toString(), content.getNameExtension());
 
  262     @NbBundle.Messages(
"AbstractAbstractFileNode.tagsProperty.displayName=Tags")
 
  264         List<ContentTag> tags = 
new ArrayList<>();
 
  267         } 
catch (TskCoreException ex) {
 
  268             logger.log(Level.SEVERE, 
"Failed to get tags for content " + content.getName(), ex);
 
  270         ss.put(
new NodeProperty<>(
"Tags", AbstractAbstractFileNode_tagsProperty_displayName(),
 
  271                 NO_DESCR, tags.stream().map(t -> t.getName().getDisplayName())
 
  273                         .collect(Collectors.joining(
", "))));
 
  278             return file.getUniquePath();
 
  279         } 
catch (TskCoreException ex) {
 
  280             logger.log(Level.SEVERE, 
"Except while calling Content.getUniquePath() on " + file, ex); 
 
  285     static String getContentDisplayName(AbstractFile file) {
 
  286         String name = file.getName();
 
  300             return StringUtils.join(file.getHashSetNames(), 
", ");
 
  301         } 
catch (TskCoreException tskCoreException) {
 
  302             logger.log(Level.WARNING, 
"Error getting hashset hits: ", tskCoreException); 
 
static final Logger logger
 
void removeIngestModuleEventListener(final PropertyChangeListener listener)
 
static final String DOTDIR
 
static String getHashSetHitsForFile(AbstractFile file)
 
static String getStringTime(long epochSeconds, TimeZone tzone)
 
static List< String > getArchiveExtensions()
 
final String displayString
 
static synchronized IngestManager getInstance()
 
static String getContentPath(AbstractFile file)
 
static final String DOTDOTDIR
 
void addTagProperty(Sheet.Set ss)
 
static void fillPropertyMap(Map< String, Object > map, AbstractFile content)
 
TagsManager getTagsManager()
 
static final Set< Case.Events > CASE_EVENTS_OF_INTEREST
 
static final String NO_DESCR
 
AbstractFilePropertyType(String displayString)
 
void addIngestModuleEventListener(final PropertyChangeListener listener)
 
static Case getCurrentCase()
 
synchronized static Logger getLogger(String name)
 
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
 
final PropertyChangeListener pcl
 
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
 
final PropertyChangeListener weakPcl