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;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Node;
import org.sleuthkit.datamodel.SleuthkitCase;
@ -31,6 +36,8 @@ import org.sleuthkit.datamodel.SleuthkitCase;
public class RecentFilesChildren extends ChildFactory<RecentFiles.RecentFilesFilter>{
SleuthkitCase skCase;
long latestUpdateTime;
private final static Logger logger = Logger.getLogger(RecentFilesChildren.class.getName());
public RecentFilesChildren(SleuthkitCase skCase) {
this.skCase = skCase;
@ -39,12 +46,45 @@ public class RecentFilesChildren extends ChildFactory<RecentFiles.RecentFilesFil
@Override
protected boolean createKeys(List<RecentFiles.RecentFilesFilter> list) {
list.addAll(Arrays.asList(RecentFiles.RecentFilesFilter.values()));
latestUpdateTime = getLastTime();
return true;
}
@Override
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;
RecentFilesFilter filter;
long latestUpdate;
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.filter = filter;
this.latestUpdate = latestUpdate;
}
@Override
@ -59,7 +61,6 @@ public class RecentFilesFilterChildren extends ChildFactory<Content>{
private String createQuery(){
String query = "select * from tsk_files where ";
long latestUpdate = getLastTime();
long threshold = latestUpdate-filter.getDurationSeconds();
query += "(crtime 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;
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.Children;
import org.openide.nodes.Sheet;
@ -34,12 +40,15 @@ public class RecentFilesFilterNode extends AbstractNode implements DisplayableIt
SleuthkitCase skCase;
RecentFilesFilter filter;
RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter) {
super(Children.create(new RecentFilesFilterChildren(filter, skCase), true), Lookups.singleton(filter));
RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter, long latestUpdate) {
super(Children.create(new RecentFilesFilterChildren(filter, skCase, latestUpdate), true), Lookups.singleton(filter));
super.setName(filter.getName());
super.setDisplayName(filter.getDisplayName());
this.skCase = skCase;
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");
}

View File

@ -30,10 +30,15 @@ public class SearchFilters implements AutopsyVisitableItem{
SleuthkitCase skCase;
public enum FileSearchFilter implements AutopsyVisitableItem {
TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", Arrays.asList(".jpg", ".jpeg", ".png", ".psd", ".nef")),
TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", Arrays.asList(".mov", ".avi", ".m4v")),
TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", Arrays.asList(".mp3", ".aac", ".wav", ".ogg", ".wma", ".m4a")),
TSK_DOCUMENT_FILTER(3, "TSK_DOCUMENT_FILTER", "Documents", Arrays.asList(".doc", ".docx", ".pdf", ".xls"));
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(".aaf", ".3gp", ".asf", ".avi", ".m1v", ".m2v", ".m4v",
".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;
String name;

View File

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