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