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)