- 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:
adam-m 2012-01-06 10:11:08 -05:00
parent 89bceacdf7
commit 52a0b6cb12
2 changed files with 66 additions and 34 deletions

View File

@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.keywordsearch;
import java.awt.Component;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@ -27,7 +28,11 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
@ -50,7 +55,7 @@ persistenceType = TopComponent.PERSISTENCE_NEVER)
preferredID = "KeywordSearchListTopComponent")
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;
public KeywordSearchListTopComponent() {
@ -75,10 +80,10 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
keywordTable.setAutoscrolls(true);
keywordTable.setTableHeader(null);
keywordTable.setShowHorizontalLines(false);
keywordTable.setShowVerticalLines(false);
keywordTable.setShowGrid(false);
//TODO removing dotted line of selected cell might require custom renderer
keywordTable.setShowHorizontalLines(true);
keywordTable.setShowVerticalLines(true);
//keywordTable.setShowGrid(false)
//TODO removing dotted line of selected cell might require code in custom renderer
final int width = keywordTable.getSize().width;
TableColumn column = null;
for (int i = 0; i < 2; i++) {
@ -88,6 +93,7 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
//column.setCellEditor(new DefaultCellEditor(new JCheckBox()));
} else {
column.setCellRenderer(new CellTooltipRenderer());
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
tableModel.deleteAll();
}//GEN-LAST:event_deleteAllWordsButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addWordButton;
private javax.swing.JTextField addWordField;
@ -375,14 +380,13 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
//filter out blank just in case
Map<String, Boolean> ret = new LinkedHashMap<String, Boolean>();
for (String s : selected) {
if (!s.trim().equals(""))
if (!s.trim().equals("")) {
ret.put(s, false);
}
}
return ret;
}
@Override
public boolean isLuceneQuerySelected() {
return false;
@ -416,8 +420,9 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
return tableModel.keywordExists(keyword);
}
class KeywordTableModel extends AbstractTableModel {
static class KeywordTableModel extends AbstractTableModel {
private static Logger logger = Logger.getLogger(KeywordTableModel.class.getName());
//data
private List<TableEntry> keywordData = new ArrayList<TableEntry>();
@ -502,9 +507,10 @@ public final class KeywordSearchListTopComponent extends TopComponent implements
List<TableEntry> toDel = new ArrayList<TableEntry>();
int i = 0;
for (TableEntry e : keywordData) {
if (e.isActive && !e.keyword.equals(""))
if (e.isActive && !e.keyword.equals("")) {
toDel.add(e);
}
}
for (TableEntry del : toDel) {
keywordData.remove(del);
}
@ -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;
}
}
}

View File

@ -173,14 +173,15 @@ public class TermComponentQuery implements KeywordSearchQuery {
}
List<FsContent> uniqueMatches = new ArrayList<FsContent>();
if (! terms.isEmpty()) {
LuceneQuery filesQuery = new LuceneQuery(filesQueryB.toString());
filesQuery.escape(); //TODO escaping invididual terms above instead could make a difference to Solr
try {
uniqueMatches = filesQuery.performQuery();
}
catch (RuntimeException e) {
} catch (RuntimeException e) {
logger.log(Level.SEVERE, "Error executing Solr query,", e);
}
}
//filter out non-matching files using the original query (whether literal or not)