Recent Files and File Types adjustments in Directory Tree

This commit is contained in:
Dick Fickling 2012-02-23 15:41:17 -05:00
parent 608337d3b7
commit 056867d61a
5 changed files with 66 additions and 43 deletions

View File

@ -18,8 +18,13 @@
*/ */
package org.sleuthkit.autopsy.datamodel; package org.sleuthkit.autopsy.datamodel;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openide.nodes.ChildFactory; import org.openide.nodes.ChildFactory;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.SleuthkitCase;
@ -31,6 +36,8 @@ import org.sleuthkit.datamodel.SleuthkitCase;
public class RecentFilesChildren extends ChildFactory<RecentFiles.RecentFilesFilter>{ public class RecentFilesChildren extends ChildFactory<RecentFiles.RecentFilesFilter>{
SleuthkitCase skCase; SleuthkitCase skCase;
long latestUpdateTime;
private final static Logger logger = Logger.getLogger(RecentFilesChildren.class.getName());
public RecentFilesChildren(SleuthkitCase skCase) { public RecentFilesChildren(SleuthkitCase skCase) {
this.skCase = skCase; this.skCase = skCase;
@ -39,12 +46,45 @@ public class RecentFilesChildren extends ChildFactory<RecentFiles.RecentFilesFil
@Override @Override
protected boolean createKeys(List<RecentFiles.RecentFilesFilter> list) { protected boolean createKeys(List<RecentFiles.RecentFilesFilter> list) {
list.addAll(Arrays.asList(RecentFiles.RecentFilesFilter.values())); list.addAll(Arrays.asList(RecentFiles.RecentFilesFilter.values()));
latestUpdateTime = getLastTime();
return true; return true;
} }
@Override @Override
protected Node createNodeForKey(RecentFiles.RecentFilesFilter key){ protected Node createNodeForKey(RecentFiles.RecentFilesFilter key){
return new RecentFilesFilterNode(skCase, key); return new RecentFilesFilterNode(skCase, key, latestUpdateTime);
}
private long getLastTime() {
String query = createMaxQuery("crtime");
long maxcr = runTimeQuery(query);
query = createMaxQuery("ctime");
long maxc = runTimeQuery(query);
query = createMaxQuery("mtime");
long maxm = runTimeQuery(query);
query = createMaxQuery("atime");
long maxa = runTimeQuery(query);
return Math.max(maxcr, Math.max(maxc, Math.max(maxm, maxa)));
}
private String createMaxQuery(String attr){
return "select max(" + attr + ") from tsk_files where " + attr + " < " + System.currentTimeMillis()/1000;
}
private long runTimeQuery(String query) {
long result = 0;
try {
ResultSet rs = skCase.runQuery(query);
result = rs.getLong(1);
Statement s = rs.getStatement();
rs.close();
if (s != null)
s.close();
} catch (SQLException ex) {
Logger.getLogger(RecentFilesFilterChildren.class.getName())
.log(Level.INFO, "Couldn't get search results", ex);
}
return result;
} }
} }

View File

@ -44,11 +44,13 @@ public class RecentFilesFilterChildren extends ChildFactory<Content>{
SleuthkitCase skCase; SleuthkitCase skCase;
RecentFilesFilter filter; RecentFilesFilter filter;
long latestUpdate;
private final static Logger logger = Logger.getLogger(RecentFilesFilterChildren.class.getName()); private final static Logger logger = Logger.getLogger(RecentFilesFilterChildren.class.getName());
RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase) { RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase, long latestUpdate) {
this.skCase = skCase; this.skCase = skCase;
this.filter = filter; this.filter = filter;
this.latestUpdate = latestUpdate;
} }
@Override @Override
@ -59,7 +61,6 @@ public class RecentFilesFilterChildren extends ChildFactory<Content>{
private String createQuery(){ private String createQuery(){
String query = "select * from tsk_files where "; String query = "select * from tsk_files where ";
long latestUpdate = getLastTime();
long threshold = latestUpdate-filter.getDurationSeconds(); long threshold = latestUpdate-filter.getDurationSeconds();
query += "(crtime between " + threshold + " and " + latestUpdate + ") or "; query += "(crtime between " + threshold + " and " + latestUpdate + ") or ";
query += "(ctime between " + threshold + " and " + latestUpdate + ") or "; query += "(ctime between " + threshold + " and " + latestUpdate + ") or ";
@ -109,36 +110,4 @@ public class RecentFilesFilterChildren extends ChildFactory<Content>{
}); });
} }
private long getLastTime() {
String query = createMaxQuery("crtime");
long maxcr = runTimeQuery(query);
query = createMaxQuery("ctime");
long maxc = runTimeQuery(query);
query = createMaxQuery("mtime");
long maxm = runTimeQuery(query);
query = createMaxQuery("atime");
long maxa = runTimeQuery(query);
return Math.max(maxcr, Math.max(maxc, Math.max(maxm, maxa)));
}
private String createMaxQuery(String attr){
return "select max(" + attr + ") from tsk_files where " + attr + " < " + System.currentTimeMillis()/1000;
}
private long runTimeQuery(String query) {
long result = 0;
try {
ResultSet rs = skCase.runQuery(query);
result = rs.getLong(1);
Statement s = rs.getStatement();
rs.close();
if (s != null)
s.close();
} catch (SQLException ex) {
Logger.getLogger(RecentFilesFilterChildren.class.getName())
.log(Level.INFO, "Couldn't get search results", ex);
}
return result;
}
} }

View File

@ -18,6 +18,12 @@
*/ */
package org.sleuthkit.autopsy.datamodel; package org.sleuthkit.autopsy.datamodel;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openide.nodes.AbstractNode; import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children; import org.openide.nodes.Children;
import org.openide.nodes.Sheet; import org.openide.nodes.Sheet;
@ -34,12 +40,15 @@ public class RecentFilesFilterNode extends AbstractNode implements DisplayableIt
SleuthkitCase skCase; SleuthkitCase skCase;
RecentFilesFilter filter; RecentFilesFilter filter;
RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter) { RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter, long latestUpdate) {
super(Children.create(new RecentFilesFilterChildren(filter, skCase), true), Lookups.singleton(filter)); super(Children.create(new RecentFilesFilterChildren(filter, skCase, latestUpdate), true), Lookups.singleton(filter));
super.setName(filter.getName()); super.setName(filter.getName());
super.setDisplayName(filter.getDisplayName()); super.setDisplayName(filter.getDisplayName());
this.skCase = skCase; this.skCase = skCase;
this.filter = filter; this.filter = filter;
String tooltip = "Between " + new Date((latestUpdate-filter.getDurationSeconds())*1000).toString();
tooltip += "\n and " + new Date(latestUpdate*1000).toString();
this.setShortDescription(tooltip);
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/recent-icon.png"); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/recent-icon.png");
} }

View File

@ -30,10 +30,15 @@ public class SearchFilters implements AutopsyVisitableItem{
SleuthkitCase skCase; SleuthkitCase skCase;
public enum FileSearchFilter implements AutopsyVisitableItem { public enum FileSearchFilter implements AutopsyVisitableItem {
TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", Arrays.asList(".jpg", ".jpeg", ".png", ".psd", ".nef")), TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", Arrays.asList(".jpg", ".jpeg", ".png", ".psd", ".nef", ".tiff")),
TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", Arrays.asList(".mov", ".avi", ".m4v")), TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos",
TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", Arrays.asList(".mp3", ".aac", ".wav", ".ogg", ".wma", ".m4a")), Arrays.asList(".aaf", ".3gp", ".asf", ".avi", ".m1v", ".m2v", ".m4v",
TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls")); ".mov", ".mpeg", ".mpg", ".mpe", ".mp4", ".rm", ".wmv", ".mpv")),
TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio",
Arrays.asList(".aiff", ".aif", ".flac", ".wav", ".m4a", ".ape", ".wma", ".mp2",
".mp1", ".mp3", ".aac", ".mp4", ".m4p", ".m1a", ".m2a", ".m4r", ".mpa",
".m3u", ".mid", ".midi", ".ogg")),
TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls", ".rtf", ".txt"));
int id; int id;
String name; String name;

View File

@ -32,8 +32,8 @@ public class SearchFiltersNode extends AbstractNode implements DisplayableItemNo
SearchFiltersNode(SleuthkitCase skCase) { SearchFiltersNode(SleuthkitCase skCase) {
super(Children.create(new SearchFiltersChildren(skCase), true)); super(Children.create(new SearchFiltersChildren(skCase), true));
super.setName("Search Filters"); super.setName("File Types");
super.setDisplayName("Search Filters"); super.setDisplayName("File Types");
this.skCase = skCase; this.skCase = skCase;
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/filter-icon.png"); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/filter-icon.png");
} }