diff --git a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.form b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.form
index 606d60c7df..58e19523f1 100644
--- a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.form
+++ b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.form
@@ -18,7 +18,7 @@
-
+
@@ -38,17 +38,12 @@
-
+
-
-
-
-
-
diff --git a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java
index 8570074269..8fcb0752af 100644
--- a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java
+++ b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java
@@ -120,9 +120,7 @@ final class MessageBrowser extends javax.swing.JPanel implements ExplorerManager
splitPane.setDividerLocation(400);
splitPane.setDividerSize(10);
splitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
- splitPane.setResizeWeight(0.4);
-
- messageDataContent.setMinimumSize(null);
+ splitPane.setResizeWeight(0.5);
splitPane.setBottomComponent(messageDataContent);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
@@ -131,7 +129,7 @@ final class MessageBrowser extends javax.swing.JPanel implements ExplorerManager
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, 0)
- .addComponent(splitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 652, Short.MAX_VALUE))
+ .addComponent(splitPane))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties
index 09048ca131..e0a5e749d2 100755
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Bundle.properties
@@ -17,24 +17,17 @@ Metadata.toolTip=Displays metadata about the file.
Metadata.nodeText.nonFilePassedIn=Non-file passed in
Metadata.nodeText.text=From The Sleuth Kit istat Tool\:
Metadata.nodeText.exceptionNotice.text=Error getting file metadata\:
-MessageContentViewer.title=Message
-MessageContentViewer.toolTip=Displays messages.
-MessageContentViewer.jPanel2.TabConstraints.tabTitle=tab1
-MessageContentViewer.jPanel3.TabConstraints.tabTitle=tab2
-MessageContentViewer.jPanel4.TabConstraints.tabTitle=tab3
MessageContentViewer.rtfbodyScrollPane.TabConstraints.tabTitle=RTF
MessageContentViewer.headersScrollPane.TabConstraints.tabTitle=Headers
MessageContentViewer.textbodyScrollPane.TabConstraints.tabTitle=Text
+MessageContentViewer.htmlPane.TabConstraints.tabTitle=HTML
MessageContentViewer.fromText.text=from address goes here
MessageContentViewer.fromLabel.text=From:
-MessageContentViewer.datetimeText.text=Right Anchored
+MessageContentViewer.datetimeText.text=date goes here
MessageContentViewer.toText.text=to list goes here
MessageContentViewer.toLabel.text=To:
MessageContentViewer.ccText.text=cc list goes here
MessageContentViewer.subjectLabel.text=Subject:
-MessageContentViewer.subjectText.text=jLabel6
+MessageContentViewer.subjectText.text=subject goes here
MessageContentViewer.directionText.text=direction
MessageContentViewer.ccLabel.text=CC:
-MessageContentViewer.showImagesToggleButton.text=Show Images
-MessageContentViewer.showImagesToggleButton.hide.text=Hide Images
-MessageContentViewer.htmlPane.TabConstraints.tabTitle=HTML
diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.form b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.form
index 7c089d54a7..856adf99a8 100644
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.form
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.form
@@ -1,11 +1,6 @@
+
+
+
+
@@ -238,8 +243,9 @@
-
+
+
@@ -258,9 +264,9 @@
-
+
-
+
@@ -271,14 +277,17 @@
-
-
+
+
-
+
+
+
+
@@ -305,6 +314,9 @@
+
+
+
diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java
index fc1df57e6d..aa75370afb 100644
--- a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java
+++ b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
- * Copyright 2013-2014 Basis Technology Corp.
+ * Copyright 2011-2017 Basis Technology Corp.
* Contact: carrier sleuthkit org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,11 @@
package org.sleuthkit.autopsy.contentviewers;
import java.awt.Component;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
import java.util.logging.Level;
+import javax.swing.text.JTextComponent;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.openide.nodes.Node;
@@ -28,7 +32,23 @@ import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.BlackboardArtifact;
+import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG;
+import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE;
import org.sleuthkit.datamodel.BlackboardAttribute;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_RCVD;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DIRECTION;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CC;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_PLAIN;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_HEADERS;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT;
+import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT;
import org.sleuthkit.datamodel.TskCoreException;
/**
@@ -37,22 +57,30 @@ import org.sleuthkit.datamodel.TskCoreException;
@ServiceProvider(service = DataContentViewer.class, position = 4)
public class MessageContentViewer extends javax.swing.JPanel implements DataContentViewer {
+ private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger.getLogger(MessageContentViewer.class.getName());
private static final int HDR_TAB_INDEX = 0;
private static final int TEXT_TAB_INDEX = 1;
private static final int HTML_TAB_INDEX = 2;
private static final int RTF_TAB_INDEX = 3;
- private static final long serialVersionUID = 1L;
-
- private BlackboardArtifact artifact; // Artifact currently being displayed
+ private final List textAreas;
/**
- * Creates new form MessageContentViewer
+ * Artifact currently being displayed
+ */
+ private BlackboardArtifact artifact;
+
+ /**
+ * Creates new MessageContentViewer
*/
public MessageContentViewer() {
initComponents();
- customizeComponents();
+ textAreas = Arrays.asList(headersTextArea, textbodyTextArea, htmlbodyTextPane, rtfbodyTextPane);
+
+ Utilities.configureTextPaneAsHtml(htmlbodyTextPane);
+ Utilities.configureTextPaneAsRtf(rtfbodyTextPane);
+ resetComponent();
}
/**
@@ -81,14 +109,12 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
textbodyScrollPane = new javax.swing.JScrollPane();
textbodyTextArea = new javax.swing.JTextArea();
htmlPane = new javax.swing.JPanel();
- jScrollPane2 = new javax.swing.JScrollPane();
+ htmlScrollPane = new javax.swing.JScrollPane();
htmlbodyTextPane = new javax.swing.JTextPane();
showImagesToggleButton = new javax.swing.JToggleButton();
rtfbodyScrollPane = new javax.swing.JScrollPane();
rtfbodyTextPane = new javax.swing.JTextPane();
- setMinimumSize(null);
-
envelopePanel.setBackground(new java.awt.Color(204, 204, 204));
org.openide.awt.Mnemonics.setLocalizedText(fromLabel, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.fromLabel.text")); // NOI18N
@@ -128,11 +154,11 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(envelopePanelLayout.createSequentialGroup()
.addComponent(toText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(directionText, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(envelopePanelLayout.createSequentialGroup()
.addComponent(fromText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(datetimeText, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(envelopePanelLayout.createSequentialGroup()
.addComponent(ccLabel)
@@ -168,22 +194,33 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
.addGap(5, 5, 5))
);
+ headersScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+ headersScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
headersTextArea.setEditable(false);
headersTextArea.setColumns(20);
+ headersTextArea.setLineWrap(true);
headersTextArea.setRows(5);
+ headersTextArea.setWrapStyleWord(true);
headersScrollPane.setViewportView(headersTextArea);
msgbodyTabbedPane.addTab(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.headersScrollPane.TabConstraints.tabTitle"), headersScrollPane); // NOI18N
+ textbodyScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+ textbodyScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
textbodyTextArea.setEditable(false);
- textbodyTextArea.setColumns(20);
+ textbodyTextArea.setLineWrap(true);
textbodyTextArea.setRows(5);
+ textbodyTextArea.setWrapStyleWord(true);
textbodyScrollPane.setViewportView(textbodyTextArea);
msgbodyTabbedPane.addTab(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.textbodyScrollPane.TabConstraints.tabTitle"), textbodyScrollPane); // NOI18N
+ htmlScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
htmlbodyTextPane.setEditable(false);
- jScrollPane2.setViewportView(htmlbodyTextPane);
+ htmlScrollPane.setViewportView(htmlbodyTextPane);
org.openide.awt.Mnemonics.setLocalizedText(showImagesToggleButton, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.text")); // NOI18N
showImagesToggleButton.addActionListener(new java.awt.event.ActionListener() {
@@ -196,9 +233,9 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
htmlPane.setLayout(htmlPaneLayout);
htmlPaneLayout.setHorizontalGroup(
htmlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane2)
+ .addComponent(htmlScrollPane)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, htmlPaneLayout.createSequentialGroup()
- .addContainerGap(533, Short.MAX_VALUE)
+ .addContainerGap(283, Short.MAX_VALUE)
.addComponent(showImagesToggleButton)
.addGap(3, 3, 3))
);
@@ -207,12 +244,14 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
.addGroup(htmlPaneLayout.createSequentialGroup()
.addComponent(showImagesToggleButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jScrollPane2)
+ .addComponent(htmlScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE)
.addGap(0, 0, 0))
);
msgbodyTabbedPane.addTab(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.htmlPane.TabConstraints.tabTitle"), htmlPane); // NOI18N
+ rtfbodyScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
+
rtfbodyTextPane.setEditable(false);
rtfbodyScrollPane.setViewportView(rtfbodyTextPane);
@@ -232,28 +271,27 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addGap(5, 5, 5)
+ .addContainerGap()
.addComponent(envelopePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(msgbodyTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 471, Short.MAX_VALUE)
- .addGap(0, 0, 0))
+ .addComponent(msgbodyTabbedPane)
+ .addContainerGap())
);
}// //GEN-END:initComponents
+ @NbBundle.Messages({
+ "MessageContentViewer.showImagesToggleButton.hide.text=Hide Images",
+ "MessageContentViewer.showImagesToggleButton.text=Show Images"})
private void showImagesToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showImagesToggleButtonActionPerformed
-
try {
- BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
- if (attr != null && !attr.getValueString().isEmpty()) {
-
+ String htmlText = getAttributeValueSafe(artifact, TSK_EMAIL_CONTENT_HTML);
+ if (!htmlText.isEmpty()) {
if (showImagesToggleButton.isSelected()) {
- showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.hide.text"));
-
- this.htmlbodyTextPane.setText("" + attr.getValueString() + "");
+ showImagesToggleButton.setText(Bundle.MessageContentViewer_showImagesToggleButton_hide_text());
+ this.htmlbodyTextPane.setText(wrapInHtmlBody(htmlText));
} else {
- showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.text"));
-
- this.htmlbodyTextPane.setText("" + cleanseHTML(attr.getValueString()) + "");
+ showImagesToggleButton.setText(Bundle.MessageContentViewer_showImagesToggleButton_text());
+ this.htmlbodyTextPane.setText(wrapInHtmlBody(cleanseHTML(htmlText)));
}
}
} catch (TskCoreException ex) {
@@ -273,8 +311,8 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
private javax.swing.JScrollPane headersScrollPane;
private javax.swing.JTextArea headersTextArea;
private javax.swing.JPanel htmlPane;
+ private javax.swing.JScrollPane htmlScrollPane;
private javax.swing.JTextPane htmlbodyTextPane;
- private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane msgbodyTabbedPane;
private javax.swing.JScrollPane rtfbodyScrollPane;
private javax.swing.JTextPane rtfbodyTextPane;
@@ -287,42 +325,38 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
private javax.swing.JLabel toText;
// End of variables declaration//GEN-END:variables
- private void customizeComponents() {
- // do any customizations here
- Utilities.configureTextPaneAsHtml(htmlbodyTextPane);
- Utilities.configureTextPaneAsRtf(rtfbodyTextPane);
-
- }
-
@Override
public void setNode(Node node) {
-
if (node == null) {
+ resetComponent();
return;
}
artifact = node.getLookup().lookup(BlackboardArtifact.class);
-
if (artifact == null) {
+ resetComponent();
return;
}
- if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID()) {
+ if (artifact.getArtifactTypeID() == TSK_MESSAGE.getTypeID()) {
displayMsg();
- } else if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
+ } else if (artifact.getArtifactTypeID() == TSK_EMAIL_MSG.getTypeID()) {
displayEmailMsg();
+ } else {
+ resetComponent();
}
-
}
@Override
+ @NbBundle.Messages("MessageContentViewer.title=Message")
public String getTitle() {
- return NbBundle.getMessage(this.getClass(), "MessageContentViewer.title");
+ return Bundle.MessageContentViewer_title();
}
@Override
+ @NbBundle.Messages("MessageContentViewer.toolTip=Displays messages.")
public String getToolTip() {
- return NbBundle.getMessage(this.getClass(), "MessageContentViewer.toolTip");
+ return Bundle.MessageContentViewer_toolTip();
}
@Override
@@ -336,8 +370,26 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
}
@Override
- public void resetComponent() {
+ final public void resetComponent() {
// reset all fields
+ fromText.setText("");
+ fromLabel.setEnabled(false);
+ toText.setText("");
+ toLabel.setEnabled(false);
+ ccText.setText("");
+ ccLabel.setEnabled(false);
+ subjectText.setText("");
+ subjectLabel.setEnabled(false);
+ datetimeText.setText("");
+ datetimeText.setEnabled(false);
+ directionText.setText("");
+ directionText.setEnabled(false);
+
+ headersTextArea.setText("");
+ rtfbodyTextPane.setText("");
+ htmlbodyTextPane.setText("");
+ textbodyTextArea.setText("");
+ msgbodyTabbedPane.setEnabled(false);
}
@Override
@@ -350,171 +402,93 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
@Override
public int isPreferred(Node node) {
-
if (isSupported(node)) {
return 6;
}
return 0;
}
- private void displayEmailMsg() {
- directionText.setVisible(false);
+ void configureTextArea(BlackboardAttribute.ATTRIBUTE_TYPE type, int index) throws TskCoreException {
+ String attributeText = getAttributeValueSafe(artifact, type);
+ if (!attributeText.isEmpty()) {
+ attributeText = (index == HTML_TAB_INDEX)
+ ? wrapInHtmlBody(cleanseHTML(attributeText))
+ : attributeText;
+ final JTextComponent textComponent = textAreas.get(index);
+ textComponent.setText(attributeText);
+ textComponent.setCaretPosition(0);
+ msgbodyTabbedPane.setEnabledAt(index, true);
+ msgbodyTabbedPane.setSelectedIndex(index);
+ } else {
+ msgbodyTabbedPane.setEnabledAt(index, false);
+ }
+ }
+
+ private void displayEmailMsg() {
+ msgbodyTabbedPane.setEnabled(true);
+ fromLabel.setEnabled(true);
+ toLabel.setEnabled(true);
+ ccLabel.setEnabled(true);
+ subjectLabel.setEnabled(true);
+ datetimeText.setEnabled(true);
+
+ directionText.setEnabled(false);
- showImagesToggleButton.setVisible(false);
showImagesToggleButton.setText("Show Images");
showImagesToggleButton.setSelected(false);
try {
- BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM));
- this.fromText.setText(attr.getValueString());
+ this.fromText.setText(getAttributeValueSafe(artifact, TSK_EMAIL_FROM));
+ this.toText.setText(getAttributeValueSafe(artifact, TSK_EMAIL_TO));
+ this.directionText.setText("");
+ this.ccText.setText(getAttributeValueSafe(artifact, TSK_EMAIL_CC));
+ this.subjectText.setText(getAttributeValueSafe(artifact, TSK_SUBJECT));
+ this.datetimeText.setText(getAttributeValueSafe(artifact, TSK_DATETIME_RCVD));
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO));
- if (attr != null) {
- this.toText.setText(attr.getValueString());
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CC));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.ccText.setVisible(true);
- this.ccText.setText(attr.getValueString());
- } else {
- this.ccText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.subjectText.setVisible(true);
- this.subjectText.setText(attr.getValueString());
- } else {
- this.subjectText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_RCVD));
- if (attr != null && !attr.getDisplayString().isEmpty()) {
- this.datetimeText.setVisible(true);
- this.datetimeText.setText(attr.getDisplayString());
- } else {
- this.datetimeText.setVisible(false);
- }
-
- int selectedTabIndex = -1;
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_PLAIN));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.textbodyTextArea.setVisible(true);
- this.textbodyTextArea.setText(attr.getValueString());
-
- msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
- selectedTabIndex = TEXT_TAB_INDEX;
- } else {
- msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
- if (attr != null && !attr.getValueString().isEmpty()) {
-
- this.showImagesToggleButton.setVisible(true);
-
- this.htmlbodyTextPane.setVisible(true);
- this.htmlbodyTextPane.setText("" + cleanseHTML(attr.getValueString()) + "");
- //this.htmlbodyTextPane.setText(cleanseHTML(attr.getValueString()));
-
- msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, true);
- selectedTabIndex = HTML_TAB_INDEX;
- } else {
- msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
- this.htmlbodyTextPane.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF));
- if (attr != null && !attr.getValueString().isEmpty()) {
-
- this.rtfbodyTextPane.setVisible(true);
- this.rtfbodyTextPane.setText(attr.getValueString());
-
- msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, true);
- selectedTabIndex = RTF_TAB_INDEX;
- } else {
- msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_HEADERS));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.headersTextArea.setVisible(true);
- this.headersTextArea.setText(attr.getValueString());
- if (selectedTabIndex < 0) {
- selectedTabIndex = HDR_TAB_INDEX;
- }
- } else {
- msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
- }
-
- msgbodyTabbedPane.setSelectedIndex(selectedTabIndex);
+ configureTextArea(TSK_HEADERS, HDR_TAB_INDEX);
+ configureTextArea(TSK_EMAIL_CONTENT_PLAIN, TEXT_TAB_INDEX);
+ configureTextArea(TSK_EMAIL_CONTENT_HTML, HTML_TAB_INDEX);
+ configureTextArea(TSK_EMAIL_CONTENT_RTF, RTF_TAB_INDEX);
} catch (TskCoreException ex) {
LOGGER.log(Level.WARNING, "Failed to get attributes for email message.", ex); //NON-NLS
}
}
- private void displayMsg() {
+ private static String wrapInHtmlBody(String htmlText) {
+ return "" + htmlText + "";
+ }
- this.ccText.setVisible(false);
- this.showImagesToggleButton.setVisible(false);
- msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
- msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
- msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
+ private void displayMsg() {
+ msgbodyTabbedPane.setEnabled(true);
+ fromLabel.setEnabled(true);
+ toLabel.setEnabled(true);
+ subjectLabel.setEnabled(true);
+ directionText.setEnabled(true);
+ datetimeText.setEnabled(true);
+
+ ccLabel.setEnabled(false);
try {
+ this.fromText.setText(getAttributeValueSafe(artifact, TSK_PHONE_NUMBER_FROM));
+ this.toText.setText(getAttributeValueSafe(artifact, TSK_PHONE_NUMBER_TO));
+ this.directionText.setText(getAttributeValueSafe(artifact, TSK_DIRECTION));
+ this.ccText.setText("");
+ this.subjectText.setText(getAttributeValueSafe(artifact, TSK_SUBJECT));
+ this.datetimeText.setText(getAttributeValueSafe(artifact, TSK_DATETIME));
- BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM));
- if (attr != null) {
- this.fromText.setText(attr.getValueString());
- } else {
- this.fromText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO));
- if (attr != null) {
- this.toText.setText(attr.getValueString());
- } else {
- this.toText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DIRECTION));
- if (attr != null) {
- this.directionText.setText(attr.getValueString());
- } else {
- this.directionText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.subjectText.setVisible(true);
- this.subjectText.setText(attr.getValueString());
- } else {
- this.subjectText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME));
- if (attr != null && !attr.getDisplayString().isEmpty()) {
- this.datetimeText.setVisible(true);
- this.datetimeText.setText(attr.getDisplayString());
- } else {
- this.datetimeText.setVisible(false);
- }
-
- attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT));
- if (attr != null && !attr.getValueString().isEmpty()) {
- this.textbodyTextArea.setVisible(true);
- this.textbodyTextArea.setText(attr.getValueString());
-
- msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
- } else {
- msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
- }
- msgbodyTabbedPane.setSelectedIndex(TEXT_TAB_INDEX);
+ msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
+ msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
+ msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
+ configureTextArea(TSK_TEXT, TEXT_TAB_INDEX);
} catch (TskCoreException ex) {
LOGGER.log(Level.WARNING, "Failed to get attributes for message.", ex); //NON-NLS
}
+ }
+ String getAttributeValueSafe(BlackboardArtifact artifact, BlackboardAttribute.ATTRIBUTE_TYPE type) throws TskCoreException {
+ return Optional.ofNullable(artifact.getAttribute(new BlackboardAttribute.Type(type)))
+ .map(BlackboardAttribute::getDisplayString)
+ .orElse("");
}
/**
@@ -524,14 +498,12 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
*
* @return The cleansed HTML String
*/
- private String cleanseHTML(String htmlInString) {
+ static private String cleanseHTML(String htmlInString) {
Document doc = Jsoup.parse(htmlInString);
- // fix all img tags
- doc.select("img[src]").forEach((img) -> {
- img.attr("src", "");
- });
+ //fix all img tags
+ doc.select("img[src]").forEach(img -> img.attr("src", ""));
return doc.html();
}