mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
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:
parent
0ea28b766a
commit
0c3578f1ba
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user