From a7515b7da85b91b4283f8cd0a397897b63bd20e0 Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Fri, 2 Mar 2012 14:59:34 -0500 Subject: [PATCH 1/2] TSK-382: Populate text area in results tree with Extracted Content name TSK-380: Timeline view bugs --- .../autopsy/datamodel/ArtifactTypeNode.java | 2 +- .../datamodel/ExtractedContentNode.java | 3 +- .../datamodel/FileSearchFilterNode.java | 2 +- .../autopsy/datamodel/RecentFiles.java | 30 +++++++++---------- .../datamodel/RecentFilesChildren.java | 14 ++++++--- .../datamodel/RecentFilesFilterChildren.java | 23 ++++++++------ .../datamodel/RecentFilesFilterNode.java | 19 ++++++------ .../autopsy/datamodel/RecentFilesNode.java | 3 +- .../autopsy/datamodel/SearchFiltersNode.java | 3 +- 9 files changed, 56 insertions(+), 43 deletions(-) diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java index 36db57d7ee..ec24d7f949 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ArtifactTypeNode.java @@ -39,7 +39,7 @@ public class ArtifactTypeNode extends AbstractNode implements DisplayableItemNod int childCount = 0; ArtifactTypeNode(BlackboardArtifact.ARTIFACT_TYPE type, SleuthkitCase skCase) { - super(Children.create(new ArtifactTypeChildren(type, skCase), true), Lookups.singleton(type)); + super(Children.create(new ArtifactTypeChildren(type, skCase), true), Lookups.singleton(type.getDisplayName())); super.setName(type.getLabel()); // NOTE: This completely destroys our lazy-loading ideal // a performance increase might be had by adding a diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java index b1e919c682..c118da33a7 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/ExtractedContentNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; +import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -31,7 +32,7 @@ public class ExtractedContentNode extends AbstractNode implements DisplayableIte public static final String EXTRACTED_NAME = "Extracted Content"; public ExtractedContentNode(SleuthkitCase skCase){ - super(Children.create(new ExtractedContentChildren(skCase), true)); + super(Children.create(new ExtractedContentChildren(skCase), true), Lookups.singleton(EXTRACTED_NAME)); super.setName(EXTRACTED_NAME); super.setDisplayName(EXTRACTED_NAME); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/artifact-icon.png"); diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java index f33eb82536..f2f78e7042 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java @@ -35,7 +35,7 @@ public class FileSearchFilterNode extends AbstractNode implements DisplayableIte SleuthkitCase skCase; FileSearchFilterNode(FileSearchFilter filter, SleuthkitCase skCase) { - super(Children.create(new FileSearchFilterChildren(filter, skCase), true), Lookups.singleton(filter)); + super(Children.create(new FileSearchFilterChildren(filter, skCase), true), Lookups.singleton(filter.getDisplayName())); super.setName(filter.getName()); super.setDisplayName(filter.getDisplayName()); this.filter = filter; diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java index 6928fa309c..5c1c253dc1 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFiles.java @@ -29,26 +29,24 @@ public class RecentFiles implements AutopsyVisitableItem { SleuthkitCase skCase; public enum RecentFilesFilter implements AutopsyVisitableItem { - AUT_1DAY_FILTER(0, "AUT_1DAY_FILTER", "Last 1 Day", 1), - AUT_2DAY_FILTER(0, "AUT_2DAY_FILTER", "Last 2 Days", 2), - AUT_3DAY_FILTER(0, "AUT_3DAY_FILTER", "Last 3 Days", 3), - AUT_4DAY_FILTER(0, "AUT_4DAY_FILTER", "Last 4 Days", 4), - AUT_5DAY_FILTER(0, "AUT_5DAY_FILTER", "Last 5 Days", 5), - AUT_10DAY_FILTER(0, "AUT_10DAY_FILTER", "Last 10 Days", 10), - AUT_15DAY_FILTER(0, "AUT_15DAY_FILTER", "Last 15 Days", 15); + AUT_0DAY_FILTER(0, "AUT_0DAY_FILTER", "Final Day", 0), + AUT_1DAY_FILTER(0, "AUT_1DAY_FILTER", "Final Day - 1", 1), + AUT_2DAY_FILTER(0, "AUT_2DAY_FILTER", "Final Day - 2", 2), + AUT_3DAY_FILTER(0, "AUT_3DAY_FILTER", "Final Day - 3", 3), + AUT_4DAY_FILTER(0, "AUT_4DAY_FILTER", "Final Day - 4", 4), + AUT_5DAY_FILTER(0, "AUT_5DAY_FILTER", "Final Day - 5", 5), + AUT_6DAY_FILTER(0, "AUT_6DAY_FILTER", "Final Day - 6", 6); - int id; - String name; - String displayName; - int durationDays; - int durationSeconds; + private int id; + private String name; + private String displayName; + private int durationDays; private RecentFilesFilter(int id, String name, String displayName, int durationDays){ this.id = id; this.name = name; this.displayName = displayName; this.durationDays = durationDays; - this.durationSeconds = durationDays*60*60*24; } public String getName(){ @@ -62,9 +60,9 @@ public class RecentFiles implements AutopsyVisitableItem { public String getDisplayName(){ return this.displayName; } - - public int getDurationSeconds() { - return this.durationSeconds; + + public int getDurationDays() { + return this.durationDays; } @Override diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java index 7f1245fef2..6c471c5f96 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Arrays; +import java.util.Calendar; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -36,7 +37,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; public class RecentFilesChildren extends ChildFactory{ SleuthkitCase skCase; - long latestUpdateTime; + Calendar lastDay; private final static Logger logger = Logger.getLogger(RecentFilesChildren.class.getName()); public RecentFilesChildren(SleuthkitCase skCase) { @@ -46,13 +47,18 @@ public class RecentFilesChildren extends ChildFactory list) { list.addAll(Arrays.asList(RecentFiles.RecentFilesFilter.values())); - latestUpdateTime = getLastTime(); + lastDay = Calendar.getInstance(); + lastDay.setTimeInMillis(getLastTime()*1000); + lastDay.set(Calendar.HOUR_OF_DAY, 0); + lastDay.set(Calendar.MINUTE, 0); + lastDay.set(Calendar.SECOND, 0); + lastDay.set(Calendar.MILLISECOND, 0); return true; } - + @Override protected Node createNodeForKey(RecentFiles.RecentFilesFilter key){ - return new RecentFilesFilterNode(skCase, key, latestUpdateTime); + return new RecentFilesFilterNode(skCase, key, lastDay); } private long getLastTime() { diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java index 36ad641afa..8484619108 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterChildren.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -44,13 +45,14 @@ public class RecentFilesFilterChildren extends ChildFactory{ SleuthkitCase skCase; RecentFilesFilter filter; - long latestUpdate; + Calendar prevDay; private final static Logger logger = Logger.getLogger(RecentFilesFilterChildren.class.getName()); - RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase, long latestUpdate) { + RecentFilesFilterChildren(RecentFilesFilter filter, SleuthkitCase skCase, Calendar lastDay) { this.skCase = skCase; this.filter = filter; - this.latestUpdate = latestUpdate; + this.prevDay = (Calendar) lastDay.clone(); + prevDay.add(Calendar.DATE, -filter.getDurationDays()); } @Override @@ -61,11 +63,14 @@ public class RecentFilesFilterChildren extends ChildFactory{ private String createQuery(){ String query = "select * from tsk_files where "; - long threshold = latestUpdate-filter.getDurationSeconds(); - query += "(crtime between " + threshold + " and " + latestUpdate + ") or "; - query += "(ctime between " + threshold + " and " + latestUpdate + ") or "; - query += "(atime between " + threshold + " and " + latestUpdate + ") or "; - query += "(mtime between " + threshold + " and " + latestUpdate + ")"; + long lowerLimit = prevDay.getTimeInMillis()/1000; + prevDay.add(Calendar.DATE, 1); + prevDay.add(Calendar.MILLISECOND, -1); + long upperLimit = prevDay.getTimeInMillis()/1000; + query += "(crtime between " + lowerLimit + " and " + upperLimit + ") or "; + query += "(ctime between " + lowerLimit + " and " + upperLimit + ") or "; + query += "(atime between " + lowerLimit + " and " + upperLimit + ") or "; + query += "(mtime between " + lowerLimit + " and " + upperLimit + ")"; return query; } @@ -74,7 +79,7 @@ public class RecentFilesFilterChildren extends ChildFactory{ try { ResultSet rs = skCase.runQuery(createQuery()); for(FsContent c : skCase.resultSetToFsContents(rs)){ - if(!c.getName().equals(".") && !c.getName().equals("..")){ + if(c.isFile()){ list.add(c); } } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java index a32e229890..da8556b6ab 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java @@ -18,11 +18,8 @@ */ 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.Calendar; +import java.util.Locale; import java.util.logging.Logger; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; @@ -39,15 +36,19 @@ public class RecentFilesFilterNode extends AbstractNode implements DisplayableIt SleuthkitCase skCase; RecentFilesFilter filter; + private final static Logger logger = Logger.getLogger(RecentFilesFilterNode.class.getName()); - RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter, long latestUpdate) { - super(Children.create(new RecentFilesFilterChildren(filter, skCase, latestUpdate), true), Lookups.singleton(filter)); + RecentFilesFilterNode(SleuthkitCase skCase, RecentFilesFilter filter, Calendar lastDay) { + super(Children.create(new RecentFilesFilterChildren(filter, skCase, lastDay), true), Lookups.singleton(filter.getDisplayName())); 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(); + Calendar prevDay = (Calendar) lastDay.clone(); + prevDay.add(Calendar.DATE, -filter.getDurationDays()); + String tooltip = prevDay.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH) + " " + + prevDay.get(Calendar.DATE) + ", " + + prevDay.get(Calendar.YEAR); this.setShortDescription(tooltip); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/recent-icon.png"); } diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java index 365dacc3f6..23e4cb3e6a 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; +import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -31,7 +32,7 @@ public class RecentFilesNode extends AbstractNode implements DisplayableItemNode SleuthkitCase skCase; RecentFilesNode(SleuthkitCase skCase) { - super(Children.create(new RecentFilesChildren(skCase), true)); + super(Children.create(new RecentFilesChildren(skCase), true), Lookups.singleton("Recent Files")); super.setName("Recent Files"); super.setDisplayName("Recent Files"); this.skCase = skCase; diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java index d285aea416..290aac3fb2 100644 --- a/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java +++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.datamodel; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; +import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -31,7 +32,7 @@ public class SearchFiltersNode extends AbstractNode implements DisplayableItemNo SleuthkitCase skCase; SearchFiltersNode(SleuthkitCase skCase) { - super(Children.create(new SearchFiltersChildren(skCase), true)); + super(Children.create(new SearchFiltersChildren(skCase), true), Lookups.singleton("Search Filters")); super.setName("File Types"); super.setDisplayName("File Types"); this.skCase = skCase; From 8f61a0074b7221169408d2ec5dab43f195940c0a Mon Sep 17 00:00:00 2001 From: Dick Fickling Date: Fri, 2 Mar 2012 15:22:02 -0500 Subject: [PATCH 2/2] TSK-378: Provide feedback while doing search --- .../keywordsearch/KeywordSearchPanel.form | 17 +++++--------- .../keywordsearch/KeywordSearchPanel.java | 23 ++++++++----------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.form index 11f44f91ab..29e2aa8b23 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.form @@ -43,11 +43,11 @@ - + - - + + @@ -79,19 +79,14 @@ - + - - - - - - - + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java index 7ee4cc9aad..e5927f52d7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java @@ -145,7 +145,7 @@ public class KeywordSearchPanel extends AbstractKeywordSearchPerformer{ searchBoxPanel.setBorder(new javax.swing.border.LineBorder(java.awt.Color.lightGray, 1, true)); searchBoxPanel.setPreferredSize(new java.awt.Dimension(255, 18)); - searchBox.setFont(new java.awt.Font("Tahoma", 0, 12)); + searchBox.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N searchBox.setForeground(java.awt.Color.lightGray); searchBox.setText(org.openide.util.NbBundle.getMessage(KeywordSearchPanel.class, "KeywordSearchPanel.searchBox.text")); // NOI18N searchBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 3, 4, 1)); @@ -175,15 +175,12 @@ public class KeywordSearchPanel extends AbstractKeywordSearchPerformer{ .addGroup(searchBoxPanelLayout.createSequentialGroup() .addComponent(settingsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(searchBox, javax.swing.GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)) + .addComponent(searchBox, javax.swing.GroupLayout.DEFAULT_SIZE, 216, Short.MAX_VALUE)) ); searchBoxPanelLayout.setVerticalGroup( searchBoxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(searchBoxPanelLayout.createSequentialGroup() - .addGroup(searchBoxPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(settingsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(searchBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(settingsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) ); listsButton.setText(org.openide.util.NbBundle.getMessage(KeywordSearchPanel.class, "KeywordSearchPanel.listsButton.text")); // NOI18N @@ -204,11 +201,11 @@ public class KeywordSearchPanel extends AbstractKeywordSearchPerformer{ layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addContainerGap() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(listsButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(searchBoxPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(34, Short.MAX_VALUE)) + .addComponent(searchBoxPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(2, 2, 2)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -220,13 +217,11 @@ public class KeywordSearchPanel extends AbstractKeywordSearchPerformer{ private void searchBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchBoxActionPerformed if (filesIndexed == 0) return; - - this.getTopLevelAncestor().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - + getRootPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { search(); } finally { - this.getTopLevelAncestor().setCursor(null); + getRootPane().setCursor(null); } }//GEN-LAST:event_searchBoxActionPerformed