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.Arrays;
25 import java.util.List;
26 import java.util.Observable;
27 import java.util.Observer;
28 import java.util.logging.Level;
29 import org.openide.nodes.AbstractNode;
30 import org.openide.nodes.ChildFactory;
31 import org.openide.nodes.Children;
32 import org.openide.nodes.Node;
33 import org.openide.nodes.Sheet;
34 import org.openide.util.NbBundle;
35 import org.openide.util.lookup.Lookups;
72 this.displayName = displayName;
85 return this.displayName;
100 return v.
visit(
this);
112 private static final String
NAME = NbBundle.getMessage(
FileSize.class,
"FileSize.fileSizeRootNode.name");
117 super.setDisplayName(NAME);
118 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/file-size-16.png");
128 return v.
visit(
this);
133 Sheet s = super.createSheet();
134 Sheet.Set ss = s.get(Sheet.PROPERTIES);
136 ss = Sheet.createPropertiesSet();
140 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.name.name"),
141 NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.name.displayName"),
142 NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.name.desc"),
149 return getClass().getName();
156 public static class FileSizeRootChildren extends ChildFactory<org.sleuthkit.autopsy.datamodel.FileSize.FileSizeFilter> {
185 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
187 public void propertyChange(PropertyChangeEvent evt) {
188 String eventType = evt.getPropertyName();
202 }
catch (IllegalStateException notUsed) {
219 }
catch (IllegalStateException notUsed) {
226 if (evt.getNewValue() == null) {
260 super(Children.create(
new FileSizeChildren(filter, skCase, null),
true), Lookups.singleton(filter.
getDisplayName()));
273 super(Children.create(
new FileSizeChildren(filter, skCase, o),
true), Lookups.singleton(filter.
getDisplayName()));
276 o.addObserver(
new FileSizeNodeObserver());
280 super.setName(filter.
getName());
283 this.setShortDescription(tooltip);
284 this.setIconBaseWithExtension(
"org/sleuthkit/autopsy/images/file-size-16.png");
302 public void update(Observable o, Object arg) {
308 final long count = FileSizeChildren.calculateItems(skCase, filter);
309 super.setDisplayName(filter.
getDisplayName() +
" (" + count +
")");
314 return v.
visit(
this);
319 Sheet s = super.createSheet();
320 Sheet.Set ss = s.get(Sheet.PROPERTIES);
322 ss = Sheet.createPropertiesSet();
326 ss.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.filterType.name"),
327 NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.filterType.displayName"),
328 NbBundle.getMessage(
this.getClass(),
"FileSize.createSheet.filterType.desc"),
343 static class FileSizeChildren
extends ChildFactory.Detachable<AbstractFile> {
345 private final SleuthkitCase
skCase;
357 FileSizeChildren(
FileSizeFilter filter, SleuthkitCase skCase, Observable o) {
359 this.filter = filter;
364 protected void addNotify() {
365 if (notifier != null) {
366 notifier.addObserver(observer);
371 protected void removeNotify() {
372 if (notifier != null) {
373 notifier.deleteObserver(observer);
377 private final Observer observer =
new FileSizeChildrenObserver();
383 public void update(Observable o, Object arg) {
389 protected boolean createKeys(List<AbstractFile> list) {
390 list.addAll(runFsQuery());
398 query =
"(size >= 50000000 AND size < 200000000)";
401 query =
"(size >= 200000000 AND size < 1000000000)";
405 query =
"(size >= 1000000000)";
409 throw new IllegalArgumentException(
"Unsupported filter type to get files by size: " + filter);
412 query = query +
" AND (type != " + TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS.getFileType() +
")";
417 private List<AbstractFile> runFsQuery() {
418 List<AbstractFile> ret =
new ArrayList<>();
421 String query = makeQuery(filter);
423 ret = skCase.findAllFilesWhere(query);
424 }
catch (Exception e) {
425 logger.log(Level.SEVERE,
"Error getting files for the file size view: " + e.getMessage());
436 static long calculateItems(SleuthkitCase sleuthkitCase, FileSizeFilter filter) {
438 return sleuthkitCase.countFilesWhere(makeQuery(filter));
439 }
catch (TskCoreException ex) {
440 logger.log(Level.SEVERE,
"Error getting files by size search view count", ex);
447 return key.accept(
new ContentVisitor.Default<AbstractNode>() {
448 public FileNode visit(AbstractFile f) {
449 return new FileNode(f, false);
452 public FileNode visit(FsContent f) {
453 return new FileNode(f,
false);
457 public FileNode visit(LayoutFile f) {
458 return new FileNode(f,
false);
462 public FileNode visit(File f) {
463 return new FileNode(f,
false);
467 public FileNode visit(Directory f) {
468 return new FileNode(f,
false);
472 public FileNode visit(LocalFile f) {
473 return new FileNode(f,
false);
477 public FileNode visit(DerivedFile f) {
478 return new FileNode(f,
false);
482 public FileNode visit(VirtualDirectory f) {
483 return new FileNode(f,
false);
487 protected AbstractNode defaultVisit(Content di) {
488 throw new UnsupportedOperationException(
489 NbBundle.getMessage(
this.getClass(),
490 "FileSize.exception.notSupported.msg",
void update(Observable o, Object arg)
FileSize(SleuthkitCase skCase)
public< T > T accept(AutopsyItemVisitor< T > v)
void removeIngestModuleEventListener(final PropertyChangeListener listener)
SleuthkitCase getSleuthkitCase()
static synchronized IngestManager getInstance()
static void removePropertyChangeListener(PropertyChangeListener listener)
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
boolean createKeys(List< FileSizeFilter > list)
Node createNodeForKey(FileSizeFilter key)
final PropertyChangeListener pcl
void addIngestJobEventListener(final PropertyChangeListener listener)
static void addPropertyChangeListener(PropertyChangeListener listener)
FileSizeFilter(int id, String name, String displayName)
void addIngestModuleEventListener(final PropertyChangeListener listener)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void update(Observable o, Object arg)
FileSizeRootChildren(SleuthkitCase skCase)