diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java index 9604486df5..0a50fb0ec9 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java @@ -28,11 +28,8 @@ import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; import org.sleuthkit.datamodel.AbstractFile; -import org.sleuthkit.datamodel.BlackboardArtifact; -import org.sleuthkit.datamodel.TskCoreException; /** * Generic Application content viewer @@ -40,11 +37,11 @@ import org.sleuthkit.datamodel.TskCoreException; @ServiceProvider(service = DataContentViewer.class, position = 3) @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives public class FileViewer extends javax.swing.JPanel implements DataContentViewer { - + private static final int CONFIDENCE_LEVEL = 5; private static final long serialVersionUID = 1L; private static final Logger LOGGER = Logger.getLogger(FileViewer.class.getName()); - + private final Map mimeTypeToViewerMap = new HashMap<>(); // TBD: This hardcoded list of viewers should be replaced with a dynamic lookup @@ -56,7 +53,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer new WindowsRegistryViewer(), new PDFViewer() }; - + private FileTypeViewer lastViewer; /** @@ -74,9 +71,9 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer } }); } - + initComponents(); - + LOGGER.log(Level.INFO, "Created ApplicationContentViewer instance: {0}", this); //NON-NLS } @@ -85,7 +82,8 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer * * @param file * - * @return FileTypeViewer, null if no known content viewer supports the file + * @return FileTypeViewer, null if no known content viewer supports the + * file */ private FileTypeViewer getSupportingViewer(AbstractFile file) { FileTypeViewer viewer = mimeTypeToViewerMap.get(file.getMIMEType()); @@ -112,18 +110,18 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer // End of variables declaration//GEN-END:variables @Override public void setNode(Node selectedNode) { - + resetComponent(); - - if (selectedNode == null || !isSupported(selectedNode)) { + + if (selectedNode == null) { return; } - + AbstractFile file = selectedNode.getLookup().lookup(AbstractFile.class); if ((file == null) || (file.isDir())) { return; } - + String mimeType = file.getMIMEType(); if (Strings.isNullOrEmpty(mimeType)) { LOGGER.log(Level.INFO, "Mimetype not known for file: {0}", file.getName()); //NON-NLS @@ -135,81 +133,67 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer return; } } - + if (mimeType.equalsIgnoreCase("application/octet-stream")) { return; } else { FileTypeViewer viewer = getSupportingViewer(file); if (viewer != null) { lastViewer = viewer; - + viewer.setFile(file); this.removeAll(); this.add(viewer.getComponent()); this.validate(); } } - + } - + @Override @NbBundle.Messages("ApplicationContentViewer.title=Application") public String getTitle() { return Bundle.ApplicationContentViewer_title(); } - + @Override @NbBundle.Messages("ApplicationContentViewer.toolTip=Displays file contents.") public String getToolTip() { return Bundle.ApplicationContentViewer_toolTip(); } - + @Override public DataContentViewer createInstance() { return new FileViewer(); } - + @Override public Component getComponent() { return this; } - + @Override public void resetComponent() { - + if (lastViewer != null) { lastViewer.resetComponent(); } this.removeAll(); lastViewer = null; } - + @Override public boolean isSupported(Node node) { - + if (node == null) { return false; } - + AbstractFile aFile = node.getLookup().lookup(AbstractFile.class); if ((aFile == null) || (aFile.isDir())) { return false; } - if (node instanceof BlackboardArtifactNode) { - BlackboardArtifact theArtifact = ((BlackboardArtifactNode) node).getArtifact(); - //disable the content viewer when a download or cached file does not exist instead of displaying its parent - try { - if ((theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() - || theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()) - && aFile.getId() == theArtifact.getParent().getId()) { - return false; - } - } catch (TskCoreException ex) { - LOGGER.log(Level.WARNING, String.format("Error getting parent of artifact with type %s and objID = %d can not confirm file with name %s and objId = %d is not the parent. File content viewer will not be supported.", - theArtifact.getArtifactTypeName(), theArtifact.getObjectID(), aFile.getName(), aFile.getId()), ex); - return false; - } - } + String mimeType = aFile.getMIMEType(); if (Strings.isNullOrEmpty(mimeType)) { LOGGER.log(Level.INFO, "Mimetype not known for file: {0}", aFile.getName()); //NON-NLS @@ -221,20 +205,20 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer return false; } } - + if (mimeType.equalsIgnoreCase("application/octet-stream")) { return false; } else { return (getSupportingViewer(aFile) != null); } - + } - + @Override public int isPreferred(Node node) { AbstractFile file = node.getLookup().lookup(AbstractFile.class); String mimeType = file.getMIMEType(); - + if (Strings.isNullOrEmpty(mimeType)) { LOGGER.log(Level.INFO, "Mimetype not known for file: {0}", file.getName()); //NON-NLS try { @@ -245,7 +229,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer return 0; } } - + if (mimeType.equalsIgnoreCase("application/octet-stream")) { return 0; } else { @@ -253,7 +237,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer return CONFIDENCE_LEVEL; } } - + return 0; } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java b/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java index fcf18f77ff..45dae8e2e0 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/Metadata.java @@ -29,7 +29,6 @@ import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.datamodel.ContentUtils; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; @@ -51,7 +50,7 @@ import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM; public class Metadata extends javax.swing.JPanel implements DataContentViewer { private static final Logger LOGGER = Logger.getLogger(Metadata.class.getName()); - + /** * Creates new form Metadata */ @@ -149,10 +148,6 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { "Metadata.nodeText.none=None"}) @Override public void setNode(Node node) { - if ((node == null) || (!isSupported(node))) { - resetComponent(); - return; - } AbstractFile file = node.getLookup().lookup(AbstractFile.class); Image image = node.getLookup().lookup(Image.class); DataSource dataSource = node.getLookup().lookup(DataSource.class); @@ -181,6 +176,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.created"), ContentUtils.getStringTime(file.getCrtime(), file)); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.changed"), ContentUtils.getStringTime(file.getCtime(), file)); + String md5 = file.getMd5Hash(); if (md5 == null) { md5 = NbBundle.getMessage(this.getClass(), "Metadata.tableRowContent.md5notCalc"); @@ -193,12 +189,12 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.sha256"), sha256); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString()); addAcquisitionDetails(sb, dataSource); - + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.internalid"), Long.toString(file.getId())); if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) { addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), file.getLocalAbsPath()); } - + try { List associatedObjectArtifacts = file.getArtifacts(ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT); if (!associatedObjectArtifacts.isEmpty()) { @@ -211,14 +207,14 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { } } } catch (TskCoreException ex) { - sb.append(NbBundle.getMessage(this.getClass(), "Metadata.nodeText.exceptionNotice.text")).append(ex.getLocalizedMessage()); + sb.append(NbBundle.getMessage(this.getClass(), "Metadata.nodeText.exceptionNotice.text")).append(ex.getLocalizedMessage()); } - + endTable(sb); /* - * If we have a file system file, grab the more detailed metadata - * text too + * If we have a file system file, grab the more detailed metadata text + * too */ try { if (file instanceof FsContent) { @@ -230,11 +226,11 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { for (String str : fsFile.getMetaDataText()) { sb.append(str).append("
"); //NON-NLS - /* - * Very long results can cause the UI to hang before - * displaying, so truncate the results if necessary. + /* + * Very long results can cause the UI to hang before displaying, + * so truncate the results if necessary. */ - if (sb.length() > 50000) { + if(sb.length() > 50000){ sb.append(NbBundle.getMessage(this.getClass(), "Metadata.nodeText.truncated")); break; } @@ -250,7 +246,7 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { } catch (TskCoreException ex) { addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.name"), image.getName()); } - addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.imageType"), image.getType().getName()); + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.imageType"), image.getType().getName()); addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.size"), Long.toString(image.getSize())); try { @@ -286,46 +282,46 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { StringBuilder pathValues = new StringBuilder("
"); pathValues.append(imagePaths[0]); pathValues.append("
"); - for (int i = 1; i < imagePaths.length; i++) { + for (int i=1; i < imagePaths.length; i++) { pathValues.append("
"); pathValues.append(imagePaths[i]); pathValues.append("
"); } addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), pathValues.toString()); } else { - addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), + addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.localPath"), NbBundle.getMessage(this.getClass(), "Metadata.nodeText.none")); } } - + setText(sb.toString()); jTextPane1.setCaretPosition(0); this.setCursor(null); } - + /** - * Adds a row for download source from the given associated artifact, if the - * associated artifacts specifies a source. - * - * @param sb string builder. + * Adds a row for download source from the given associated artifact, + * if the associated artifacts specifies a source. + * + * @param sb string builder. * @param associatedArtifact - * + * * @throws TskCoreException if there is an error */ - private void addDownloadSourceRow(StringBuilder sb, BlackboardArtifact associatedArtifact) throws TskCoreException { - if (associatedArtifact != null - && ((associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID()) - || (associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()))) { + private void addDownloadSourceRow(StringBuilder sb, BlackboardArtifact associatedArtifact ) throws TskCoreException { + if (associatedArtifact != null && + ((associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID()) || + (associatedArtifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID())) ) { BlackboardAttribute urlAttr = associatedArtifact.getAttribute(new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_URL)); if (urlAttr != null) { addRow(sb, NbBundle.getMessage(this.getClass(), "Metadata.tableRowTitle.downloadSource"), urlAttr.getValueString()); } } } - + /** * Add the acquisition details to the results (if applicable) - * + * * @param sb The output StringBuilder object * @param dataSource The data source (may be null) */ @@ -373,22 +369,6 @@ public class Metadata extends javax.swing.JPanel implements DataContentViewer { public boolean isSupported(Node node) { Image image = node.getLookup().lookup(Image.class); AbstractFile file = node.getLookup().lookup(AbstractFile.class); - if (file != null && node instanceof BlackboardArtifactNode) { - BlackboardArtifact theArtifact = ((BlackboardArtifactNode) node).getArtifact(); - //disable the content viewer when a download or cached file does not exist instead of displaying its parent - try { - if ((theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() - || theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()) - && file.getId() == theArtifact.getParent().getId()) { - return false; - } - } catch (TskCoreException ex) { - LOGGER.log(Level.WARNING, String.format("Error getting parent of artifact with type %s and objID = %d can not confirm file with name %s and objId = %d is not the parent. Metadata viewer will not be supported.", - theArtifact.getArtifactTypeName(), theArtifact.getObjectID(), file.getName(), file.getId()), ex); - return false; - } - } - return (file != null) || (image != null); } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/Bundle.properties-MERGED index c529a8aa9d..c9c1535975 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/artifactviewers/Bundle.properties-MERGED @@ -46,24 +46,10 @@ DataContentViewerArtifact.failedToGetSourcePath.message=Failed to get source fil DefaultTableArtifactContentViewer.attrsTableHeader.sources=Source(s) DefaultTableArtifactContentViewer.attrsTableHeader.type=Type DefaultTableArtifactContentViewer.attrsTableHeader.value=Value -GeneralPurposeArtifactViewer.dates.created=Created -GeneralPurposeArtifactViewer.dates.end=End -GeneralPurposeArtifactViewer.dates.start=Start -GeneralPurposeArtifactViewer.dates.time=Time -GeneralPurposeArtifactViewer.details.attrHeader=Details -GeneralPurposeArtifactViewer.details.bookmarkHeader=Bookmark Details -GeneralPurposeArtifactViewer.details.cachedHeader=Cached File -GeneralPurposeArtifactViewer.details.cookieHeader=Cookie Details +GeneralPurposeArtifactViewer.details.attrHeader=Attributes GeneralPurposeArtifactViewer.details.dataSource=Data Source -GeneralPurposeArtifactViewer.details.datesHeader=Dates -GeneralPurposeArtifactViewer.details.downloadHeader=Downloaded File GeneralPurposeArtifactViewer.details.file=File -GeneralPurposeArtifactViewer.details.historyHeader=Visit Details -GeneralPurposeArtifactViewer.details.otherHeader=Other -GeneralPurposeArtifactViewer.details.searchHeader=Web Search GeneralPurposeArtifactViewer.details.sourceHeader=Source -GeneralPurposeArtifactViewer.noFile.text=\ (no longer exists) -GeneralPurposeArtifactViewer.term.label=Term GeneralPurposeArtifactViewer.unknown.text=Unknown GeneralPurposeArtifactViewer_menuitem_copy=Copy MessageAccountPanel.account.justification=Account found in Message artifact diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/contextviewer/ContextViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/contextviewer/ContextViewer.java index a63e3e6f85..c223f577b0 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/contextviewer/ContextViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/contextviewer/ContextViewer.java @@ -36,7 +36,6 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_ASSOCIATED_OBJECT; @@ -226,21 +225,6 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte // check if the node has an abstract file and the file has any context defining artifacts. if (node.getLookup().lookup(AbstractFile.class) != null) { AbstractFile abstractFile = node.getLookup().lookup(AbstractFile.class); - if (node instanceof BlackboardArtifactNode) { - BlackboardArtifact theArtifact = ((BlackboardArtifactNode) node).getArtifact(); - //disable the content viewer when a download or cached file does not exist instead of displaying its parent - try { - if ((theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() - || theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()) - && abstractFile.getId() == theArtifact.getParent().getId()) { - return false; - } - } catch (TskCoreException ex) { - logger.log(Level.WARNING, String.format("Error getting parent of artifact with type %s and objID = %d can not confirm file with name %s and objId = %d is not the parent. Context content viewer will not be supported.", - theArtifact.getArtifactTypeName(), theArtifact.getObjectID(), abstractFile.getName(), abstractFile.getId()), ex); - return false; - } - } for (BlackboardArtifact.ARTIFACT_TYPE artifactType : CONTEXT_ARTIFACTS) { List artifactsList; try { @@ -265,7 +249,8 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte } @NbBundle.Messages({ - "ContextViewer.unknownSource=Unknown ",}) + "ContextViewer.unknownSource=Unknown ", + }) /** * Looks for context providing artifacts for the given file and populates * the source context. @@ -278,7 +263,7 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte private void populatePanels(AbstractFile sourceFile) throws NoCurrentCaseException, TskCoreException { SleuthkitCase tskCase = Case.getCurrentCaseThrows().getSleuthkitCase(); - + // Check for all context artifacts boolean foundASource = false; for (BlackboardArtifact.ARTIFACT_TYPE artifactType : CONTEXT_ARTIFACTS) { @@ -307,7 +292,7 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte contextContainer.add(usagePanel); } } - + contextContainer.setBackground(javax.swing.UIManager.getDefaults().getColor("window")); contextContainer.setEnabled(foundASource); contextContainer.setVisible(foundASource); @@ -316,12 +301,12 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte jScrollPane.setVisible(foundASource); jScrollPane.repaint(); jScrollPane.revalidate(); - + + } /** - * Resolves an TSK_ASSOCIATED_OBJECT artifact and adds it to the appropriate - * panel + * Resolves an TSK_ASSOCIATED_OBJECT artifact and adds it to the appropriate panel * * @param artifact Artifact that may provide context. * @@ -373,16 +358,16 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte } else if (BlackboardArtifact.ARTIFACT_TYPE.TSK_RECENT_OBJECT.getTypeID() == associatedArtifact.getArtifactTypeID()) { String sourceName = Bundle.ContextViewer_recentDocs(); String sourceText = recentDocArtifactToString(associatedArtifact); - ContextUsagePanel usagePanel = new ContextUsagePanel(sourceName, sourceText, associatedArtifact, dateTime); + ContextUsagePanel usagePanel = new ContextUsagePanel(sourceName, sourceText, associatedArtifact, dateTime); contextUsagePanels.add(usagePanel); - + } else if (BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID() == associatedArtifact.getArtifactTypeID()) { String sourceName = Bundle.ContextViewer_programExecution(); String sourceText = programExecArtifactToString(associatedArtifact); - ContextUsagePanel usagePanel = new ContextUsagePanel(sourceName, sourceText, associatedArtifact, dateTime); + ContextUsagePanel usagePanel = new ContextUsagePanel(sourceName, sourceText, associatedArtifact, dateTime); contextUsagePanels.add(usagePanel); } - + Collections.sort(contextSourcePanels, new SortByDateTime()); Collections.sort(contextUsagePanels, new SortByDateTime()); } @@ -414,7 +399,8 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte } /** - * Returns a display string with recent Doc artifact. + * Returns a display string with recent Doc + * artifact. * * @param artifact artifact to get doc from. * @@ -429,9 +415,9 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte private String recentDocArtifactToString(BlackboardArtifact artifact) throws TskCoreException { StringBuilder sb = new StringBuilder(ARTIFACT_STR_MAX_LEN); Map attributesMap = getAttributesMap(artifact); - + BlackboardAttribute attribute = attributesMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME); - + if (BlackboardArtifact.ARTIFACT_TYPE.TSK_RECENT_OBJECT.getTypeID() == artifact.getArtifactTypeID()) { if (attribute != null && attribute.getValueLong() > 0) { appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, attributesMap, Bundle.ContextViewer_on()); @@ -443,7 +429,8 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte } /** - * Returns a display string with Program Execution artifact. + * Returns a display string with Program Execution + * artifact. * * @param artifact artifact to get doc from. * @@ -458,9 +445,9 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte private String programExecArtifactToString(BlackboardArtifact artifact) throws TskCoreException { StringBuilder sb = new StringBuilder(ARTIFACT_STR_MAX_LEN); Map attributesMap = getAttributesMap(artifact); - + BlackboardAttribute attribute = attributesMap.get(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME); - + if (BlackboardArtifact.ARTIFACT_TYPE.TSK_PROG_RUN.getTypeID() == artifact.getArtifactTypeID()) { if (attribute != null && attribute.getValueLong() > 0) { appendAttributeString(sb, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME, attributesMap, Bundle.ContextViewer_runOn()); @@ -551,9 +538,8 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte return attributeMap; } - + interface DateTimePanel { - /** * Return the date time value for this panel. * @@ -561,28 +547,28 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte */ Long getDateTime(); } - - /** + + /** * Return the dateTime value for the given message artifact. - * - * @param artifact - * + * + * @param artifact + * * @return Long dateTime value or null if the attribute was not found. - * - * @throws TskCoreException + * + * @throws TskCoreException */ private Long getArtifactDateTime(BlackboardArtifact artifact) throws TskCoreException { - BlackboardAttribute attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME)); - + BlackboardAttribute attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME)); + if (BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID() == artifact.getArtifactTypeID()) { - attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_SENT)); + attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_SENT)); } else if (BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() == artifact.getArtifactTypeID() || BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID() == artifact.getArtifactTypeID()) { - attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED)); + attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_CREATED)); } return (attribute != null ? attribute.getValueLong() : null); } - + /** * Class for sorting lists of DateTimePanels. */ @@ -592,18 +578,18 @@ public final class ContextViewer extends javax.swing.JPanel implements DataConte public int compare(DateTimePanel panel1, DateTimePanel panel2) { Long dateTime1 = panel1.getDateTime(); Long dateTime2 = panel2.getDateTime(); - - if (dateTime1 == null && dateTime2 == null) { + + if(dateTime1 == null && dateTime2 == null) { return 0; - } else if (dateTime1 == null) { + } else if(dateTime1 == null) { return -1; - } else if (dateTime2 == null) { + } else if(dateTime2 == null) { return 1; } - + return dateTime1.compareTo(dateTime2); } - + } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/TextContentViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/TextContentViewer.java index 67241594a8..d7f853caab 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/TextContentViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/textcontentviewer/TextContentViewer.java @@ -19,16 +19,11 @@ package org.sleuthkit.autopsy.contentviewers.textcontentviewer; import java.awt.Component; -import java.util.logging.Level; import org.openide.nodes.Node; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; import org.sleuthkit.datamodel.AbstractFile; -import org.sleuthkit.datamodel.BlackboardArtifact; -import org.sleuthkit.datamodel.TskCoreException; /** * A DataContentViewer that displays text with the TextViewers available. @@ -38,7 +33,6 @@ public class TextContentViewer implements DataContentViewer { private final TextContentViewerPanel panel; private volatile Node currentNode = null; - private static final Logger logger = Logger.getLogger(TextContentViewer.class.getName()); /** * No arg constructor for creating the main instance of this Content Viewer. @@ -58,10 +52,6 @@ public class TextContentViewer implements DataContentViewer { @Override public void setNode(Node selectedNode) { - if ((selectedNode == null) || (!isSupported(selectedNode))) { - resetComponent(); - return; - } currentNode = selectedNode; panel.setNode(currentNode); @@ -106,26 +96,12 @@ public class TextContentViewer implements DataContentViewer { if (file == null) { return false; } - if (node instanceof BlackboardArtifactNode) { - BlackboardArtifact theArtifact = ((BlackboardArtifactNode) node).getArtifact(); - //disable the content viewer when a download or cached file does not exist instead of displaying its parent - try { - if ((theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID() - || theArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()) - && file.getId() == theArtifact.getParent().getId()) { - return false; - } - } catch (TskCoreException ex) { - logger.log(Level.WARNING, String.format("Error getting parent of artifact with type %s and objID = %d can not confirm file with name %s and objId = %d is not the parent. Text content viewer will not be supported.", - theArtifact.getArtifactTypeName(), theArtifact.getObjectID(), file.getName(), file.getId()), ex); - return false; - } - } + // disable the text content viewer for directories and empty files if (file.isDir() || file.getSize() == 0) { return false; } - + return panel.isSupported(node); }