From a0de456782a05c04e19b9fbac8fe6650b054aa39 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 29 Jan 2020 16:09:08 -0500 Subject: [PATCH] 5979 populate document preview for file discovery --- .../autopsy/filequery/DocumentPanel.form | 8 +++- .../autopsy/filequery/DocumentPanel.java | 8 +++- .../autopsy/filequery/DocumentWrapper.java | 44 +++++++++++++++++-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 78b3504cbd..7be26344d7 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -124,6 +124,9 @@ + + + @@ -135,10 +138,13 @@ - + + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 68f3867bf2..f61fd71f95 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -89,13 +89,16 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere org.openide.awt.Mnemonics.setLocalizedText(documentType, org.openide.util.NbBundle.getMessage(DocumentPanel.class, "DocumentPanel.documentType.text")); // NOI18N + previewScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + previewTextArea.setEditable(false); previewTextArea.setColumns(20); previewTextArea.setLineWrap(true); - previewTextArea.setRows(4); + previewTextArea.setRows(5); previewTextArea.setWrapStyleWord(true); previewTextArea.setEnabled(false); previewTextArea.setFocusable(false); + previewTextArea.setMaximumSize(new java.awt.Dimension(164, 94)); previewScrollPane.setViewportView(previewTextArea); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); @@ -192,8 +195,9 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere public Component getListCellRendererComponent(JList list, DocumentWrapper value, int index, boolean isSelected, boolean cellHasFocus) { fileSizeLabel.setText(getFileSizeString(value.getResultFile().getFirstInstance().getSize())); countLabel.setText(Bundle.ImageThumbnailPanel_countLabel_text(value.getResultFile().getAllInstances().size())); - documentType.setText(value.getResultFile().getFileType().name()); //WJS-TODO fill this in with a document type instead of just DOCUMENT + documentType.setText("Extension: " + value.getResultFile().getFirstInstance().getNameExtension()); //WJS-TODO fill this in with a document type instead of just DOCUMENT previewTextArea.setText(value.getPreview()); + previewTextArea.setCaretPosition(0); if (value.getResultFile().isDeleted()) { isDeletedLabel.setIcon(DELETED_ICON); isDeletedLabel.setToolTipText(Bundle.ImageThumbnailPanel_isDeleted_text()); diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java index c31abb010e..05a9ff4f1b 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java @@ -18,11 +18,21 @@ */ package org.sleuthkit.autopsy.filequery; +import java.util.logging.Level; +import org.sleuthkit.datamodel.AbstractFile; +import org.apache.commons.lang3.StringUtils; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.StringExtract; +import org.sleuthkit.datamodel.TskCoreException; public class DocumentWrapper { + private String preview; private final ResultFile resultFile; - + private static final Logger logger = Logger.getLogger(DocumentWrapper.class.getName()); + //string extract utility + private final StringExtract stringExtract = new StringExtract(); + /** * Construct a new ImageThumbnailsWrapper. * @@ -30,10 +40,36 @@ public class DocumentWrapper { * summary is created for. */ DocumentWrapper(ResultFile file) { - this.preview = "Preview not currently available"; + this.preview = createPreview(file.getFirstInstance()); this.resultFile = file; } + private String createPreview(AbstractFile file) { + byte[] data = new byte[256]; + int bytesRead = 0; + if (file.getSize() > 0) { + try { + bytesRead = file.read(data, 0, 256); // read the data + } catch (TskCoreException ex) { + logger.log(Level.WARNING, "Error while trying to show the String content.", ex); //NON-NLS + } + } + String text; + if (bytesRead > 0) { + //text = DataConversion.getString(data, bytesRead, 4); + final StringExtract.StringExtractUnicodeTable.SCRIPT selScript = StringExtract.StringExtractUnicodeTable.SCRIPT.LATIN_1; + stringExtract.setEnabledScript(selScript); + StringExtract.StringExtractResult res = stringExtract.extract(data, bytesRead, 0); + text = res.getText(); + if (StringUtils.isBlank(text)) { + text = "No Preview available."; + } + } else { + text = "No bytes read for preview."; + } + return text; + } + /** * Set the preview summary which exists. * @@ -44,8 +80,8 @@ public class DocumentWrapper { } /** - * Get the ResultFile which represents the document the preview summary - * was created for. + * Get the ResultFile which represents the document the preview summary was + * created for. * * @return The ResultFile which represents the image file which the * thumbnail was created for.