From 6d86bf48c800a51d1f9920dc3c6e1872b4b6d39e Mon Sep 17 00:00:00 2001 From: Sophie Mori Date: Mon, 17 Oct 2016 16:36:12 -0400 Subject: [PATCH] Modified ExternalViewerAction to accomodate opening reports --- .../sleuthkit/autopsy/datamodel/Reports.java | 33 +++------- .../directorytree/ExternalViewerAction.java | 61 +++++++++++++++---- 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java b/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java index 7a4f581966..ce5ea7b168 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java @@ -44,6 +44,7 @@ import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.autopsy.directorytree.ExternalViewerAction; import org.sleuthkit.datamodel.Report; import org.sleuthkit.datamodel.TskCoreException; @@ -292,30 +293,16 @@ public final class Reports implements AutopsyVisitableItem { @Override public void actionPerformed(ActionEvent e) { - File file = new File(ReportNode.this.report.getPath()); - try { - Desktop.getDesktop().open(file); - } catch (IOException ex) { - JOptionPane.showMessageDialog(null, - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.NoAssociatedEditorMessage"), - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.MessageBoxTitle"), - JOptionPane.ERROR_MESSAGE); - } catch (UnsupportedOperationException ex) { - JOptionPane.showMessageDialog(null, - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.NoOpenInEditorSupportMessage"), - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.MessageBoxTitle"), - JOptionPane.ERROR_MESSAGE); - } catch (IllegalArgumentException ex) { - JOptionPane.showMessageDialog(null, - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.MissingReportFileMessage"), - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.MessageBoxTitle"), - JOptionPane.ERROR_MESSAGE); - } catch (SecurityException ex) { - JOptionPane.showMessageDialog(null, - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.ReportFileOpenPermissionDeniedMessage"), - NbBundle.getMessage(OpenReportAction.class, "OpenReportAction.actionPerformed.MessageBoxTitle"), - JOptionPane.ERROR_MESSAGE); + String reportPath = ReportNode.this.report.getPath(); + String extension = ""; + int extPosition = reportPath.lastIndexOf('.'); + + if (extPosition != -1) { + extension = reportPath.substring(extPosition, reportPath.length()).toLowerCase(); } + + File file = new File(reportPath); + ExternalViewerAction.openFile("", extension, file); } } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java index 716ac43005..17b3c23831 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerAction.java @@ -73,8 +73,6 @@ public class ExternalViewerAction extends AbstractAction { } } - @Messages({"ExternalViewerAction.actionPerformed.failure.message=Could not find a viewer for the given file.", - "ExternalViewerAction.actionPerformed.failure.title=Open Failure"}) @Override public void actionPerformed(ActionEvent e) { // Get the temp folder path of the case @@ -93,32 +91,73 @@ public class ExternalViewerAction extends AbstractAction { logger.log(Level.WARNING, "Can't save to temporary file.", ex); //NON-NLS } + ExternalViewerAction.openFile(fileObject.getMIMEType(), fileObjectExt, tempFile); + + // delete the temporary file on exit + tempFile.deleteOnExit(); + } + + /** + * Opens a file, taking into account user preferences and then the default + * associated application. + * + * @param mimeType MIME type of the file + * @param ext extension of the file + * @param file the file object + */ + @Messages({ + "ExternalViewerAction.actionPerformed.failure.title=Open File Failure", + "ExternalViewerAction.actionPerformed.failure.IO.message=There is no associated editor for files of this type or the associated application failed to launch.", + "ExternalViewerAction.actionPerformed.failure.support.message=This platform (operating system) does not support opening a file in an editor this way.", + "ExternalViewerAction.actionPerformed.failure.missingFile.message=The file no longer exists.", + "ExternalViewerAction.actionPerformed.failure.permission.message=Permission to open the file was denied."}) + public static void openFile(String mimeType, String ext, File file) { /** * Check if the file MIME type or extension exists in the user defined * settings. Otherwise open with the default associated application. */ - String exePath = ExternalViewerRulesManager.getInstance().getExePathForName(fileObject.getMIMEType()); + String exePath = ExternalViewerRulesManager.getInstance().getExePathForName(mimeType); if (exePath.equals("")) { - exePath = ExternalViewerRulesManager.getInstance().getExePathForName(fileObjectExt); + exePath = ExternalViewerRulesManager.getInstance().getExePathForName(ext); } if (!exePath.equals("")) { Runtime runtime = Runtime.getRuntime(); - String[] s = new String[]{exePath, tempFile.getAbsolutePath()}; + String[] s = new String[]{exePath, file.getAbsolutePath()}; try { runtime.exec(s); } catch (IOException ex) { - logger.log(Level.WARNING, "Could not open the specified viewer for the given file: " + tempFile.getName(), ex); //NON-NLS + logger.log(Level.WARNING, "Could not open the specified viewer for the given file: " + file.getName(), ex); //NON-NLS JOptionPane.showMessageDialog(null, Bundle.ExternalViewerAction_actionPerformed_failure_message(), Bundle.ExternalViewerAction_actionPerformed_failure_title(), JOptionPane.ERROR_MESSAGE); } } else { try { - Desktop.getDesktop().open(tempFile); + Desktop.getDesktop().open(file); } catch (IOException ex) { - logger.log(Level.WARNING, "Could not find a viewer for the given file: " + tempFile.getName(), ex); //NON-NLS - JOptionPane.showMessageDialog(null, Bundle.ExternalViewerAction_actionPerformed_failure_message(), Bundle.ExternalViewerAction_actionPerformed_failure_title(), JOptionPane.ERROR_MESSAGE); + logger.log(Level.WARNING, "Could not find a viewer for the given file: " + file.getName(), ex); //NON-NLS + JOptionPane.showMessageDialog(null, + Bundle.ExternalViewerAction_actionPerformed_failure_IO_message(), + Bundle.ExternalViewerAction_actionPerformed_failure_title(), + JOptionPane.ERROR_MESSAGE); + } catch (UnsupportedOperationException ex) { + logger.log(Level.WARNING, "Platform cannot open " + file.getName() + " in the defined editor.", ex); //NON-NLS + JOptionPane.showMessageDialog(null, + Bundle.ExternalViewerAction_actionPerformed_failure_support_message(), + Bundle.ExternalViewerAction_actionPerformed_failure_title(), + JOptionPane.ERROR_MESSAGE); + } catch (IllegalArgumentException ex) { + logger.log(Level.WARNING, "Could not find the given file: " + file.getName(), ex); //NON-NLS + JOptionPane.showMessageDialog(null, + Bundle.ExternalViewerAction_actionPerformed_failure_missingFile_message(), + Bundle.ExternalViewerAction_actionPerformed_failure_title(), + JOptionPane.ERROR_MESSAGE); + } catch (SecurityException ex) { + logger.log(Level.WARNING, "Could not get permission to open the given file: " + file.getName(), ex); //NON-NLS + JOptionPane.showMessageDialog(null, + Bundle.ExternalViewerAction_actionPerformed_failure_permission_message(), + Bundle.ExternalViewerAction_actionPerformed_failure_title(), + JOptionPane.ERROR_MESSAGE); } } - // delete the file on exit - tempFile.deleteOnExit(); } + }