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
};
private long ID;
private MessageType messageType;
private IngestServiceAbstract source;
@ -67,11 +66,11 @@ public class IngestMessage {
public String getSubject() {
return subject;
}
public String getDetails() {
return detailsHtml;
}
public String getUniqueKey() {
return uniqueKey;
}
@ -83,24 +82,28 @@ public class IngestMessage {
public MessageType getMessageType() {
return messageType;
}
public Date getDatePosted() {
return datePosted;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(Long.toString(ID)).append(": ");
sb.append("type: ").append(messageType.name());
if (source != null) //can be null for manager messages
{
sb.append(" source: ").append(source.getName());
}
sb.append(" date: ").append(dateFormat.format(datePosted));
sb.append(" subject: ").append(subject);
if (detailsHtml != null)
if (detailsHtml != null) {
sb.append(" details: ").append(detailsHtml);
if (data != null)
}
if (data != null) {
sb.append(" data: ").append(data.toString()).append(' ');
}
return sb.toString();
}
@ -149,10 +152,6 @@ public class IngestMessage {
hash = 59 * hash + (this.data != null ? this.data.hashCode() : 0);
return hash;
}
//factory methods
/**
@ -161,16 +160,22 @@ public class IngestMessage {
* @param messageType message type
* @param source originating service
* @param subject message subject to be displayed
* @param details message details to be displayed
* @param details message details to be displayed, or null
* @return
*/
public static IngestMessage createMessage(long ID, MessageType messageType, IngestServiceAbstract source, String subject, String detailsHtml) {
if (messageType == null || source == null || subject == 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);
}
/**
* Create a simple message with a subject only
* @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);
}
/**
*
* @param ID ID of the message, unique in the context of module that generated it
* @param source originating service
* @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 data data blackboard artifact associated with the message, the same as fired in ServiceDataEvent by the service
* @return
@ -211,14 +216,18 @@ public class IngestMessage {
if (source == null || subject == null || detailsHtml == null || data == 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);
im.uniqueKey = uniqueKey;
im.data = data;
return im;
}
static IngestMessage createManagerMessage(String subject) {
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 {
private MessageTableModel tableModel;
private IngestMessageMainPanel mainPanel;
private static Font visitedFont = new Font("Arial", Font.PLAIN, 11);
@ -60,13 +60,14 @@ class IngestMessagePanel extends javax.swing.JPanel {
}
IngestMessage getSelectedMessage() {
if (lastRowSelected < 0)
if (lastRowSelected < 0) {
return null;
}
return tableModel.getMessage(lastRowSelected);
}
IngestMessage getMessage(int rowNumber) {
IngestMessage getMessage(int 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)
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable messageTable;
@ -124,12 +124,12 @@ class IngestMessagePanel extends javax.swing.JPanel {
messageTable.setOpaque(false);
jScrollPane1.setWheelScrollingEnabled(true);
messageTable.setAutoscrolls(true);
//messageTable.setTableHeader(null);
messageTable.setShowHorizontalLines(false);
messageTable.setShowVerticalLines(false);
messageTable.getParent().setBackground(messageTable.getBackground());
//customize column witdhs
@ -158,44 +158,42 @@ class IngestMessagePanel extends javax.swing.JPanel {
super.setSize(d);
messageTable.setSize(d);
}
public void addMessage(IngestMessage m) {
tableModel.addMessage(m);
//autoscroll
messageTable.scrollRectToVisible(messageTable.getCellRect(messageTable.getRowCount() - 1, messageTable.getColumnCount(), true));
}
public void clearMessages() {
tableModel.clearMessages();
}
private void setVisited(int rowNumber) {
tableModel.setVisited(rowNumber);
lastRowSelected = rowNumber;
}
private class MessageTableModel extends AbstractTableModel {
//data
private Logger logger = Logger.getLogger(MessageTableModel.class.getName());
private List<TableEntry> messageData = new ArrayList<TableEntry>();
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return messageData.size();
}
@Override
public String getColumnName(int column) {
String colName = null;
switch (column) {
case 0:
colName = "Subject";
@ -205,16 +203,16 @@ class IngestMessagePanel extends javax.swing.JPanel {
break;
default:
;
}
return colName;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object ret = null;
TableEntry entry = messageData.get(rowIndex);
switch (columnIndex) {
case 0:
ret = (Object) entry.message.getSubject();
@ -233,34 +231,34 @@ class IngestMessagePanel extends javax.swing.JPanel {
}
return ret;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public void addMessage(IngestMessage m) {
messageData.add(new TableEntry(m));
int size = messageData.size();
this.fireTableRowsInserted(size - 1, size);
}
public void clearMessages() {
messageData.clear();
fireTableDataChanged();
}
public void setVisited(int rowNumber) {
messageData.get(rowNumber).visited = true;
//repaint the cell
fireTableCellUpdated(rowNumber, 0);
}
public void setVisitedAll() {
int row = 0;
for (TableEntry e : messageData) {
@ -271,29 +269,29 @@ class IngestMessagePanel extends javax.swing.JPanel {
++row;
}
}
public boolean isVisited(int rowNumber) {
return messageData.get(rowNumber).visited;
}
public MessageType getMessageType(int rowNumber) {
return messageData.get(rowNumber).message.getMessageType();
}
public IngestMessage getMessage(int rowNumber) {
return messageData.get(rowNumber).message;
}
class TableEntry implements Comparable {
IngestMessage message;
boolean visited;
TableEntry(IngestMessage message) {
this.message = message;
visited = false;
}
@Override
public int compareTo(Object o) {
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
*/
private class MessageTableRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
final Component cell = super.getTableCellRendererComponent(
table, value, false, false, row, column);
if (column < 2) {
String val = (String) table.getModel().getValueAt(row, column);
setToolTipText(val);
setText(val);
}
if (column == 0) {
if (tableModel.isVisited(row)) {
cell.setFont(visitedFont);
@ -342,7 +340,7 @@ class IngestMessagePanel extends javax.swing.JPanel {
super.setBackground(table.getSelectionBackground());
}
}
if (column == 1) {
if (isSelected) {
super.setForeground(table.getSelectionForeground());
@ -351,10 +349,10 @@ class IngestMessagePanel extends javax.swing.JPanel {
cell.setBackground(table.getBackground());
}
}
return this;
}
@Override
protected void setValue(Object value) {
super.setValue(value);
@ -365,9 +363,9 @@ class IngestMessagePanel extends javax.swing.JPanel {
* handle table selections / cell visitations
*/
private class MessageVisitedSelection implements ListSelectionListener {
private Logger logger = Logger.getLogger(MessageVisitedSelection.class.getName());
@Override
public void valueChanged(ListSelectionEvent e) {
DefaultListSelectionModel selModel = (DefaultListSelectionModel) e.getSource();
@ -383,12 +381,16 @@ class IngestMessagePanel extends javax.swing.JPanel {
}
if (selected != -1) {
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();
msg.append("Keyword Indexing Completed, ");
msg.append("indexed files: ").append(indexed).append(", indexed strings: ").append(indexed_extr);
msg.append(", skipped files: ").append(skipped);
msg.append("Indexed files: ").append(indexed).append("<br />Indexed strings: ").append(indexed_extr);
msg.append("<br />Skipped files: ").append(skipped).append("<br />");
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
//hit
detailsSb.append("<html>");
detailsSb.append("Keyword hit: ");
detailsSb.append(attr.getValueString());
detailsSb.append("<br />");
@ -559,7 +557,6 @@ public final class KeywordSearchIngestService implements IngestServiceFsContent
detailsSb.append("<br />");
}
detailsSb.append("</html>");
managerProxy.postMessage(IngestMessage.createDataMessage(++messageID, instance, subjectSb.toString(), detailsSb.toString(), uniqueKey, res.getArtifact()));
}
} //for each file hit