mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
- fix case when terms componenent query returns no results
- implement custom cell renderer with tooltips in query column showing entire query string
This commit is contained in:
parent
89bceacdf7
commit
52a0b6cb12
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.keywordsearch;
|
package org.sleuthkit.autopsy.keywordsearch;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
@ -27,7 +28,11 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.regex.PatternSyntaxException;
|
import java.util.regex.PatternSyntaxException;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JTable;
|
||||||
import javax.swing.table.AbstractTableModel;
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
|
import javax.swing.table.TableCellRenderer;
|
||||||
import javax.swing.table.TableColumn;
|
import javax.swing.table.TableColumn;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.windows.TopComponent;
|
import org.openide.windows.TopComponent;
|
||||||
@ -50,7 +55,7 @@ persistenceType = TopComponent.PERSISTENCE_NEVER)
|
|||||||
preferredID = "KeywordSearchListTopComponent")
|
preferredID = "KeywordSearchListTopComponent")
|
||||||
public final class KeywordSearchListTopComponent extends TopComponent implements KeywordSearchTopComponentInterface {
|
public final class KeywordSearchListTopComponent extends TopComponent implements KeywordSearchTopComponentInterface {
|
||||||
|
|
||||||
private Logger logger = Logger.getLogger(KeywordSearchListTopComponent.class.getName());
|
private static Logger logger = Logger.getLogger(KeywordSearchListTopComponent.class.getName());
|
||||||
private KeywordTableModel tableModel;
|
private KeywordTableModel tableModel;
|
||||||
|
|
||||||
public KeywordSearchListTopComponent() {
|
public KeywordSearchListTopComponent() {
|
||||||
@ -75,10 +80,10 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
|
|
||||||
keywordTable.setAutoscrolls(true);
|
keywordTable.setAutoscrolls(true);
|
||||||
keywordTable.setTableHeader(null);
|
keywordTable.setTableHeader(null);
|
||||||
keywordTable.setShowHorizontalLines(false);
|
keywordTable.setShowHorizontalLines(true);
|
||||||
keywordTable.setShowVerticalLines(false);
|
keywordTable.setShowVerticalLines(true);
|
||||||
keywordTable.setShowGrid(false);
|
//keywordTable.setShowGrid(false)
|
||||||
//TODO removing dotted line of selected cell might require custom renderer
|
//TODO removing dotted line of selected cell might require code in custom renderer
|
||||||
final int width = keywordTable.getSize().width;
|
final int width = keywordTable.getSize().width;
|
||||||
TableColumn column = null;
|
TableColumn column = null;
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
@ -88,6 +93,7 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
//column.setCellEditor(new DefaultCellEditor(new JCheckBox()));
|
//column.setCellEditor(new DefaultCellEditor(new JCheckBox()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
column.setCellRenderer(new CellTooltipRenderer());
|
||||||
column.setPreferredWidth(((int) (width * 0.7)));
|
column.setPreferredWidth(((int) (width * 0.7)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -313,7 +319,6 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
private void deleteAllWordsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteAllWordsButtonActionPerformed
|
private void deleteAllWordsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteAllWordsButtonActionPerformed
|
||||||
tableModel.deleteAll();
|
tableModel.deleteAll();
|
||||||
}//GEN-LAST:event_deleteAllWordsButtonActionPerformed
|
}//GEN-LAST:event_deleteAllWordsButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JButton addWordButton;
|
private javax.swing.JButton addWordButton;
|
||||||
private javax.swing.JTextField addWordField;
|
private javax.swing.JTextField addWordField;
|
||||||
@ -370,19 +375,18 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String,Boolean> getQueryList() {
|
public Map<String, Boolean> getQueryList() {
|
||||||
List<String> selected = getSelectedKeywords();
|
List<String> selected = getSelectedKeywords();
|
||||||
//filter out blank just in case
|
//filter out blank just in case
|
||||||
Map<String,Boolean> ret = new LinkedHashMap<String,Boolean>();
|
Map<String, Boolean> ret = new LinkedHashMap<String, Boolean>();
|
||||||
for (String s : selected) {
|
for (String s : selected) {
|
||||||
if (!s.trim().equals(""))
|
if (!s.trim().equals("")) {
|
||||||
ret.put(s, false);
|
ret.put(s, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLuceneQuerySelected() {
|
public boolean isLuceneQuerySelected() {
|
||||||
return false;
|
return false;
|
||||||
@ -416,8 +420,9 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
return tableModel.keywordExists(keyword);
|
return tableModel.keywordExists(keyword);
|
||||||
}
|
}
|
||||||
|
|
||||||
class KeywordTableModel extends AbstractTableModel {
|
static class KeywordTableModel extends AbstractTableModel {
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(KeywordTableModel.class.getName());
|
||||||
//data
|
//data
|
||||||
private List<TableEntry> keywordData = new ArrayList<TableEntry>();
|
private List<TableEntry> keywordData = new ArrayList<TableEntry>();
|
||||||
|
|
||||||
@ -501,10 +506,11 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
void deleteSelected() {
|
void deleteSelected() {
|
||||||
List<TableEntry> toDel = new ArrayList<TableEntry>();
|
List<TableEntry> toDel = new ArrayList<TableEntry>();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (TableEntry e: keywordData) {
|
for (TableEntry e : keywordData) {
|
||||||
if (e.isActive && !e.keyword.equals(""))
|
if (e.isActive && !e.keyword.equals("")) {
|
||||||
toDel.add(e);
|
toDel.add(e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (TableEntry del : toDel) {
|
for (TableEntry del : toDel) {
|
||||||
keywordData.remove(del);
|
keywordData.remove(del);
|
||||||
}
|
}
|
||||||
@ -513,7 +519,7 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
void initEmpty() {
|
void initEmpty() {
|
||||||
for (int i = 0; i<20; ++i) {
|
for (int i = 0; i < 20; ++i) {
|
||||||
keywordData.add(0, new TableEntry("", false));
|
keywordData.add(0, new TableEntry("", false));
|
||||||
}
|
}
|
||||||
fireTableDataChanged();
|
fireTableDataChanged();
|
||||||
@ -535,4 +541,29 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tooltips that show entire query string
|
||||||
|
*/
|
||||||
|
public static class CellTooltipRenderer extends JLabel
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellRendererComponent(
|
||||||
|
JTable table, Object color,
|
||||||
|
boolean isSelected, boolean hasFocus,
|
||||||
|
int row, int column) {
|
||||||
|
|
||||||
|
if (column == 0) {
|
||||||
|
String val = (String)table.getModel().getValueAt(row, column);
|
||||||
|
setToolTipText(val);
|
||||||
|
setText(val);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -173,14 +173,15 @@ public class TermComponentQuery implements KeywordSearchQuery {
|
|||||||
}
|
}
|
||||||
List<FsContent> uniqueMatches = new ArrayList<FsContent>();
|
List<FsContent> uniqueMatches = new ArrayList<FsContent>();
|
||||||
|
|
||||||
|
if (! terms.isEmpty()) {
|
||||||
LuceneQuery filesQuery = new LuceneQuery(filesQueryB.toString());
|
LuceneQuery filesQuery = new LuceneQuery(filesQueryB.toString());
|
||||||
filesQuery.escape(); //TODO escaping invididual terms above instead could make a difference to Solr
|
filesQuery.escape(); //TODO escaping invididual terms above instead could make a difference to Solr
|
||||||
try {
|
try {
|
||||||
uniqueMatches = filesQuery.performQuery();
|
uniqueMatches = filesQuery.performQuery();
|
||||||
}
|
} catch (RuntimeException e) {
|
||||||
catch (RuntimeException e) {
|
|
||||||
logger.log(Level.SEVERE, "Error executing Solr query,", e);
|
logger.log(Level.SEVERE, "Error executing Solr query,", e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//filter out non-matching files using the original query (whether literal or not)
|
//filter out non-matching files using the original query (whether literal or not)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user