19 package org.sleuthkit.autopsy.datamodel;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.Arrays;
24 import java.util.List;
25 import java.util.Observable;
26 import java.util.Observer;
27 import java.util.logging.Level;
28 import org.openide.nodes.AbstractNode;
29 import org.openide.nodes.ChildFactory;
30 import org.openide.nodes.Children;
31 import org.openide.nodes.Node;
32 import org.openide.nodes.Sheet;
33 import org.openide.util.NbBundle;
34 import org.openide.util.lookup.Lookups;
91 private final PropertyChangeListener
pcl = (PropertyChangeEvent evt) -> {
92 String eventType = evt.getPropertyName();
103 }
catch (IllegalStateException notUsed) {
110 if (evt.getNewValue() == null) {
127 private static final String FNAME = NbBundle.getMessage(FileTypesByExtNode.class,
"FileTypesByExtNode.fname.text");
137 super(Children.create(
new FileTypesByExtNodeChildren(skCase, filter, null),
true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
138 this.filter = filter;
149 private FileTypesByExtNode(SleuthkitCase skCase,
FileTypesByExtension.RootFilter filter, Observable o) {
150 super(Children.create(
new FileTypesByExtNodeChildren(skCase, filter, o),
true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
151 this.filter = filter;
155 private void init() {
157 if (filter == null) {
158 super.setName(FNAME);
159 super.setDisplayName(FNAME);
162 super.setName(filter.getName());
163 super.setDisplayName(filter.getDisplayName());
165 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/file_types.png");
169 public boolean isLeafTypeNode() {
174 public <T> T accept(DisplayableItemNodeVisitor<T> v) {
175 return v.visit(
this);
179 protected Sheet createSheet() {
180 Sheet s = super.createSheet();
181 Sheet.Set ss = s.get(Sheet.PROPERTIES);
183 ss = Sheet.createPropertiesSet();
186 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.name.name"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.name.displayName"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.name.desc"), getName()));
191 public String getItemType() {
196 if (filter == null) {
197 return getClass().getName();
200 return getClass().getName() + filter.getName();
202 return getClass().getName();
230 protected boolean createKeys(List<FileTypesByExtension.SearchFilterInterface> list) {
251 return new FileExtensionNode(key, skCase, notifier);
275 super(Children.create(
new FileExtensionNodeChildren(filter, skCase, o),
true), Lookups.singleton(filter.getDisplayName()));
276 this.filter = filter;
279 o.addObserver(
new ByExtNodeObserver());
282 private void init() {
283 super.setName(filter.getName());
285 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/file-filter-icon.png");
292 public void update(Observable o, Object arg) {
297 private void updateDisplayName() {
298 final long count = FileExtensionNodeChildren.calculateItems(skCase, filter);
299 super.setDisplayName(filter.getDisplayName() +
" (" + count +
")");
304 return v.
visit(
this);
308 protected Sheet createSheet() {
309 Sheet s = super.createSheet();
310 Sheet.Set ss = s.get(Sheet.PROPERTIES);
312 ss = Sheet.createPropertiesSet();
315 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.filterType.name"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.filterType.displayName"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.filterType.desc"), filter.getDisplayName()));
316 String extensions =
"";
317 for (String ext : filter.getFilter()) {
318 extensions +=
"'" + ext +
"', ";
320 extensions = extensions.substring(0, extensions.lastIndexOf(
','));
321 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.fileExt.name"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.fileExt.displayName"), NbBundle.getMessage(
this.getClass(),
"FileTypesByExtNode.createSheet.fileExt.desc"), extensions));
326 public boolean isLeafTypeNode() {
336 public String getItemType() {
367 if (notifier != null) {
374 if (notifier != null) {
384 public void update(Observable o, Object arg) {
397 }
catch (TskCoreException ex) {
398 LOGGER.log(Level.SEVERE,
"Error getting file search view count", ex);
408 }
catch (TskCoreException ex) {
409 LOGGER.log(Level.SEVERE,
"Couldn't get search results", ex);
415 StringBuilder query =
new StringBuilder();
416 query.append(
"(dir_type = ").append(TskData.TSK_FS_NAME_TYPE_ENUM.REG.getValue()).append(
")");
418 query.append(
" AND (known IS NULL OR known != ").append(TskData.FileKnown.KNOWN.getFileKnownValue()).append(
")");
420 query.append(
" AND (NULL");
421 for (String s :
filter.getFilter()) {
422 query.append(
" OR LOWER(name) LIKE LOWER('%").append(s).append(
"')");
425 return query.toString();
430 return key.accept(
new ContentVisitor.Default<AbstractNode>() {
432 public FileNode visit(File f) {
433 return new FileNode(f, false);
457 protected AbstractNode defaultVisit(Content di) {
458 throw new UnsupportedOperationException(NbBundle.getMessage(
this.getClass(),
"FileTypeChildren.exception.notSupported.msg", di.toString()));
468 TSK_IMAGE_FILTER(0,
"TSK_IMAGE_FILTER",
471 TSK_VIDEO_FILTER(1,
"TSK_VIDEO_FILTER",
472 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.tskVideoFilter.text"),
474 TSK_AUDIO_FILTER(2,
"TSK_AUDIO_FILTER",
475 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.tskAudioFilter.text"),
477 TSK_ARCHIVE_FILTER(3,
"TSK_ARCHIVE_FILTER",
478 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.tskArchiveFilter.text"),
480 TSK_DOCUMENT_FILTER(3,
"TSK_DOCUMENT_FILTER",
481 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.tskDocumentFilter.text"),
482 Arrays.asList(
".doc",
".docx",
".pdf",
".xls",
".rtf",
".txt")),
483 TSK_EXECUTABLE_FILTER(3,
"TSK_EXECUTABLE_FILTER",
485 Arrays.asList(
".exe",
".dll",
".bat",
".cmd",
".com"));
487 private final int id;
492 private RootFilter(
int id, String name, String displayName, List<String> filter) {
495 this.displayName = displayName;
496 this.filter = filter;
501 return v.
visit(
this);
516 return this.displayName;
526 public static enum DocumentFilter implements AutopsyVisitableItem, SearchFilterInterface {
528 AUT_DOC_HTML(0,
"AUT_DOC_HTML",
529 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.autDocHtmlFilter.text"),
530 Arrays.asList(
".htm",
".html")),
531 AUT_DOC_OFFICE(1,
"AUT_DOC_OFFICE",
532 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.autDocOfficeFilter.text"),
533 Arrays.asList(
".doc",
".docx",
".odt",
".xls",
".xlsx",
".ppt",
".pptx")),
534 AUT_DOC_PDF(2,
"AUT_DOC_PDF",
535 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.autoDocPdfFilter.text"),
536 Arrays.asList(
".pdf")),
537 AUT_DOC_TXT(3,
"AUT_DOC_TXT",
538 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.autDocTxtFilter.text"),
539 Arrays.asList(
".txt")),
540 AUT_DOC_RTF(4,
"AUT_DOC_RTF",
541 NbBundle.getMessage(
FileTypesByExtension.class,
"FileTypeExtensionFilters.autDocRtfFilter.text"),
542 Arrays.asList(
".rtf"));
544 private final int id;
549 private DocumentFilter(
int id, String name, String displayName, List<String> filter) {
552 this.displayName = displayName;
553 this.filter = filter;
558 return v.
visit(
this);
573 return this.displayName;
583 public static enum ExecutableFilter implements AutopsyVisitableItem, SearchFilterInterface {
591 private final int id;
599 this.displayName = displayName;
600 this.filter = filter;
605 return v.
visit(
this);
620 return this.displayName;
629 interface SearchFilterInterface {
631 public String getName();
635 public String getDisplayName();
637 public List<String> getFilter();
void update(Observable o, Object arg)
void removeIngestModuleEventListener(final PropertyChangeListener listener)
final Observable notifier
FileExtensionNodeChildren(FileTypesByExtension.SearchFilterInterface filter, SleuthkitCase skCase, Observable o)
static List< String > getArchiveExtensions()
static synchronized IngestManager getInstance()
final List< String > filter
static void removePropertyChangeListener(PropertyChangeListener listener)
static long calculateItems(SleuthkitCase sleuthkitCase, FileTypesByExtension.SearchFilterInterface filter)
final List< String > filter
Node createNodeForKey(Content key)
boolean createKeys(List< Content > list)
final FileTypesByExtension.RootFilter filter
DisplayableItemNode(Children children)
static List< String > getVideoExtensions()
final FileTypesByExtension.SearchFilterInterface filter
FileTypesByExtNodeChildren(SleuthkitCase skCase, FileTypesByExtension.RootFilter filter, Observable o)
final PropertyChangeListener pcl
final List< String > filter
static boolean hideKnownFilesInViewsTree()
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
List< String > getFilter()
public< T > T accept(AutopsyItemVisitor< T > v)
FileTypesByExtension(SleuthkitCase skCase)
FileTypesByExtObservable()
void addIngestJobEventListener(final PropertyChangeListener listener)
public< T > T accept(AutopsyItemVisitor< T > v)
final SleuthkitCase skCase
public< T > T accept(AutopsyItemVisitor< T > v)
final SleuthkitCase skCase
static void addPropertyChangeListener(PropertyChangeListener listener)
RootFilter(int id, String name, String displayName, List< String > filter)
Node createNodeForKey(FileTypesByExtension.SearchFilterInterface key)
DocumentFilter(int id, String name, String displayName, List< String > filter)
static List< String > getAudioExtensions()
void addIngestModuleEventListener(final PropertyChangeListener listener)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void update(Observable o, Object arg)
static String createQuery(FileTypesByExtension.SearchFilterInterface filter)
final SleuthkitCase skCase
SleuthkitCase getSleuthkitCase()
ExecutableFilter(int id, String name, String displayName, List< String > filter)
static final Logger LOGGER
static List< String > getImageExtensions()
List< String > getFilter()
boolean createKeys(List< FileTypesByExtension.SearchFilterInterface > list)
List< String > getFilter()
final Observable notifier