Do not show details if they are not set,

html tags handled in create message(), rather than client
Index message add details.
This commit is contained in:
adam-m 2012-02-23 16:55:53 -05:00
parent 0ea28b766a
commit 0c3578f1ba
3 changed files with 77 additions and 69 deletions

View File

@ -35,7 +35,6 @@ public class IngestMessage {
DATA, INFO, WARNING, ERROR DATA, INFO, WARNING, ERROR
}; };
private long ID; private long ID;
private MessageType messageType; private MessageType messageType;
private IngestServiceAbstract source; private IngestServiceAbstract source;
@ -67,11 +66,11 @@ public class IngestMessage {
public String getSubject() { public String getSubject() {
return subject; return subject;
} }
public String getDetails() { public String getDetails() {
return detailsHtml; return detailsHtml;
} }
public String getUniqueKey() { public String getUniqueKey() {
return uniqueKey; return uniqueKey;
} }
@ -83,24 +82,28 @@ public class IngestMessage {
public MessageType getMessageType() { public MessageType getMessageType() {
return messageType; return messageType;
} }
public Date getDatePosted() { public Date getDatePosted() {
return datePosted; return datePosted;
} }
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(Long.toString(ID)).append(": "); sb.append(Long.toString(ID)).append(": ");
sb.append("type: ").append(messageType.name()); sb.append("type: ").append(messageType.name());
if (source != null) //can be null for manager messages if (source != null) //can be null for manager messages
{
sb.append(" source: ").append(source.getName()); sb.append(" source: ").append(source.getName());
}
sb.append(" date: ").append(dateFormat.format(datePosted)); sb.append(" date: ").append(dateFormat.format(datePosted));
sb.append(" subject: ").append(subject); sb.append(" subject: ").append(subject);
if (detailsHtml != null) if (detailsHtml != null) {
sb.append(" details: ").append(detailsHtml); sb.append(" details: ").append(detailsHtml);
if (data != null) }
if (data != null) {
sb.append(" data: ").append(data.toString()).append(' '); sb.append(" data: ").append(data.toString()).append(' ');
}
return sb.toString(); return sb.toString();
} }
@ -149,10 +152,6 @@ public class IngestMessage {
hash = 59 * hash + (this.data != null ? this.data.hashCode() : 0); hash = 59 * hash + (this.data != null ? this.data.hashCode() : 0);
return hash; return hash;
} }
//factory methods //factory methods
/** /**
@ -161,16 +160,22 @@ public class IngestMessage {
* @param messageType message type * @param messageType message type
* @param source originating service * @param source originating service
* @param subject message subject to be displayed * @param subject message subject to be displayed
* @param details message details to be displayed * @param details message details to be displayed, or null
* @return * @return
*/ */
public static IngestMessage createMessage(long ID, MessageType messageType, IngestServiceAbstract source, String subject, String detailsHtml) { public static IngestMessage createMessage(long ID, MessageType messageType, IngestServiceAbstract source, String subject, String detailsHtml) {
if (messageType == null || source == null || subject == null) { if (messageType == null || source == null || subject == null) {
throw new IllegalArgumentException("message type, source and subject cannot be null"); throw new IllegalArgumentException("message type, source and subject cannot be null");
}
//add html tags
if (detailsHtml != null) {
StringBuilder htmlB = new StringBuilder();
htmlB.append("<html>").append(detailsHtml).append("</html>");
detailsHtml = htmlB.toString();
} }
return new IngestMessage(ID, messageType, source, subject, detailsHtml); return new IngestMessage(ID, messageType, source, subject, detailsHtml);
} }
/** /**
* Create a simple message with a subject only * Create a simple message with a subject only
* @param ID ID of the message, unique in the context of module that generated it * @param ID ID of the message, unique in the context of module that generated it
@ -196,13 +201,13 @@ public class IngestMessage {
} }
return new IngestMessage(ID, MessageType.ERROR, source, subject, null); return new IngestMessage(ID, MessageType.ERROR, source, subject, null);
} }
/** /**
* *
* @param ID ID of the message, unique in the context of module that generated it * @param ID ID of the message, unique in the context of module that generated it
* @param source originating service * @param source originating service
* @param subject message subject to be displayed * @param subject message subject to be displayed
* @param detailsHtml html formatted detailed message, for instance, a human-readable representation of the data. * @param detailsHtml html formatted detailed message (without leading and closing <html> tags), for instance, a human-readable representation of the data.
* @param uniqueKey unique key determining uniqueness of the message, or null. Helps grouping similar messages and determine their importance. Subsequent messages with the same uniqueKey will be treated with lower priority. * @param uniqueKey unique key determining uniqueness of the message, or null. Helps grouping similar messages and determine their importance. Subsequent messages with the same uniqueKey will be treated with lower priority.
* @param data data blackboard artifact associated with the message, the same as fired in ServiceDataEvent by the service * @param data data blackboard artifact associated with the message, the same as fired in ServiceDataEvent by the service
* @return * @return
@ -211,14 +216,18 @@ public class IngestMessage {
if (source == null || subject == null || detailsHtml == null || data == null) { if (source == null || subject == null || detailsHtml == null || data == null) {
throw new IllegalArgumentException("source, subject, details and data cannot be null"); throw new IllegalArgumentException("source, subject, details and data cannot be null");
} }
//add html tags
StringBuilder htmlB = new StringBuilder();
htmlB.append("<html>").append(detailsHtml).append("</html>");
detailsHtml = htmlB.toString();
IngestMessage im = new IngestMessage(ID, MessageType.DATA, source, subject, detailsHtml); IngestMessage im = new IngestMessage(ID, MessageType.DATA, source, subject, detailsHtml);
im.uniqueKey = uniqueKey; im.uniqueKey = uniqueKey;
im.data = data; im.data = data;
return im; return im;
} }
static IngestMessage createManagerMessage(String subject) { static IngestMessage createManagerMessage(String subject) {
return new IngestMessage(0, MessageType.INFO, null, subject, null); return new IngestMessage(0, MessageType.INFO, null, subject, null);
} }
} }

View File

@ -40,7 +40,7 @@ import org.sleuthkit.autopsy.ingest.IngestMessage.*;
* *
*/ */
class IngestMessagePanel extends javax.swing.JPanel { class IngestMessagePanel extends javax.swing.JPanel {
private MessageTableModel tableModel; private MessageTableModel tableModel;
private IngestMessageMainPanel mainPanel; private IngestMessageMainPanel mainPanel;
private static Font visitedFont = new Font("Arial", Font.PLAIN, 11); private static Font visitedFont = new Font("Arial", Font.PLAIN, 11);
@ -60,13 +60,14 @@ class IngestMessagePanel extends javax.swing.JPanel {
} }
IngestMessage getSelectedMessage() { IngestMessage getSelectedMessage() {
if (lastRowSelected < 0) if (lastRowSelected < 0) {
return null; return null;
}
return tableModel.getMessage(lastRowSelected); return tableModel.getMessage(lastRowSelected);
} }
IngestMessage getMessage(int rowNumber) { IngestMessage getMessage(int rowNumber) {
return tableModel.getMessage(rowNumber); return tableModel.getMessage(rowNumber);
} }
@ -112,7 +113,6 @@ class IngestMessagePanel extends javax.swing.JPanel {
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 144, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 144, Short.MAX_VALUE)
); );
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable messageTable; private javax.swing.JTable messageTable;
@ -124,12 +124,12 @@ class IngestMessagePanel extends javax.swing.JPanel {
messageTable.setOpaque(false); messageTable.setOpaque(false);
jScrollPane1.setWheelScrollingEnabled(true); jScrollPane1.setWheelScrollingEnabled(true);
messageTable.setAutoscrolls(true); messageTable.setAutoscrolls(true);
//messageTable.setTableHeader(null); //messageTable.setTableHeader(null);
messageTable.setShowHorizontalLines(false); messageTable.setShowHorizontalLines(false);
messageTable.setShowVerticalLines(false); messageTable.setShowVerticalLines(false);
messageTable.getParent().setBackground(messageTable.getBackground()); messageTable.getParent().setBackground(messageTable.getBackground());
//customize column witdhs //customize column witdhs
@ -158,44 +158,42 @@ class IngestMessagePanel extends javax.swing.JPanel {
super.setSize(d); super.setSize(d);
messageTable.setSize(d); messageTable.setSize(d);
} }
public void addMessage(IngestMessage m) { public void addMessage(IngestMessage m) {
tableModel.addMessage(m); tableModel.addMessage(m);
//autoscroll //autoscroll
messageTable.scrollRectToVisible(messageTable.getCellRect(messageTable.getRowCount() - 1, messageTable.getColumnCount(), true)); messageTable.scrollRectToVisible(messageTable.getCellRect(messageTable.getRowCount() - 1, messageTable.getColumnCount(), true));
} }
public void clearMessages() { public void clearMessages() {
tableModel.clearMessages(); tableModel.clearMessages();
} }
private void setVisited(int rowNumber) { private void setVisited(int rowNumber) {
tableModel.setVisited(rowNumber); tableModel.setVisited(rowNumber);
lastRowSelected = rowNumber; lastRowSelected = rowNumber;
} }
private class MessageTableModel extends AbstractTableModel { private class MessageTableModel extends AbstractTableModel {
//data //data
private Logger logger = Logger.getLogger(MessageTableModel.class.getName()); private Logger logger = Logger.getLogger(MessageTableModel.class.getName());
private List<TableEntry> messageData = new ArrayList<TableEntry>(); private List<TableEntry> messageData = new ArrayList<TableEntry>();
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return 2; return 2;
} }
@Override @Override
public int getRowCount() { public int getRowCount() {
return messageData.size(); return messageData.size();
} }
@Override @Override
public String getColumnName(int column) { public String getColumnName(int column) {
String colName = null; String colName = null;
switch (column) { switch (column) {
case 0: case 0:
colName = "Subject"; colName = "Subject";
@ -205,16 +203,16 @@ class IngestMessagePanel extends javax.swing.JPanel {
break; break;
default: default:
; ;
} }
return colName; return colName;
} }
@Override @Override
public Object getValueAt(int rowIndex, int columnIndex) { public Object getValueAt(int rowIndex, int columnIndex) {
Object ret = null; Object ret = null;
TableEntry entry = messageData.get(rowIndex); TableEntry entry = messageData.get(rowIndex);
switch (columnIndex) { switch (columnIndex) {
case 0: case 0:
ret = (Object) entry.message.getSubject(); ret = (Object) entry.message.getSubject();
@ -233,34 +231,34 @@ class IngestMessagePanel extends javax.swing.JPanel {
} }
return ret; return ret;
} }
@Override @Override
public boolean isCellEditable(int rowIndex, int columnIndex) { public boolean isCellEditable(int rowIndex, int columnIndex) {
return false; return false;
} }
@Override @Override
public Class getColumnClass(int c) { public Class getColumnClass(int c) {
return getValueAt(0, c).getClass(); return getValueAt(0, c).getClass();
} }
public void addMessage(IngestMessage m) { public void addMessage(IngestMessage m) {
messageData.add(new TableEntry(m)); messageData.add(new TableEntry(m));
int size = messageData.size(); int size = messageData.size();
this.fireTableRowsInserted(size - 1, size); this.fireTableRowsInserted(size - 1, size);
} }
public void clearMessages() { public void clearMessages() {
messageData.clear(); messageData.clear();
fireTableDataChanged(); fireTableDataChanged();
} }
public void setVisited(int rowNumber) { public void setVisited(int rowNumber) {
messageData.get(rowNumber).visited = true; messageData.get(rowNumber).visited = true;
//repaint the cell //repaint the cell
fireTableCellUpdated(rowNumber, 0); fireTableCellUpdated(rowNumber, 0);
} }
public void setVisitedAll() { public void setVisitedAll() {
int row = 0; int row = 0;
for (TableEntry e : messageData) { for (TableEntry e : messageData) {
@ -271,29 +269,29 @@ class IngestMessagePanel extends javax.swing.JPanel {
++row; ++row;
} }
} }
public boolean isVisited(int rowNumber) { public boolean isVisited(int rowNumber) {
return messageData.get(rowNumber).visited; return messageData.get(rowNumber).visited;
} }
public MessageType getMessageType(int rowNumber) { public MessageType getMessageType(int rowNumber) {
return messageData.get(rowNumber).message.getMessageType(); return messageData.get(rowNumber).message.getMessageType();
} }
public IngestMessage getMessage(int rowNumber) { public IngestMessage getMessage(int rowNumber) {
return messageData.get(rowNumber).message; return messageData.get(rowNumber).message;
} }
class TableEntry implements Comparable { class TableEntry implements Comparable {
IngestMessage message; IngestMessage message;
boolean visited; boolean visited;
TableEntry(IngestMessage message) { TableEntry(IngestMessage message) {
this.message = message; this.message = message;
visited = false; visited = false;
} }
@Override @Override
public int compareTo(Object o) { public int compareTo(Object o) {
return this.message.getDatePosted().compareTo(((TableEntry) o).message.getDatePosted()); return this.message.getDatePosted().compareTo(((TableEntry) o).message.getDatePosted());
@ -306,22 +304,22 @@ class IngestMessagePanel extends javax.swing.JPanel {
* tooltips that show entire query string, disable selection borders * tooltips that show entire query string, disable selection borders
*/ */
private class MessageTableRenderer extends DefaultTableCellRenderer { private class MessageTableRenderer extends DefaultTableCellRenderer {
@Override @Override
public Component getTableCellRendererComponent( public Component getTableCellRendererComponent(
JTable table, Object value, JTable table, Object value,
boolean isSelected, boolean hasFocus, boolean isSelected, boolean hasFocus,
int row, int column) { int row, int column) {
final Component cell = super.getTableCellRendererComponent( final Component cell = super.getTableCellRendererComponent(
table, value, false, false, row, column); table, value, false, false, row, column);
if (column < 2) { if (column < 2) {
String val = (String) table.getModel().getValueAt(row, column); String val = (String) table.getModel().getValueAt(row, column);
setToolTipText(val); setToolTipText(val);
setText(val); setText(val);
} }
if (column == 0) { if (column == 0) {
if (tableModel.isVisited(row)) { if (tableModel.isVisited(row)) {
cell.setFont(visitedFont); cell.setFont(visitedFont);
@ -342,7 +340,7 @@ class IngestMessagePanel extends javax.swing.JPanel {
super.setBackground(table.getSelectionBackground()); super.setBackground(table.getSelectionBackground());
} }
} }
if (column == 1) { if (column == 1) {
if (isSelected) { if (isSelected) {
super.setForeground(table.getSelectionForeground()); super.setForeground(table.getSelectionForeground());
@ -351,10 +349,10 @@ class IngestMessagePanel extends javax.swing.JPanel {
cell.setBackground(table.getBackground()); cell.setBackground(table.getBackground());
} }
} }
return this; return this;
} }
@Override @Override
protected void setValue(Object value) { protected void setValue(Object value) {
super.setValue(value); super.setValue(value);
@ -365,9 +363,9 @@ class IngestMessagePanel extends javax.swing.JPanel {
* handle table selections / cell visitations * handle table selections / cell visitations
*/ */
private class MessageVisitedSelection implements ListSelectionListener { private class MessageVisitedSelection implements ListSelectionListener {
private Logger logger = Logger.getLogger(MessageVisitedSelection.class.getName()); private Logger logger = Logger.getLogger(MessageVisitedSelection.class.getName());
@Override @Override
public void valueChanged(ListSelectionEvent e) { public void valueChanged(ListSelectionEvent e) {
DefaultListSelectionModel selModel = (DefaultListSelectionModel) e.getSource(); DefaultListSelectionModel selModel = (DefaultListSelectionModel) e.getSource();
@ -383,12 +381,16 @@ class IngestMessagePanel extends javax.swing.JPanel {
} }
if (selected != -1) { if (selected != -1) {
setVisited(selected); setVisited(selected);
mainPanel.showDetails(selected); //check if has details
IngestMessage m = getMessage(selected);
String details = m.getDetails();
if (details != null && !details.equals("")) {
mainPanel.showDetails(selected);
}
} }
} }
} }
} }
} }

View File

@ -266,11 +266,10 @@ public final class KeywordSearchIngestService implements IngestServiceFsContent
} }
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
msg.append("Keyword Indexing Completed, "); msg.append("Indexed files: ").append(indexed).append("<br />Indexed strings: ").append(indexed_extr);
msg.append("indexed files: ").append(indexed).append(", indexed strings: ").append(indexed_extr); msg.append("<br />Skipped files: ").append(skipped).append("<br />");
msg.append(", skipped files: ").append(skipped);
managerProxy.postMessage(IngestMessage.createMessage(++messageID, MessageType.INFO, this, msg.toString())); managerProxy.postMessage(IngestMessage.createMessage(++messageID, MessageType.INFO, this, "Keyword Indexing Completed", msg.toString()));
} }
@ -534,7 +533,6 @@ public final class KeywordSearchIngestService implements IngestServiceFsContent
//details //details
//hit //hit
detailsSb.append("<html>");
detailsSb.append("Keyword hit: "); detailsSb.append("Keyword hit: ");
detailsSb.append(attr.getValueString()); detailsSb.append(attr.getValueString());
detailsSb.append("<br />"); detailsSb.append("<br />");
@ -559,7 +557,6 @@ public final class KeywordSearchIngestService implements IngestServiceFsContent
detailsSb.append("<br />"); detailsSb.append("<br />");
} }
detailsSb.append("</html>");
managerProxy.postMessage(IngestMessage.createDataMessage(++messageID, instance, subjectSb.toString(), detailsSb.toString(), uniqueKey, res.getArtifact())); managerProxy.postMessage(IngestMessage.createDataMessage(++messageID, instance, subjectSb.toString(), detailsSb.toString(), uniqueKey, res.getArtifact()));
} }
} //for each file hit } //for each file hit