From 76600c12197ff6d76410a3362a2b6a0cfe17042d Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 6 Mar 2020 10:20:41 -0500 Subject: [PATCH 01/20] 6077 display a summary image when extracted from documents --- .../filequery/Bundle.properties-MERGED | 3 ++ .../autopsy/filequery/DocumentPanel.form | 51 ++++++++++++++++--- .../autopsy/filequery/DocumentPanel.java | 48 ++++++++++++++--- .../autopsy/filequery/DocumentWrapper.java | 34 +++++++------ .../autopsy/filequery/FileSearch.java | 25 ++++++++- .../autopsy/filequery/ResultsPanel.java | 6 +-- 6 files changed, 131 insertions(+), 36 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED index ea9e846568..c5dd80db41 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED @@ -16,6 +16,9 @@ DiscoveryUiUtility.sizeLabel.text=Size: {0} {1} DiscoveryUiUtility.terraBytes.text=TB # {0} - otherInstanceCount DocumentPanel.nameLabel.more.text=\ and {0} more +DocumentPanel.numberOfImages.noImages=No images +# {0} - numberOfImages +DocumentPanel.numberOfImages.text=1 of {0} images DocumentWrapper.previewInitialValue=Preview not generated yet. FileGroup.groupSortingAlgorithm.groupName.text=Group Name FileGroup.groupSortingAlgorithm.groupSize.text=Group Size diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 05ed6fc0c8..8064993a0c 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -24,19 +24,28 @@ - + - - + + - - + + + + + + + + + + + - + @@ -44,9 +53,15 @@ - + + + + - + + + + @@ -135,5 +150,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 849d3843ec..2df3a78f38 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -23,6 +23,7 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.event.MouseEvent; +import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.ListCellRenderer; @@ -58,6 +59,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere nameLabel = new javax.swing.JLabel(); javax.swing.JScrollPane previewScrollPane = new javax.swing.JScrollPane(); previewTextArea = new javax.swing.JTextArea(); + sampleImageLabel = new javax.swing.JLabel(); + numberOfImagesLabel = new javax.swing.JLabel(); setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -88,6 +91,11 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere previewTextArea.setMaximumSize(new java.awt.Dimension(164, 94)); previewScrollPane.setViewportView(previewTextArea); + sampleImageLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + sampleImageLabel.setMaximumSize(new java.awt.Dimension(120, 120)); + sampleImageLabel.setMinimumSize(new java.awt.Dimension(120, 120)); + sampleImageLabel.setPreferredSize(new java.awt.Dimension(120, 120)); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -96,22 +104,32 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(fileSizeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(fileSizeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(isDeletedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(previewScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 649, Short.MAX_VALUE) - .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(previewScrollPane) + .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() - .addComponent(nameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 17, Short.MAX_VALUE) + .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(previewScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(previewScrollPane)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -126,12 +144,19 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere private javax.swing.JLabel fileSizeLabel; private javax.swing.JLabel isDeletedLabel; private javax.swing.JLabel nameLabel; + private javax.swing.JLabel numberOfImagesLabel; private javax.swing.JTextArea previewTextArea; + private javax.swing.JLabel sampleImageLabel; private javax.swing.JLabel scoreLabel; // End of variables declaration//GEN-END:variables - @Messages({"# {0} - otherInstanceCount", - "DocumentPanel.nameLabel.more.text= and {0} more"}) + @Messages({ + "# {0} - otherInstanceCount", + "DocumentPanel.nameLabel.more.text= and {0} more", + "# {0} - numberOfImages", + "DocumentPanel.numberOfImages.text=1 of {0} images", + "DocumentPanel.numberOfImages.noImages=No images"}) + @Override public Component getListCellRendererComponent(JList list, DocumentWrapper value, int index, boolean isSelected, boolean cellHasFocus) { fileSizeLabel.setText(DiscoveryUiUtils.getFileSizeString(value.getResultFile().getFirstInstance().getSize())); @@ -139,8 +164,15 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere if (value.getResultFile().getAllInstances().size() > 1) { nameText += Bundle.DocumentPanel_nameLabel_more_text(value.getResultFile().getAllInstances().size() - 1); } + if (value.getSummary().getNumberOfImages() > 0) { + numberOfImagesLabel.setText(Bundle.DocumentPanel_numberOfImages_text(value.getSummary().getNumberOfImages())); + sampleImageLabel.setIcon(new ImageIcon(value.getSummary().getSampleImage())); + } else { + numberOfImagesLabel.setText(Bundle.DocumentPanel_numberOfImages_noImages()); + sampleImageLabel.setIcon(null); + } nameLabel.setText(nameText); - previewTextArea.setText(value.getPreview()); + previewTextArea.setText(value.getSummary().getSummaryText()); previewTextArea.setCaretPosition(0); DiscoveryUiUtils.setDeletedIcon(value.getResultFile().isDeleted(), isDeletedLabel); DiscoveryUiUtils.setScoreIcon(value.getResultFile(), scoreLabel); diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java index a15e151673..9bf3b173ff 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentWrapper.java @@ -19,55 +19,57 @@ package org.sleuthkit.autopsy.filequery; import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.textsummarizer.TextSummary; /** - * Class to wrap all the information necessary for a document preview to be + * Class to wrap all the information necessary for a document summary to be * displayed. */ public class DocumentWrapper { - private String preview; + private TextSummary summary; private final ResultFile resultFile; /** * Construct a new DocumentWrapper. * * @param file The ResultFile which represents the document which the - * preview summary is created for. + * summary is created for. */ @Messages({"DocumentWrapper.previewInitialValue=Preview not generated yet."}) DocumentWrapper(ResultFile file) { - this.preview = Bundle.DocumentWrapper_previewInitialValue(); + this.summary = new TextSummary(Bundle.DocumentWrapper_previewInitialValue(), null, 0); this.resultFile = file; } /** - * Set the preview summary which exists. + * Set the summary which exists. * - * @param preview The String which should be displayed as a preview for this - * document. + * @param textSummary The TextSummary object which contains the text and + * image which should be displayed as a summary for this + * document. */ - void setPreview(String preview) { - this.preview = preview; + void setSummary(TextSummary textSummary) { + this.summary = textSummary; } /** - * Get the ResultFile which represents the document the preview summary was - * created for. + * Get the ResultFile which represents the document the summary was created + * for. * * @return The ResultFile which represents the document file which the - * preview was created for. + * summary was created for. */ ResultFile getResultFile() { return resultFile; } /** - * Get the preview summary of the document. + * Get the summary of the document. * - * @return The String which is the preview of the document. + * @return The TextSummary which is the summary of the document. */ - String getPreview() { - return preview; + TextSummary getSummary() { + return summary; } } diff --git a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java index 56a6754e3f..11f1d79e1d 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java @@ -50,6 +50,7 @@ import org.imgscalr.Scalr; import org.netbeans.api.progress.ProgressHandle; import org.opencv.core.Mat; import org.opencv.highgui.VideoCapture; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; @@ -280,11 +281,33 @@ class FileSearch { } if (summary == null || StringUtils.isBlank(summary.getSummaryText())) { //summary text was empty grab the beginning of the file - summary = new TextSummary(getFirstLines(file), null, 0); + summary = getDefaultSummary(file); } return summary; } + private static TextSummary getDefaultSummary(AbstractFile file) { + Image image = null; + int countOfImages = 0; + try { + Content largestChild = null; + for (Content child : file.getChildren()) { + if (child instanceof AbstractFile && ImageUtils.isImageThumbnailSupported((AbstractFile) child)) { + countOfImages++; + if (largestChild == null || child.getSize() > largestChild.getSize()) { + largestChild = child; + } + } + } + if (largestChild != null) { + image = ImageUtils.getThumbnail(largestChild, ImageUtils.ICON_SIZE_LARGE); + } + } catch (TskCoreException ex) { + logger.log(Level.WARNING, "Error getting children for file: " + file.getId(), ex); + } + return new TextSummary(getFirstLines(file), image, countOfImages); + } + /** * Get the beginning of text from the specified AbstractFile. * diff --git a/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java index 7ba0e452ca..7a750f50eb 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java @@ -782,7 +782,7 @@ public class ResultsPanel extends javax.swing.JPanel { if (preview == null) { preview = new TextSummary(Bundle.ResultsPanel_unableToCreate_text(), null, 0); } - documentWrapper.setPreview(preview.getSummaryText()); + documentWrapper.setSummary(preview); return null; } @@ -792,10 +792,10 @@ public class ResultsPanel extends javax.swing.JPanel { try { get(); } catch (InterruptedException | ExecutionException ex) { - documentWrapper.setPreview(ex.getMessage()); + documentWrapper.setSummary(new TextSummary(ex.getMessage(), null, 0)); logger.log(Level.WARNING, "Document Worker Exception", ex); } catch (CancellationException ignored) { - documentWrapper.setPreview(Bundle.ResultsPanel_documentPreview_text()); + documentWrapper.setSummary(new TextSummary(Bundle.ResultsPanel_documentPreview_text(), null, 0)); //we want to do nothing in response to this since we allow it to be cancelled } documentPreviewViewer.repaint(); From 85077c3eca4b782ceeb050e874b3f733b4bf4c4e Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 17 Mar 2020 11:09:02 -0400 Subject: [PATCH 02/20] 6077 scale down large thumb for documents --- Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java index b4142afab9..2db041a7bd 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java @@ -303,8 +303,10 @@ class FileSearch { image = ImageUtils.getThumbnail(largestChild, ImageUtils.ICON_SIZE_LARGE); } } catch (TskCoreException ex) { - logger.log(Level.WARNING, "Error getting children for file: " + file.getId(), ex); + logger.log(Level.WARNING, "Error getting children for file: " + file.getId(), ex); } + image = image == null ? image : image.getScaledInstance(ImageUtils.ICON_SIZE_MEDIUM, ImageUtils.ICON_SIZE_MEDIUM, + Image.SCALE_SMOOTH); return new TextSummary(getFirstLines(file), image, countOfImages); } From 3d55cc60298fbcaaa5aece2e6b83735007af5155 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 20 Mar 2020 08:46:48 -0400 Subject: [PATCH 03/20] 6077 add image to indicate image extraction not supported --- .../autopsy/filequery/DiscoveryUiUtils.java | 6 ++++ .../autopsy/filequery/DocumentPanel.form | 22 ++++++------ .../autopsy/filequery/DocumentPanel.java | 32 ++++++++++-------- .../autopsy/filequery/FileSearchData.java | 8 +++++ .../images/image-extraction-not-supported.png | Bin 0 -> 4333 bytes 5 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java b/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java index fc2752a659..5fc2bbc767 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java @@ -35,9 +35,11 @@ final class DiscoveryUiUtils { private static final String RED_CIRCLE_ICON_PATH = "org/sleuthkit/autopsy/images/red-circle-exclamation.png"; private static final String YELLOW_CIRCLE_ICON_PATH = "org/sleuthkit/autopsy/images/yellow-circle-yield.png"; private static final String DELETE_ICON_PATH = "/org/sleuthkit/autopsy/images/file-icon-deleted.png"; + private static final String UNSUPPORTED_DOC_PATH = "/org/sleuthkit/autopsy/images/image-extraction-not-supported.png"; private static final ImageIcon INTERESTING_SCORE_ICON = new ImageIcon(ImageUtilities.loadImage(YELLOW_CIRCLE_ICON_PATH, false)); private static final ImageIcon NOTABLE_SCORE_ICON = new ImageIcon(ImageUtilities.loadImage(RED_CIRCLE_ICON_PATH, false)); private static final ImageIcon DELETED_ICON = new ImageIcon(ImageUtilities.loadImage(DELETE_ICON_PATH, false)); + private static final ImageIcon UNSUPPORTED_DOCUMENT_THUMBNAIL = new ImageIcon(ImageUtilities.loadImage(UNSUPPORTED_DOC_PATH, false)); @NbBundle.Messages({"# {0} - fileSize", "# {1} - units", @@ -82,6 +84,10 @@ final class DiscoveryUiUtils { } return Bundle.DiscoveryUiUtility_sizeLabel_text(size, units); } + + static ImageIcon getUnsupportedImageThumbnail(){ + return UNSUPPORTED_DOCUMENT_THUMBNAIL; + } /** * Helper method to see if point is on the icon. diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 8064993a0c..29a89baf96 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -27,21 +27,21 @@ - - + + - - + + - - - + + + @@ -62,7 +62,7 @@ - + @@ -158,13 +158,13 @@ - + - + - + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 2df3a78f38..6aef2df1e9 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -92,9 +92,9 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere previewScrollPane.setViewportView(previewTextArea); sampleImageLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - sampleImageLabel.setMaximumSize(new java.awt.Dimension(120, 120)); - sampleImageLabel.setMinimumSize(new java.awt.Dimension(120, 120)); - sampleImageLabel.setPreferredSize(new java.awt.Dimension(120, 120)); + sampleImageLabel.setMaximumSize(new java.awt.Dimension(100, 100)); + sampleImageLabel.setMinimumSize(new java.awt.Dimension(100, 100)); + sampleImageLabel.setPreferredSize(new java.awt.Dimension(100, 100)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -104,19 +104,19 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(fileSizeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(fileSizeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(isDeletedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(previewScrollPane) - .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(previewScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 587, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap()) ); layout.setVerticalGroup( @@ -130,7 +130,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(previewScrollPane)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(isDeletedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -155,7 +155,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere "DocumentPanel.nameLabel.more.text= and {0} more", "# {0} - numberOfImages", "DocumentPanel.numberOfImages.text=1 of {0} images", - "DocumentPanel.numberOfImages.noImages=No images"}) + "DocumentPanel.numberOfImages.noImages=No images", + "DocumentPanel.noImageExtraction.text=No Image Extraction"}) @Override public Component getListCellRendererComponent(JList list, DocumentWrapper value, int index, boolean isSelected, boolean cellHasFocus) { @@ -164,7 +165,10 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere if (value.getResultFile().getAllInstances().size() > 1) { nameText += Bundle.DocumentPanel_nameLabel_more_text(value.getResultFile().getAllInstances().size() - 1); } - if (value.getSummary().getNumberOfImages() > 0) { + if (FileSearchData.getDocTypesWithoutImageExtraction().contains(value.getResultFile().getFirstInstance().getMIMEType())) { + numberOfImagesLabel.setText(Bundle.DocumentPanel_noImageExtraction_text()); + sampleImageLabel.setIcon(DiscoveryUiUtils.getUnsupportedImageThumbnail()); + } else if (value.getSummary().getNumberOfImages() > 0) { numberOfImagesLabel.setText(Bundle.DocumentPanel_numberOfImages_text(value.getSummary().getNumberOfImages())); sampleImageLabel.setIcon(new ImageIcon(value.getSummary().getSampleImage())); } else { diff --git a/Core/src/org/sleuthkit/autopsy/filequery/FileSearchData.java b/Core/src/org/sleuthkit/autopsy/filequery/FileSearchData.java index 32a2cf19cb..8efabf2704 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/FileSearchData.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/FileSearchData.java @@ -291,6 +291,14 @@ final class FileSearchData { "application/vnd.oasis.opendocument.text" //NON-NLS ).build(); + private static final ImmutableSet IMAGE_UNSUPPORTED_DOC_TYPES + = new ImmutableSet.Builder() + .add("application/pdf", //NON-NLS + "application/xhtml+xml").build(); //NON-NLS + + static Collection getDocTypesWithoutImageExtraction(){ + return Collections.unmodifiableCollection(IMAGE_UNSUPPORTED_DOC_TYPES); + } /** * Enum representing the file type. We don't simply use * FileTypeUtils.FileTypeCategory because: - Some file types categories diff --git a/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png b/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png new file mode 100644 index 0000000000000000000000000000000000000000..158b719935dd9a265dc01b8e8e4fd086e10f3183 GIT binary patch literal 4333 zcmaJ_XH*l)woV8ov_t1mlp2ck7Mg&B-XsVHgY+sLLz61SpcDfL5_<1Vn)D_}Zvmu; z96&&jYG~5S#kcOe@BVr}_U!p)?U}V_t(p10Jy8bwnv`TLWB>qwQd>*S@YWCfF)+bx z%Ox*2c(hMFpX4`X*WZvo*m*h3fqP!mUfX-#yCNuO((cmV*k-hT|Z=)mp=08oc( ztHB=oS?p#idd&B+_pfyjJ@E&=7FL51$2HvXE2n8yb{4)%2qFqs7Lk}@p|#u0$yI&j zZE&rO`T870D5l`O4>Gtn!88@CNd?Q$indU8YbUU*IX=$&qEs?H3(-vruw?g_o znn)W6Qh%4yeee%3fgnq3n#)G0gbdwn#A?j&$Qp*Q0)*GE?LXEEEeje>~5P``Zf!zd8L#sm>IsOka zB~_>K88v2!x}Eem>ufa0o7a@kY@4*OW8D?A%Rcrv2f;8<{>=5k$?oNtSmd;t)Uycy z8Y-5#Em>1Q*Kgv$2)_yRH5!hZJ|(aQ3OmwbX~?`y(*<$br%<2m-wsAWc5^l{gO2s0 zN_io=NmP`9gsOCV@F)5fzLJ@{vvwwTu(nyTg*EI;tV`wrqI15(`=;qqb1t4+8f#}} zzoT8hEpV9Xvm6;=v*_mr?AAb?ukI!3Lj2mDqKp*BR$^-$uQz>iLIjU>hiDT&HP*Sc zy1&b5>^pC3e%=(=m0aa3qt8-MLXHMNkF8FtH zQpBw29Zn(tP%(J_r0b4$7GJn;>S92>8HeQ-y9zsIXxW|DsN}jD`gx}PtZfcw$C;dt z5KTrsEUQ&8<%}*kD_+Sri`Q*ww4>U^l?8es=6zyxOnGHq9sZI{ylUV3S&zI5Fdn$p zZ?J3V__%rQ6C6`HDP^OJaieM7J6g(|?wo`U&5GJ%J1%3Z4nWt4m;G>SHUmi0@+O9G z2fQ>P3|&pp|IxZvH?DW=H6Q_Zx;aZ;+d*%$EX-mxEJOm?zTy4En)sCppTdAVNmwYDD1cavHF zwJNc{V6+#JFOf1>ncTybdx*VW*K(_=lNgoOtD0e(UZ3MCK1+Sfw|4dBitq@0|Km{e z`9&q1D5rYZxe{6Q;C!_(dnu9PeYQ~T2uXZpdu_qHq?n&w{IfelD^*8dwy`>e-N&Qv zql;G(CKuo*n}~%M+VO5_*QopLd4cYs zbRn_f&RyWD4?ga{2qrQp>a@f~tJm88OuHPmp&4ExK)f3NKwfX|dH<-qC9ko}5cN#m z_4m*Dj9JWNm6-z7i)W*rl`~ljmnUL-?tB>e5W-qy?fk`KWxP{+8zij0y8Yw&UNOyxL=J_DYK06&U=q=E1pSqCMPuxL0E< zS8*^bj=wzoL?^X|+noh`XzN*BpG)3rS5 zd&40`>Gpm9D&a@#k;P<+qUi;X%*82N+{#_tmh{6@Y6Foh5>MpBwHmFfSxcUFc3soK zlG96MUMrQ~EZe=?yk{w!HN3dOrRT9d&`gsc)$O!ix+wy?Q@=Fhi6K< z9(u(ZKwbOp^Iww`t{mWRg}=ia0=_WP9n)yHsjF& zDO(vRm_qLGa8q))#;4s_Q>>6Grx<(|pfnchB8;k8Km6@gBG91c`IcyfQ0SP0?BDOH zbuF3!vmg-gS|nLhbXQzbt~>7v&N~U_;mlo2%V7~@X+<1C>dYc*LK(T}u+a>IOM^e` z8xOhz2%QThEP?wJU*8%vWWh(i*`JgPn=EqNgIJyZ9p>AOI{R#Ko;0jL-fGaWYOp~$ z_55wK5(YRigM=AF7@Z04r`ml?nIGBE_o_El%piY3m~Oed^ZmKIx?krxA+Lcz_$d4O z0u^lC)=R!mIyO_kDFtS(&=QY)XQ$6g)tW@^4x@W589?Sc(vdXekYV#x$b}1(ijR#z z49^$yz`t7(iiV_UHlLyh^qgV|XMYO^5MIFYG#yLeJ>uAG2JMMKdhm~2MpMh}r0{i;wyL_MC&&*vXL#ppDzpR#9wt@9@A8f`{ zZrPFbESe`0A+1^8=rpQ0R@1Pq{dvi1K%VVJ-;g1-)E@T;vH^&KK z`b~b+i7dKvgY;I7&W{~sZ4NzaGDBe)gV6n`Bg@jcs0 zRuXF>GK+GARTN2KzgM)(dUR|-o6`9$)Mh5)PJ~4mM$g;)CF)ToB}(#Z$3hK5O4Z+W zaM*+2hu8V34ESHeX8|`|@u{L;Y4gp@uaUvoG|Y}}i}L?u;uu9fxN3??ay;Y^R>AW? z8Pd*Znugc>GtTV4pnmAZ3nxpol05lAEZ-qgU$eWx=OdxLYy9iiaH0JW=qA#yzq@LqXYhyjpS_ zX%u;Ye@h2y+pvjHCUP|(n&>0omhjbtgz}&KVrtj^96| z!kdukCPuCI-CM^>2_d?}Zr@1lg7OPT)s(`F4KXe-H8$IQW(VcTC>`WSI62-@x8Dh> z_eAOxyq0{>l+7fb*qg#bAd5@ws}MK-8Z0N_fn{h!VSMnYvG+X+2SNEQxVIq!xX-eY zZGE*gi=u0m^ARadBkC!^>B~Qv>Q?8CaMC-4J-&gi|K9M{R^K=%a4;<4?E}(!Y!{e9fo3d zU!u<7os4#LNZGeCwApjx{^O&kXsAHvdyY#zTi&4yopzIGvEsB`&`EIoZuu}L zb-xeE4S8$b6?M?TedsXy<7Eae<8DoS+x+}SCkp&*6e zQ=IDav#mJQw^)mtN?+^4HT7l7v=@UC&PP<%Ii1I${%^&WN}c8y^h$6P=83i{jrC_F zQ5grF=S!-5%wWNQ({zvH+A0I{S}2;A7m(2@5Y&m!_MLr+q2UVHGz;j;279e@!tUWT?yUxCAH-vKL!?ik5ppz<$7`f9lK)nnh~qmS=os=> zph|QM1R8ovsH6DYx@|zT7)`{T?ISDgKF$hsV_Tzif4KmG54NvglZ9FPL(S=BsEzvV z^8Q!H=U1D}BOfd0>gKoY0(Kj-<6=cf{0Nw~^};9O(@d?OT|n9MA7NaZ1Mp5E1tQE9 z?Hw!v?p~uIsZx_%LJk-7!?Y!)4)N6Y?aGneuPVKJkeKMavfBE?XT>0;riZsmtl?x1 z94c^BoUcz3RZ;UeoA7YaOZQEoE*s61cg7DLK_Vz4>yRE7kMw?nX(&tpB)^%8i5lw4E+wWxDV0Q(!o z-w<8oqzUViwLANs(f(vHKklBB_)mLel! zOS4RMNqTWsaucDzWfopJ=7OU6k*0XxS#8Iq3hyI#Chl5UQJya+sz~l4A8!t9kU{!O z)Jj;jM$FN}!obNUHmRc3~iVN{0H zu^&>(C8$U7ovTD>s6w>)4%Bxxij#UKzJyiAP)ZpL>}DZe3*#KR81yY~39Ba7FhN9Y zE4)zW5DKC1PuDBSbkU-2yU3kHQI$!+_CBE7PUL}Q2P9A|pA-I>0-&Vk z2mj+Ihr@0q0$}hkW@y8$YP^=30==f9l=h+}po)t4wkvF}#d}io6-=SjB zg8e^%f2iosJikJa2FPMFl>g5Q<2wB}@P(=vAohX-_@^Q+2nfF&&FJ==bpjBsmZp0A z17r9|G=(aU5FENN2D`9!J%CIvqA?YgG6N$)~VqnAQEqk!hqQtHq3QEHSSF$O-ApfM;YeAb%jd npb;8XO_3v(!_T0@dl(Wct^3ZFBs1>zivpmnuCMk%#VY(?19miG literal 0 HcmV?d00001 From f0df100758fe5fdc5a55cf5cedff3b69b1f2e055 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 20 Mar 2020 08:48:39 -0400 Subject: [PATCH 04/20] 6077 fix capitalization of MIME type --- .../images/image-extraction-not-supported.png | Bin 4333 -> 4543 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png b/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png index 158b719935dd9a265dc01b8e8e4fd086e10f3183..3ab47f4f5687db4a27fa83beb2faa5516b93ff24 100644 GIT binary patch literal 4543 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 F{sp@PHO>G4 From 422d17c53e77271cbb787347bb83fbafa032daff Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 20 Mar 2020 08:53:35 -0400 Subject: [PATCH 05/20] 6077 fix size of image --- .../images/image-extraction-not-supported.png | Bin 4543 -> 1045 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png b/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png index 3ab47f4f5687db4a27fa83beb2faa5516b93ff24..2df9278f76ee3709b8f366ed3d33f8f6a73ec6ea 100644 GIT binary patch literal 1045 zcmeAS@N?(olHy`uVBq!ia0vp^DIm!lvI6;>1s;*b3=BdgAk26#O}>JGfq9jui(^Pd+}oSJd9Ms4S|8>unw@wqY{sTu zzL_OATn!wPnBOoemK~6*iv4}|ZKwU`@|_zOKdBa3+120tWU)%im$$zY^M#Lok}Ig! zlDA~m`LQe7_(#vo#E+^^dmjHfq1OKN>%_03ZZq#Cmb{8st03@GK-jwH9NX!42De_m zHC9c^n6^S8N#oaD#U6=ShFu*JTGNjHdlT5M+x<|Z*Wy)y4ex4T+`w&<|!St+!t z^Jzt7c|h;SJY$lW-txbRTmMDr?7w%*{;x+fQs}7D`DGAfh zURv|#Z}!&xb)W6z!&{y0!m2+#1o}YoTHWlmmL^+&+Rk3585;9GX^DcX(TclP@t+@k zKFHqmcvby_WZnPbK-1e&#Q&TLpKYlvulLIpWZRclS-#h&=6wdqCC`(Xx3BNh>WV|D zPrYmZ@!2lk)O7jhrrYvnuiq-w?6%#1rE==mS$`OlE}8!jpXvTT>iklmHn-C@i$j0A z`T`v|$M3A%CMKYdlv8G}s)%9*${t&GCFE@UMMhT5Nr9UCey*xuR0D}7hgZ!E-Mg}( zN#vwO%$f50=dUdSb0m6Jf@sg;rN6J74PV*3Si$vD#6#ZNjIIrWKy!0%a&IUN1{t<2 zYVW<>y+D=TKR>5$-Tr1fFc>m5_HVuZFa4D%&<3fjFM03vfLeG{Q@2)cI0cN}ObzX9 zmix_|K;3P7)^ILRaDBuBRB#T)Slja{JP{OyqWZ5nFmCH6=C0)4f#ZkJ20+L+2(*u=cFWNS&iRpxcoDU+s(8oa43UE$27IYrdK zBw0kza7ij_i=gvn7gj;%z&Ng8rM9%TqwYMVT)hSx55M5q@PKdeqC2dYe?v3M-Bk^b zfeNPIv5f!GP?>P{`rY{xKU4-E;d=k;-#_N*B2s^a&I^hGvoeFHtDnm{r-UW|)Thh@ literal 4543 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 Date: Fri, 20 Mar 2020 08:56:18 -0400 Subject: [PATCH 06/20] 6077 fix ordering of logic in case they become supported --- .../org/sleuthkit/autopsy/filequery/DocumentPanel.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 6aef2df1e9..6ea00a39ef 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -165,12 +165,12 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere if (value.getResultFile().getAllInstances().size() > 1) { nameText += Bundle.DocumentPanel_nameLabel_more_text(value.getResultFile().getAllInstances().size() - 1); } - if (FileSearchData.getDocTypesWithoutImageExtraction().contains(value.getResultFile().getFirstInstance().getMIMEType())) { - numberOfImagesLabel.setText(Bundle.DocumentPanel_noImageExtraction_text()); - sampleImageLabel.setIcon(DiscoveryUiUtils.getUnsupportedImageThumbnail()); - } else if (value.getSummary().getNumberOfImages() > 0) { + if (value.getSummary().getNumberOfImages() > 0) { numberOfImagesLabel.setText(Bundle.DocumentPanel_numberOfImages_text(value.getSummary().getNumberOfImages())); sampleImageLabel.setIcon(new ImageIcon(value.getSummary().getSampleImage())); + } else if (FileSearchData.getDocTypesWithoutImageExtraction().contains(value.getResultFile().getFirstInstance().getMIMEType())) { + numberOfImagesLabel.setText(Bundle.DocumentPanel_noImageExtraction_text()); + sampleImageLabel.setIcon(DiscoveryUiUtils.getUnsupportedImageThumbnail()); } else { numberOfImagesLabel.setText(Bundle.DocumentPanel_numberOfImages_noImages()); sampleImageLabel.setIcon(null); From 599f5c673a00fbccf52537802cd430948e614ca8 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 20 Mar 2020 09:02:10 -0400 Subject: [PATCH 07/20] 6077 fix insets and add comment --- .../sleuthkit/autopsy/filequery/DiscoveryUiUtils.java | 10 ++++++++-- .../sleuthkit/autopsy/filequery/DocumentPanel.form | 9 +++++---- .../sleuthkit/autopsy/filequery/DocumentPanel.java | 11 ++++++----- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java b/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java index 5fc2bbc767..c9ad380a32 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DiscoveryUiUtils.java @@ -84,8 +84,14 @@ final class DiscoveryUiUtils { } return Bundle.DiscoveryUiUtility_sizeLabel_text(size, units); } - - static ImageIcon getUnsupportedImageThumbnail(){ + + /** + * Get the image to use when the document type does not support image + * extraction. + * + * @return An image that indicates we don't know if there are images. + */ + static ImageIcon getUnsupportedImageThumbnail() { return UNSUPPORTED_DOCUMENT_THUMBNAIL; } diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 29a89baf96..d38b254a90 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -39,9 +39,9 @@ - - - + + + @@ -59,8 +59,8 @@ - + @@ -157,6 +157,7 @@ + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 6ea00a39ef..5c308df129 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -92,6 +92,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere previewScrollPane.setViewportView(previewTextArea); sampleImageLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + sampleImageLabel.setIconTextGap(0); sampleImageLabel.setMaximumSize(new java.awt.Dimension(100, 100)); sampleImageLabel.setMinimumSize(new java.awt.Dimension(100, 100)); sampleImageLabel.setPreferredSize(new java.awt.Dimension(100, 100)); @@ -114,9 +115,9 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(previewScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 587, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(sampleImageLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap()) ); layout.setVerticalGroup( @@ -128,8 +129,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(previewScrollPane)) + .addComponent(previewScrollPane) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) From d5d06241520b102eadb311f467f97dbd92824eaf Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 20 Mar 2020 09:06:30 -0400 Subject: [PATCH 08/20] 6077 make image a tiny bit smaller --- .../images/image-extraction-not-supported.png | Bin 1045 -> 2512 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png b/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png index 2df9278f76ee3709b8f366ed3d33f8f6a73ec6ea..520055fdc72f6f53a7b65b1e553b31e040fb120b 100644 GIT binary patch delta 2488 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 From 42960d23deed1af3f5f96938676053dcb1abb856 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 14:18:27 -0400 Subject: [PATCH 09/20] 6077 remove unused import --- Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java index c35ebe481c..5832625b73 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/FileSearch.java @@ -49,7 +49,6 @@ import org.imgscalr.Scalr; import org.netbeans.api.progress.ProgressHandle; import org.opencv.core.Mat; import org.opencv.highgui.VideoCapture; -import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; From 67ac4555be8924e2d5f01a9aed1610c529667d10 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 14:20:13 -0400 Subject: [PATCH 10/20] 6077 remove stray pixel --- .../images/image-extraction-not-supported.png | Bin 2512 -> 2485 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png b/Core/src/org/sleuthkit/autopsy/images/image-extraction-not-supported.png index 520055fdc72f6f53a7b65b1e553b31e040fb120b..99a40745a7438ed05bafee1c5e311f0ef13aff66 100644 GIT binary patch delta 2389 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 From 67a0952e7b488a7f305587cab113813189741ca5 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 14:38:52 -0400 Subject: [PATCH 11/20] 6077 change text when file type unsupported --- .../org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED | 1 + Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED index c5dd80db41..50086b7c9b 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED @@ -16,6 +16,7 @@ DiscoveryUiUtility.sizeLabel.text=Size: {0} {1} DiscoveryUiUtility.terraBytes.text=TB # {0} - otherInstanceCount DocumentPanel.nameLabel.more.text=\ and {0} more +DocumentPanel.noImageExtraction.text=0 of ? images DocumentPanel.numberOfImages.noImages=No images # {0} - numberOfImages DocumentPanel.numberOfImages.text=1 of {0} images diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 5c308df129..30a94a75ca 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -157,7 +157,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere "# {0} - numberOfImages", "DocumentPanel.numberOfImages.text=1 of {0} images", "DocumentPanel.numberOfImages.noImages=No images", - "DocumentPanel.noImageExtraction.text=No Image Extraction"}) + "DocumentPanel.noImageExtraction.text=0 of ? images"}) @Override public Component getListCellRendererComponent(JList list, DocumentWrapper value, int index, boolean isSelected, boolean cellHasFocus) { From 2b47ec24a10a6a65b1c00f9b405e010f659fa354 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:04:07 -0400 Subject: [PATCH 12/20] 6077 change text area to text pane to eliminated boxes --- .../autopsy/filequery/DocumentPanel.form | 72 +++++++++---------- .../autopsy/filequery/DocumentPanel.java | 48 ++++++------- 2 files changed, 55 insertions(+), 65 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index d38b254a90..74b8e8bedd 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -34,10 +34,7 @@ - - - - + @@ -47,6 +44,13 @@ + + + + + + + @@ -58,11 +62,8 @@ - - - - - + + @@ -70,6 +71,13 @@ + + + + + + + @@ -119,37 +127,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -171,5 +148,20 @@ + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 30a94a75ca..4ddae94fce 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -57,10 +57,10 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere scoreLabel = new javax.swing.JLabel(); fileSizeLabel = new javax.swing.JLabel(); nameLabel = new javax.swing.JLabel(); - javax.swing.JScrollPane previewScrollPane = new javax.swing.JScrollPane(); - previewTextArea = new javax.swing.JTextArea(); sampleImageLabel = new javax.swing.JLabel(); numberOfImagesLabel = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + jTextPane1 = new javax.swing.JTextPane(); setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -78,25 +78,16 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere fileSizeLabel.setToolTipText(org.openide.util.NbBundle.getMessage(DocumentPanel.class, "DocumentPanel.fileSizeLabel.toolTipText")); // NOI18N - previewScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); - - previewTextArea.setEditable(false); - previewTextArea.setColumns(20); - previewTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N - previewTextArea.setLineWrap(true); - previewTextArea.setRows(5); - previewTextArea.setWrapStyleWord(true); - previewTextArea.setEnabled(false); - previewTextArea.setFocusable(false); - previewTextArea.setMaximumSize(new java.awt.Dimension(164, 94)); - previewScrollPane.setViewportView(previewTextArea); - sampleImageLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); sampleImageLabel.setIconTextGap(0); sampleImageLabel.setMaximumSize(new java.awt.Dimension(100, 100)); sampleImageLabel.setMinimumSize(new java.awt.Dimension(100, 100)); sampleImageLabel.setPreferredSize(new java.awt.Dimension(100, 100)); + jTextPane1.setEditable(false); + jTextPane1.setEnabled(false); + jScrollPane1.setViewportView(jTextPane1); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -111,14 +102,17 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(previewScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 587, Short.MAX_VALUE)) + .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap()) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 585, Short.MAX_VALUE) + .addGap(120, 120, 120))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -128,15 +122,18 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 17, Short.MAX_VALUE) .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(previewScrollPane) - .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(isDeletedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fileSizeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(39, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(37, Short.MAX_VALUE))) ); }// //GEN-END:initComponents @@ -144,9 +141,10 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel fileSizeLabel; private javax.swing.JLabel isDeletedLabel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTextPane jTextPane1; private javax.swing.JLabel nameLabel; private javax.swing.JLabel numberOfImagesLabel; - private javax.swing.JTextArea previewTextArea; private javax.swing.JLabel sampleImageLabel; private javax.swing.JLabel scoreLabel; // End of variables declaration//GEN-END:variables @@ -177,8 +175,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere sampleImageLabel.setIcon(null); } nameLabel.setText(nameText); - previewTextArea.setText(value.getSummary().getSummaryText()); - previewTextArea.setCaretPosition(0); + jTextPane1.setText(value.getSummary().getSummaryText()); + jTextPane1.setCaretPosition(0); DiscoveryUiUtils.setDeletedIcon(value.getResultFile().isDeleted(), isDeletedLabel); DiscoveryUiUtils.setScoreIcon(value.getResultFile(), scoreLabel); setBackground(isSelected ? SELECTION_COLOR : list.getBackground()); From 04d962ddf4ffbc2bf41cc6c38f895bdf53c326cb Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:12:32 -0400 Subject: [PATCH 13/20] 6077 fix size of panel --- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form | 6 +++--- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 74b8e8bedd..3be707bb11 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -46,7 +46,7 @@ - + @@ -73,8 +73,8 @@ - - + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 4ddae94fce..1c2c41a2de 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -131,8 +131,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap(39, Short.MAX_VALUE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(36, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(37, Short.MAX_VALUE))) ); }// //GEN-END:initComponents From 93645568e006e206e5feff98455a5bf73fb98ee1 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:21:31 -0400 Subject: [PATCH 14/20] 6077 eliminate unnecessary scroll pane --- .../autopsy/filequery/DocumentPanel.form | 50 +++++++------------ .../autopsy/filequery/DocumentPanel.java | 35 ++++++------- 2 files changed, 33 insertions(+), 52 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 3be707bb11..ce8baeac5f 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -34,7 +34,13 @@ - + + + + + + + @@ -44,13 +50,6 @@ - - - - - - - @@ -62,7 +61,10 @@ - + + + + @@ -71,13 +73,6 @@ - - - - - - - @@ -148,20 +143,13 @@ - - - - - - - - - - - - - - - + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 1c2c41a2de..44a1ddd4a2 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -59,8 +59,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere nameLabel = new javax.swing.JLabel(); sampleImageLabel = new javax.swing.JLabel(); numberOfImagesLabel = new javax.swing.JLabel(); - jScrollPane1 = new javax.swing.JScrollPane(); - jTextPane1 = new javax.swing.JTextPane(); + previewTextPane = new javax.swing.JTextPane(); setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -84,9 +83,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere sampleImageLabel.setMinimumSize(new java.awt.Dimension(100, 100)); sampleImageLabel.setPreferredSize(new java.awt.Dimension(100, 100)); - jTextPane1.setEditable(false); - jTextPane1.setEnabled(false); - jScrollPane1.setViewportView(jTextPane1); + previewTextPane.setEditable(false); + previewTextPane.setBackground(new java.awt.Color(240, 240, 240)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -102,17 +100,16 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() - .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(previewTextPane, javax.swing.GroupLayout.PREFERRED_SIZE, 583, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(sampleImageLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap()) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 585, Short.MAX_VALUE) - .addGap(120, 120, 120))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -122,18 +119,15 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 17, Short.MAX_VALUE) .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(sampleImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sampleImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(previewTextPane, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scoreLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(isDeletedLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fileSizeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap(36, Short.MAX_VALUE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(37, Short.MAX_VALUE))) ); }// //GEN-END:initComponents @@ -141,10 +135,9 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel fileSizeLabel; private javax.swing.JLabel isDeletedLabel; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JTextPane jTextPane1; private javax.swing.JLabel nameLabel; private javax.swing.JLabel numberOfImagesLabel; + private javax.swing.JTextPane previewTextPane; private javax.swing.JLabel sampleImageLabel; private javax.swing.JLabel scoreLabel; // End of variables declaration//GEN-END:variables @@ -175,8 +168,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere sampleImageLabel.setIcon(null); } nameLabel.setText(nameText); - jTextPane1.setText(value.getSummary().getSummaryText()); - jTextPane1.setCaretPosition(0); + previewTextPane.setText(value.getSummary().getSummaryText()); + previewTextPane.setCaretPosition(0); DiscoveryUiUtils.setDeletedIcon(value.getResultFile().isDeleted(), isDeletedLabel); DiscoveryUiUtils.setScoreIcon(value.getResultFile(), scoreLabel); setBackground(isSelected ? SELECTION_COLOR : list.getBackground()); From 960aad46a02163a630424ca12a7f8ed2d1f7aaae Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:22:09 -0400 Subject: [PATCH 15/20] 6077 add border back --- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form | 5 +++++ Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java | 1 + 2 files changed, 6 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index ce8baeac5f..d46e5446e6 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -149,6 +149,11 @@ + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 44a1ddd4a2..cd16939750 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -85,6 +85,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere previewTextPane.setEditable(false); previewTextPane.setBackground(new java.awt.Color(240, 240, 240)); + previewTextPane.setBorder(javax.swing.BorderFactory.createEtchedBorder()); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); From 93fdb663c8096284e7f38a9fef6997111aadb91a Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:26:03 -0400 Subject: [PATCH 16/20] 6077 fix panel background color --- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form | 3 --- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java | 1 - 2 files changed, 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index d46e5446e6..d813999dd5 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -146,9 +146,6 @@ - - - diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index cd16939750..8a785d95c1 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -84,7 +84,6 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere sampleImageLabel.setPreferredSize(new java.awt.Dimension(100, 100)); previewTextPane.setEditable(false); - previewTextPane.setBackground(new java.awt.Color(240, 240, 240)); previewTextPane.setBorder(javax.swing.BorderFactory.createEtchedBorder()); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); From 0fb9e2547e95bc47289ecf70e7858bc29fbf789e Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 24 Mar 2020 17:29:48 -0400 Subject: [PATCH 17/20] 6077 fix resizing --- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form | 4 ++-- Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index d813999dd5..6a5102fada 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -37,8 +37,8 @@ - - + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 8a785d95c1..2a021ef47b 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -103,8 +103,8 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() - .addComponent(previewTextPane, javax.swing.GroupLayout.PREFERRED_SIZE, 583, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE))) + .addComponent(previewTextPane, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) + .addGap(0, 0, 0))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) From b378078cfbb6cd3e3aa4ed78c22c10c307ef596b Mon Sep 17 00:00:00 2001 From: Raman Arora Date: Wed, 25 Mar 2020 11:43:45 -0400 Subject: [PATCH 18/20] 6172: Validation of correlation attribute value not happening correctly --- .../CorrelationAttributeNormalizer.java | 27 ++++++------- .../relationships/AccountSummary.java | 30 +++++++++------ .../RelationshipsNodeUtilities.java | 38 ------------------- InternalPythonModules/android/calllog.py | 3 ++ InternalPythonModules/android/general.py | 17 ++++++++- InternalPythonModules/android/textnow.py | 30 +++++++++++---- InternalPythonModules/android/whatsapp.py | 32 +++++++++++----- 7 files changed, 97 insertions(+), 80 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeNormalizer.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeNormalizer.java index f68dab484a..d762e74945 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeNormalizer.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeNormalizer.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.Optional; import org.apache.commons.validator.routines.DomainValidator; import org.apache.commons.validator.routines.EmailValidator; +import org.sleuthkit.datamodel.CommunicationsUtils; +import org.sleuthkit.datamodel.TskCoreException; /** * Provides functions for normalizing data by attribute type before insertion or @@ -152,26 +154,25 @@ final public class CorrelationAttributeNormalizer { } /** - * Verify that there is an '@' and no invalid characters. Should normalize - * to lower case. + * Verify and normalize email address. */ private static String normalizeEmail(String data) throws CorrelationAttributeNormalizationException { - EmailValidator validator = EmailValidator.getInstance(true, true); - if (validator.isValid(data)) { - return data.toLowerCase(); - } else { - throw new CorrelationAttributeNormalizationException(String.format("Data was expected to be a valid email address: %s", data)); - } + try { + return CommunicationsUtils.normalizeEmailAddress(data); + } + catch(TskCoreException ex) { + throw new CorrelationAttributeNormalizationException(String.format("Data was expected to be a valid email address: %s", data), ex); + } } /** - * Verify it is only numbers and '+'. Strip spaces, dashes, and parentheses. + * Verify and normalize phone number. */ private static String normalizePhone(String data) throws CorrelationAttributeNormalizationException { - if (data.matches("\\+?[0-9()\\-\\s]+")) { - String phoneNumber = data.replaceAll("[^0-9\\+]", ""); - return phoneNumber; - } else { + try { + return CommunicationsUtils.normalizePhoneNum(data); + } + catch(TskCoreException ex) { throw new CorrelationAttributeNormalizationException(String.format("Data was expected to be a valid phone number: %s", data)); } } diff --git a/Core/src/org/sleuthkit/autopsy/communications/relationships/AccountSummary.java b/Core/src/org/sleuthkit/autopsy/communications/relationships/AccountSummary.java index 0888a105a3..5401f1a839 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/relationships/AccountSummary.java +++ b/Core/src/org/sleuthkit/autopsy/communications/relationships/AccountSummary.java @@ -33,6 +33,7 @@ import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.blackboardutils.attributes.MessageAttachments.FileAttachment; import org.sleuthkit.datamodel.blackboardutils.attributes.MessageAttachments; +import org.sleuthkit.datamodel.CommunicationsUtils; /** * @@ -97,20 +98,27 @@ class AccountSummary { boolean isReference = false; - for (BlackboardAttribute attribute: attributes) { + for (BlackboardAttribute attribute : attributes) { + String attributeTypeName = attribute.getAttributeType().getTypeName(); String attributeValue = attribute.getValueString(); - - if (attributeTypeName.contains("PHONE")) { - attributeValue = RelationshipsNodeUtilities.normalizePhoneNum(attributeValue); - } else if (attributeTypeName.contains("EMAIL")) { - attributeValue = RelationshipsNodeUtilities.normalizeEmailAddress(attributeValue); - } - - if ( typeSpecificID.equals(attributeValue) ) { - isReference = true; - break; + try { + if (attributeTypeName.contains("PHONE")) { + attributeValue = CommunicationsUtils.normalizePhoneNum(attributeValue); + } else if (attributeTypeName.contains("EMAIL")) { + attributeValue = CommunicationsUtils.normalizeEmailAddress(attributeValue); + } + + if (typeSpecificID.equals(attributeValue)) { + isReference = true; + break; + } + } catch (TskCoreException ex) { + logger.log(Level.WARNING, String.format("Exception thrown " + + "in trying to normalize attribute value: %s", + attributeValue), ex); //NON-NLS } + } if (isReference) { referenceCnt++; diff --git a/Core/src/org/sleuthkit/autopsy/communications/relationships/RelationshipsNodeUtilities.java b/Core/src/org/sleuthkit/autopsy/communications/relationships/RelationshipsNodeUtilities.java index 252b4ee1ff..be150dd590 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/relationships/RelationshipsNodeUtilities.java +++ b/Core/src/org/sleuthkit/autopsy/communications/relationships/RelationshipsNodeUtilities.java @@ -69,42 +69,4 @@ final class RelationshipsNodeUtilities { } } - /** - * Normalize the phone number by removing all non numeric characters, except - * for leading +. - * - * This function copied from CommunicationManager. - * - * @param phoneNum The phone number to normalize - * - * @return The normalized phone number. - */ - static String normalizePhoneNum(String phoneNum) { - String normailzedPhoneNum = phoneNum.replaceAll("\\D", ""); - - if (phoneNum.startsWith("+")) { - normailzedPhoneNum = "+" + normailzedPhoneNum; - } - - if (normailzedPhoneNum.isEmpty()) { - normailzedPhoneNum = phoneNum; - } - - return normailzedPhoneNum; - } - - /** - * Normalize the given email address by converting it to lowercase. - * - * This function copied from CommunicationManager. - * - * @param emailAddress The email address tot normalize - * - * @return The normalized email address. - */ - static String normalizeEmailAddress(String emailAddress) { - String normailzedEmailAddr = emailAddress.toLowerCase(); - - return normailzedEmailAddr; - } } diff --git a/InternalPythonModules/android/calllog.py b/InternalPythonModules/android/calllog.py index 71c5f112ad..5b3faf0697 100644 --- a/InternalPythonModules/android/calllog.py +++ b/InternalPythonModules/android/calllog.py @@ -105,6 +105,9 @@ class CallLogAnalyzer(general.AndroidComponentAnalyzer): timeStamp = resultSet.getLong("date") / 1000 number = resultSet.getString("number") + if not general.isValidPhoneNumer(number): + number = None + duration = resultSet.getLong("duration") # duration of call is in seconds name = resultSet.getString("name") # name of person dialed or called. None if unregistered diff --git a/InternalPythonModules/android/general.py b/InternalPythonModules/android/general.py index e8cb199b8d..f0dfb05dfd 100644 --- a/InternalPythonModules/android/general.py +++ b/InternalPythonModules/android/general.py @@ -1,7 +1,7 @@ """ Autopsy Forensic Browser -Copyright 2016 Basis Technology Corp. +Copyright 2016-2020 Basis Technology Corp. Contact: carrier sleuthkit org Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,11 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + """ +import re + MODULE_NAME = "Android Analyzer" """ @@ -37,3 +40,15 @@ def appendAttachmentList(msgBody, attachmentsList): body = body + "\n".join(list(filter(None, attachmentsList))) return body + +""" +Checks if the given string might be a phone number. +""" +def isValidPhoneNumer(data): + return bool(re.match(r"^\+?[0-9()\-\s]+$", data)) + +""" +Checks if the given string is a valid email address. +""" +def isValidEmailAddress(data): + return bool(re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", data)) diff --git a/InternalPythonModules/android/textnow.py b/InternalPythonModules/android/textnow.py index 49ab3325c2..e05763cae9 100644 --- a/InternalPythonModules/android/textnow.py +++ b/InternalPythonModules/android/textnow.py @@ -109,13 +109,21 @@ class TextNowAnalyzer(general.AndroidComponentAnalyzer): try: contacts_parser = TextNowContactsParser(textnow_db) while contacts_parser.next(): - helper.addContact( - contacts_parser.get_contact_name(), - contacts_parser.get_phone(), - contacts_parser.get_home_phone(), - contacts_parser.get_mobile_phone(), - contacts_parser.get_email() - ) + name = contacts_parser.get_contact_name() + phone = contacts_parser.get_phone() + home_phone = contacts_parser.get_home_phone() + mobile_phone = contacts_parser.get_mobile_phone() + email = contacts_parser.get_email() + + # add contact if we have at least one valid phone/email + if phone or home_phone or mobile_phone or email: + helper.addContact( + name, + phone, + home_phone, + mobile_phone, + email + ) contacts_parser.close() except SQLException as ex: #Error parsing TextNow db @@ -277,7 +285,13 @@ class TextNowContactsParser(TskContactsParser): return self.result_set.getString("name") def get_phone(self): - return self.result_set.getString("number") + number = self.result_set.getString("number") + return (number if general.isValidPhoneNumer(number) else None) + + def get_email(self): + # occasionally the 'number' column may have an email address instead + value = self.result_set.getString("number") + return (value if general.isValidEmailAddress(value) else None) class TextNowMessagesParser(TskMessagesParser): """ diff --git a/InternalPythonModules/android/whatsapp.py b/InternalPythonModules/android/whatsapp.py index 85d71983d2..5346545450 100644 --- a/InternalPythonModules/android/whatsapp.py +++ b/InternalPythonModules/android/whatsapp.py @@ -172,14 +172,22 @@ class WhatsAppAnalyzer(general.AndroidComponentAnalyzer): try: contacts_parser = WhatsAppContactsParser(contacts_db, self._PARSER_NAME) while contacts_parser.next(): - helper.addContact( - contacts_parser.get_contact_name(), - contacts_parser.get_phone(), - contacts_parser.get_home_phone(), - contacts_parser.get_mobile_phone(), - contacts_parser.get_email(), - contacts_parser.get_other_attributes() - ) + name = contacts_parser.get_contact_name() + phone = contacts_parser.get_phone() + home_phone = contacts_parser.get_home_phone() + mobile_phone = contacts_parser.get_mobile_phone() + email = contacts_parser.get_email() + + # add contact if we have at least one valid phone/email + if phone or home_phone or mobile_phone or email: + helper.addContact( + name, + phone, + home_phone, + mobile_phone, + email, + contacts_parser.get_other_attributes() + ) contacts_parser.close() except SQLException as ex: self._logger.log(Level.WARNING, "Error querying the whatsapp database for contacts.", ex) @@ -426,8 +434,14 @@ class WhatsAppContactsParser(TskContactsParser): return self.result_set.getString("name") def get_phone(self): - return self.result_set.getString("number") + number = self.result_set.getString("number") + return (number if general.isValidPhoneNumer(number) else None) + def get_email(self): + # occasionally the 'number' column may have an email address instead + value = self.result_set.getString("number") + return (value if general.isValidEmailAddress(value) else None) + def get_other_attributes(self): return [BlackboardAttribute( BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ID, From 0bce90c6aa3e081da3c18eea531eca4196f9da34 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 25 Mar 2020 15:28:21 -0400 Subject: [PATCH 19/20] 6077 use autowrapping text pane --- .../org/sleuthkit/autopsy/filequery/DocumentPanel.form | 8 ++++---- .../org/sleuthkit/autopsy/filequery/DocumentPanel.java | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form index 6a5102fada..beacd1f271 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.form @@ -36,10 +36,7 @@ - - - - + @@ -152,6 +149,9 @@ + + + diff --git a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java index 2a021ef47b..87919cab87 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/DocumentPanel.java @@ -28,6 +28,7 @@ import javax.swing.JComponent; import javax.swing.JList; import javax.swing.ListCellRenderer; import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.corecomponents.AutoWrappingJTextPane; /** * Class which displays a preview and details about a document. @@ -59,7 +60,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere nameLabel = new javax.swing.JLabel(); sampleImageLabel = new javax.swing.JLabel(); numberOfImagesLabel = new javax.swing.JLabel(); - previewTextPane = new javax.swing.JTextPane(); + previewTextPane = new AutoWrappingJTextPane(); setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -102,9 +103,7 @@ public class DocumentPanel extends javax.swing.JPanel implements ListCellRendere .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(nameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(previewTextPane, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) - .addGap(0, 0, 0))) + .addComponent(previewTextPane, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(numberOfImagesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) From 588a9c5b2b5fcadaffefe101357b38c8beb7e209 Mon Sep 17 00:00:00 2001 From: Raman Arora Date: Thu, 26 Mar 2020 07:28:48 -0400 Subject: [PATCH 20/20] Call TSK util methods to validate phone/email. --- InternalPythonModules/android/general.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/InternalPythonModules/android/general.py b/InternalPythonModules/android/general.py index f0dfb05dfd..daa789a57c 100644 --- a/InternalPythonModules/android/general.py +++ b/InternalPythonModules/android/general.py @@ -18,7 +18,8 @@ limitations under the License. """ -import re +from org.sleuthkit.datamodel import TskCoreException +from org.sleuthkit.datamodel import CommunicationsUtils MODULE_NAME = "Android Analyzer" @@ -45,10 +46,18 @@ def appendAttachmentList(msgBody, attachmentsList): Checks if the given string might be a phone number. """ def isValidPhoneNumer(data): - return bool(re.match(r"^\+?[0-9()\-\s]+$", data)) + try: + return CommunicationsUtils.normalizePhoneNum(data) is not None + except TskCoreException as ex: + return False + """ Checks if the given string is a valid email address. """ def isValidEmailAddress(data): - return bool(re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", data)) + try: + return CommunicationsUtils.normalizeEmailAddress(data) is not None + except TskCoreException as ex: + return False +