diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-filter-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-filter-icon.png
new file mode 100644
index 0000000000..7897850f32
Binary files /dev/null and b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/file-filter-icon.png differ
diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/filter-icon.png b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/keyword-search-icon.png
similarity index 100%
rename from CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/filter-icon.png
rename to CoreComponentInterfaces/src/org/sleuthkit/autopsy/images/keyword-search-icon.png
diff --git a/CoreComponents/nbproject/project.xml b/CoreComponents/nbproject/project.xml
index 93290ef079..d96264e3f9 100644
--- a/CoreComponents/nbproject/project.xml
+++ b/CoreComponents/nbproject/project.xml
@@ -50,6 +50,22 @@
1.9.1
+
+ org.netbeans.swing.plaf
+
+
+
+ 1.20.2
+
+
+
+ org.netbeans.swing.tabcontrol
+
+
+
+ 1.25.1
+
+
org.openide.awt
diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java
index 45214c0506..83d82d9f44 100644
--- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java
+++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultTopComponent.java
@@ -59,6 +59,8 @@ public final class DataResultTopComponent extends TopComponent implements DataRe
setTitle(title); // set the title
this.isMain = isMain;
putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.valueOf(isMain)); // set option to close compoment in GUI
+ putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, true);
+ putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, true);
this.dataResultTabbedPanel.addChangeListener(this);
}
diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java
index b5577cc5c3..4043c1d767 100644
--- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java
+++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java
@@ -186,6 +186,28 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
return properties;
}
+
+ Set propertiesAcc = new LinkedHashSet();
+ /**
+ * Gets regular Bean property set properties from all children and, recursively, subchildren of Node.
+ * Note: won't work out the box for lazy load - you need to set all children props for the parent by hand
+ * @param parent Node with at least one child to get properties from
+ */
+ private void getAllChildPropertyHeadersRec(Node parent, int rows) {
+ for(int i = 0; i < Math.min(rows, parent.getChildren().getNodesCount()); i++){
+ Node child = parent.getChildren().getNodeAt(i);
+ for (PropertySet ps : child.getPropertySets()) {
+ //if (ps.getName().equals(Sheet.PROPERTIES)) {
+ //return ps.getProperties();
+ final Property [] props = ps.getProperties();
+ final int propsNum = props.length;
+ for (int j = 0; j< propsNum; ++j)
+ propertiesAcc.add(props[j]);
+ //}
+ }
+ getAllChildPropertyHeadersRec(child, rows);
+ }
+ }
@Override
public void setNode(Node selectedNode) {
@@ -215,7 +237,11 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
OutlineView ov = ((OutlineView) this.tableScrollPanel);
- List tempProps = new ArrayList(Arrays.asList(getAllChildPropertyHeaders(selectedNode)));
+ propertiesAcc.clear();
+ Logger logger = Logger.getLogger(DataResultViewerTable.class.getName());
+ this.getAllChildPropertyHeadersRec(selectedNode, 100);
+ List tempProps = new ArrayList(Arrays.asList(propertiesAcc.toArray(new Property[propertiesAcc.size()])));
+ //List tempProps = new ArrayList(Arrays.asList(getAllChildPropertyHeaders(selectedNode)));
if(tempProps.size() > 0)
tempProps.remove(0);
@@ -374,6 +400,8 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
// Get maximum width of column data
for (int i = 0; i < table.length; i++) {
+ if(index >= table[i].length)
+ continue;
String test = table[i][index].toString();
colWidth = Math.max(colWidth, metrics.stringWidth(test));
}
diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java
index 9a4b783f2a..ba50b370cc 100644
--- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java
+++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/Installer.java
@@ -18,13 +18,16 @@
*/
package org.sleuthkit.autopsy.corecomponents;
+import java.awt.Color;
+import java.awt.Insets;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.BorderFactory;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
+import org.netbeans.swing.tabcontrol.plaf.DefaultTabbedContainerUI;
import org.openide.modules.ModuleInstall;
-import org.openide.util.Exceptions;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.Case;
@@ -47,7 +50,11 @@ public class Installer extends ModuleInstall {
}
});
- //setupLAF();
+ Logger logger = Logger.getLogger(Installer.class.getName());
+ //setupLAF();
+ //UIManager.put("ViewTabDisplayerUI", "org.sleuthkit.autopsy.corecomponents.NoTabsTabDisplayerUI");
+ //UIManager.put(DefaultTabbedContainerUI.KEY_VIEW_CONTENT_BORDER, BorderFactory.createEmptyBorder());
+ //UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
}
private void setupLAF() {
@@ -56,8 +63,8 @@ public class Installer extends ModuleInstall {
//UIManager.put("nimbusBase", new Color());
//UIManager.put("nimbusBlueGrey", new Color());
//UIManager.put("control", new Color());
-
-
+
+
Logger logger = Logger.getLogger(Installer.class.getName());
//use Nimbus if available
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() ) {
diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/NoTabsTabDisplayerUI.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/NoTabsTabDisplayerUI.java
new file mode 100644
index 0000000000..1db15285d8
--- /dev/null
+++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/NoTabsTabDisplayerUI.java
@@ -0,0 +1,105 @@
+/*
+ * Autopsy Forensic Browser
+ *
+ * Copyright 2011 Basis Technology Corp.
+ * Contact: carrier sleuthkit org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.sleuthkit.autopsy.corecomponents;
+
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Polygon;
+import java.awt.Rectangle;
+import javax.swing.DefaultSingleSelectionModel;
+import javax.swing.JComponent;
+import javax.swing.SingleSelectionModel;
+import javax.swing.plaf.ComponentUI;
+import org.netbeans.swing.tabcontrol.TabDisplayer;
+import org.netbeans.swing.tabcontrol.TabDisplayerUI;
+
+/**
+ *
+ * @author dfickling
+ */
+public class NoTabsTabDisplayerUI extends TabDisplayerUI {
+
+ /** Creates a new instance of NoTabsTabDisplayerUI */
+ public NoTabsTabDisplayerUI(TabDisplayer displayer) {
+ super(displayer);
+ }
+
+ public static ComponentUI createUI(JComponent jc) {
+ assert jc instanceof TabDisplayer;
+ return new NoTabsTabDisplayerUI((TabDisplayer) jc);
+ }
+
+ private static final int[] PTS = new int[] { 0, 0, 0 };
+ public Polygon getExactTabIndication(int i) {
+ //Should never be called
+ return new Polygon(PTS, PTS, PTS.length);
+ }
+
+ public Polygon getInsertTabIndication(int i) {
+ return new Polygon(PTS, PTS, PTS.length);
+ }
+
+ public int tabForCoordinate(Point point) {
+ return -1;
+ }
+
+ public Rectangle getTabRect(int i, Rectangle rectangle) {
+ return new Rectangle(0,0,0,0);
+ }
+
+ protected SingleSelectionModel createSelectionModel() {
+ return new DefaultSingleSelectionModel();
+ }
+
+ public java.lang.String getCommandAtPoint(Point point) {
+ return null;
+ }
+
+ public int dropIndexOfPoint(Point point) {
+ return -1;
+ }
+
+ public void registerShortcuts(javax.swing.JComponent jComponent) {
+ //do nothing
+ }
+
+ public void unregisterShortcuts(javax.swing.JComponent jComponent) {
+ //do nothing
+ }
+
+ protected void requestAttention(int i) {
+ //do nothing
+ }
+
+ protected void cancelRequestAttention(int i) {
+ //do nothing
+ }
+
+ public Dimension getPreferredSize(javax.swing.JComponent c) {
+ return new Dimension(0, 0);
+ }
+
+ public Dimension getMinimumSize(javax.swing.JComponent c) {
+ return new Dimension(0, 0);
+ }
+
+ public Dimension getMaximumSize(javax.swing.JComponent c) {
+ return new Dimension(0, 0);
+ }
+}
diff --git a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java
index f3bffb19f9..dd01ac42e7 100644
--- a/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java
+++ b/DataModel/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java
@@ -22,6 +22,7 @@ package org.sleuthkit.autopsy.datamodel;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children.Keys;
import org.openide.nodes.Node;
+import org.sleuthkit.autopsy.datamodel.KeywordHits.KeywordHitsRootNode;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.Directory;
import org.sleuthkit.datamodel.File;
@@ -123,13 +124,18 @@ abstract class AbstractContentChildren extends Keys
-
+
-
+
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java
index cf6d49bce2..7201b3d03f 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java
@@ -80,7 +80,6 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
}
private void customizeComponents() {
- ingestLabel.setVisible(false);
listsTable.setTableHeader(null);
listsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//customize column witdhs
@@ -106,6 +105,24 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
}
}
+ KeywordSearch.changeSupport.addPropertyChangeListener(KeywordSearch.NUM_FILES_CHANGE_EVT,
+ new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ String changed = evt.getPropertyName();
+ Object oldValue = evt.getOldValue();
+ Object newValue = evt.getNewValue();
+
+ if (changed.equals(KeywordSearch.NUM_FILES_CHANGE_EVT)) {
+ int newFilesIndexed = ((Integer) newValue).intValue();
+ if(!ingestRunning){
+ ingestIndexLabel.setText("Files Indexed: " + newFilesIndexed);
+ }
+ }
+ }
+ });
+
loader = KeywordSearchListsXML.getCurrent();
loader.addPropertyChangeListener(new PropertyChangeListener() {
@@ -157,9 +174,9 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
};
if(IngestManager.getDefault().isServiceRunning(KeywordSearchIngestService.getDefault()))
- initIngest(0);
+ initIngest(true);
else
- initIngest(1);
+ initIngest(false);
IngestManager.addPropertyChangeListener(new PropertyChangeListener() {
@@ -169,13 +186,13 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
Object oldValue = evt.getOldValue();
if(changed.equals(IngestManager.SERVICE_COMPLETED_EVT) &&
((String) oldValue).equals(KeywordSearchIngestService.MODULE_NAME))
- initIngest(1);
+ initIngest(false);
else if(changed.equals(IngestManager.SERVICE_STARTED_EVT) &&
((String) oldValue).equals(KeywordSearchIngestService.MODULE_NAME))
- initIngest(0);
+ initIngest(true);
else if(changed.equals(IngestManager.SERVICE_STOPPED_EVT) &&
((String) oldValue).equals(KeywordSearchIngestService.MODULE_NAME))
- initIngest(1);
+ initIngest(false);
}
});
@@ -187,27 +204,25 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
* case 0: ingest running
* case 1: ingest not running
*/
- private void initIngest(int running) {
+ private void initIngest(boolean running) {
ActionListener[] current = searchAddButton.getActionListeners();
- for(int i = 0; i < current.length; i++) {
- if(current[i].equals(ingestListener) || current[i].equals(searchListener))
+ for (int i = 0; i < current.length; i++) {
+ if (current[i].equals(ingestListener) || current[i].equals(searchListener)) {
searchAddButton.removeActionListener(current[i]);
+ }
}
- switch (running) {
- case 0:
- ingestRunning = true;
- searchAddButton.setText("Add to Ingest");
- searchAddButton.addActionListener(ingestListener);
- listsTableModel.resync();
- ingestLabel.setVisible(true);
- break;
- case 1:
- ingestRunning = false;
- searchAddButton.setText("Search");
- searchAddButton.addActionListener(searchListener);
- listsTableModel.resync();
- ingestLabel.setVisible(false);
- break;
+ if (running) {
+ ingestRunning = true;
+ searchAddButton.setText("Add to Ingest");
+ searchAddButton.addActionListener(ingestListener);
+ listsTableModel.resync();
+ ingestIndexLabel.setText("Ingest is ongoing. Results will appear as the index is populated.");
+ } else {
+ ingestRunning = false;
+ searchAddButton.setText("Search");
+ searchAddButton.addActionListener(searchListener);
+ listsTableModel.resync();
+ ingestIndexLabel.setText("Files Indexed: " + filesIndexed);
}
}
@@ -227,7 +242,7 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
keywordsTable = new javax.swing.JTable();
manageListsButton = new javax.swing.JButton();
searchAddButton = new javax.swing.JButton();
- ingestLabel = new javax.swing.JLabel();
+ ingestIndexLabel = new javax.swing.JLabel();
leftPane.setMinimumSize(new java.awt.Dimension(150, 23));
@@ -257,8 +272,8 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
searchAddButton.setText(org.openide.util.NbBundle.getMessage(KeywordSearchListsViewerPanel.class, "KeywordSearchListsViewerPanel.searchAddButton.text")); // NOI18N
- ingestLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
- ingestLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchListsViewerPanel.class, "KeywordSearchListsViewerPanel.ingestLabel.text")); // NOI18N
+ ingestIndexLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
+ ingestIndexLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchListsViewerPanel.class, "KeywordSearchListsViewerPanel.ingestIndexLabel.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
@@ -273,15 +288,15 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addContainerGap()
- .addComponent(ingestLabel)
- .addContainerGap(109, Short.MAX_VALUE))
+ .addComponent(ingestIndexLabel)
+ .addContainerGap(327, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 268, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
- .addComponent(ingestLabel)
+ .addComponent(ingestIndexLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(manageListsButton)
@@ -295,7 +310,7 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
}//GEN-LAST:event_manageListsButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JLabel ingestLabel;
+ private javax.swing.JLabel ingestIndexLabel;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JTable keywordsTable;
private javax.swing.JScrollPane leftPane;
@@ -307,10 +322,7 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer {
private void searchAction(ActionEvent e) {
- if (filesIndexed == 0)
- return;
-
- setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
search();
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java
index c849ed640e..4670e73ff6 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchPanel.java
@@ -216,8 +216,6 @@ public class KeywordSearchPanel extends AbstractKeywordSearchPerformer{
}// //GEN-END:initComponents
private void searchBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchBoxActionPerformed
- if (filesIndexed == 0)
- return;
getRootPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
search();
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
index d5c3bb44e6..b317aaad5c 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
@@ -164,10 +164,10 @@ public class LuceneQuery implements KeywordSearchQuery {
//get listname
String listName = "";
- KeywordSearchList list = KeywordSearchListsXML.getCurrent().getListWithKeyword(query);
- if (list != null) {
- listName = list.getName();
- }
+ //KeywordSearchList list = KeywordSearchListsXML.getCurrent().getListWithKeyword(query);
+ //if (list != null) {
+ // listName = list.getName();
+ //}
final String theListName = listName;
Node rootNode = new KeywordSearchNode(matches, query);
diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java b/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java
index 8b3b434b04..7ed142699c 100644
--- a/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java
+++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/SearchResultMenu.java
@@ -27,7 +27,7 @@ import javax.swing.JMenuItem;
import org.openide.awt.DynamicMenuContent;
import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent;
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
-import org.sleuthkit.autopsy.filesearch.FileSearchTopComponent;
+import org.sleuthkit.autopsy.filesearch.FileSearchPanel;
/**
* Menu item lists DataResult tabs.
@@ -39,7 +39,7 @@ public class SearchResultMenu extends JMenuItem implements DynamicMenuContent {
@Override
public JComponent[] getMenuPresenters() {
- List searchResults = FileSearchTopComponent.getFileSearchResultList();
+ List searchResults = FileSearchPanel.getFileSearchResultList();
DirectoryTreeTopComponent directoryTree = DirectoryTreeTopComponent.findInstance();
DataResultTopComponent directoryListing = directoryTree.getDirectoryListing();