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> {
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);
417 private List<AbstractFile> runFsQuery() {
418 List<AbstractFile> ret =
new ArrayList<>();
421 String query = makeQuery(filter);
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)
List< AbstractFile > findAllFilesWhere(String sqlWhereClause)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void update(Observable o, Object arg)
FileSizeRootChildren(SleuthkitCase skCase)