diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/Bundle.properties-MERGED b/Core/src/com/basistech/df/cybertriage/autopsy/Bundle.properties-MERGED index a9a4571ed2..4d7a376395 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/Bundle.properties-MERGED +++ b/Core/src/com/basistech/df/cybertriage/autopsy/Bundle.properties-MERGED @@ -4,4 +4,7 @@ CTIntegrationMissingDialog.title=Cyber Triage Importer Module Required -CTIntegrationMissingDialog.descriptionLabel.text=jLabel1 +CTIntegrationMissingDialog.descriptionLabel.text=

The Cyber Triage Importer Module is required to open this case.

To open this case:

+CTIntegrationMissingDialog.link.text=http://docs.cybertriage.com +CTIntegrationMissingDialog.docsLabel.text=For more information, refer to the Cyber Triage Users Guide +CTIntegrationMissingDialog.okButton.text=OK diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.form b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.form index 6005c35acc..59955cb3dd 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.form +++ b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.form @@ -7,19 +7,7 @@ - - - - - - - - - - - - @@ -35,7 +23,7 @@ - + @@ -46,7 +34,7 @@ - + @@ -64,6 +52,9 @@ + + + @@ -93,7 +84,7 @@ - + diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java index dbac6f9f55..98690ced57 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java +++ b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java @@ -33,9 +33,9 @@ import org.sleuthkit.autopsy.coreutils.Logger; public class CTIntegrationMissingDialog extends javax.swing.JDialog { private static final String DOCS_PAGE_URL = "http://docs.cybertriage.com"; - + private static final Logger LOGGER = Logger.getLogger(CTIntegrationMissingDialog.class.getName()); - + /** * Creates new form CTIntegrationMissingDialog */ @@ -63,15 +63,11 @@ public class CTIntegrationMissingDialog extends javax.swing.JDialog { setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(org.openide.util.NbBundle.getMessage(CTIntegrationMissingDialog.class, "CTIntegrationMissingDialog.title")); // NOI18N setAlwaysOnTop(true); - setMaximumSize(new java.awt.Dimension(500, 190)); - setMinimumSize(new java.awt.Dimension(500, 190)); - setPreferredSize(new java.awt.Dimension(500, 190)); setResizable(false); - setSize(new java.awt.Dimension(500, 190)); getContentPane().setLayout(new java.awt.GridBagLayout()); org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(CTIntegrationMissingDialog.class, "CTIntegrationMissingDialog.descriptionLabel.text")); // NOI18N - descriptionLabel.setMinimumSize(new java.awt.Dimension(123, 116)); + descriptionLabel.setMinimumSize(new java.awt.Dimension(483, 116)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -83,6 +79,7 @@ public class CTIntegrationMissingDialog extends javax.swing.JDialog { getContentPane().add(descriptionLabel, gridBagConstraints); org.openide.awt.Mnemonics.setLocalizedText(docsLabel, org.openide.util.NbBundle.getMessage(CTIntegrationMissingDialog.class, "CTIntegrationMissingDialog.docsLabel.text")); // NOI18N + docsLabel.setMinimumSize(new java.awt.Dimension(312, 16)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -102,6 +99,7 @@ public class CTIntegrationMissingDialog extends javax.swing.JDialog { gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5); getContentPane().add(link, gridBagConstraints); @@ -156,7 +154,8 @@ public class CTIntegrationMissingDialog extends javax.swing.JDialog { }//GEN-LAST:event_okButtonActionPerformed public void showDialog(JComponent parentComp) { - setLocationRelativeTo(parentComp); + setLocationRelativeTo(parentComp == null ? getParent() : parentComp); + pack(); setVisible(true); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 61e6897393..45a4d6dff6 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.casemodule; +import com.basistech.df.cybertriage.autopsy.CTIntegrationMissingDialog; import org.sleuthkit.autopsy.featureaccess.FeatureAccessUtils; import com.google.common.annotations.Beta; import com.google.common.eventbus.Subscribe; @@ -177,6 +178,7 @@ public class Case { private static final String CASE_ACTION_THREAD_NAME = "%s-case-action"; private static final String CASE_RESOURCES_THREAD_NAME = "%s-manage-case-resources"; private static final String NO_NODE_ERROR_MSG_FRAGMENT = "KeeperErrorCode = NoNode"; + private static final String CT_PROVIDER_PREFIX = "CTCustomContentProvider_"; private static final Logger logger = Logger.getLogger(Case.class.getName()); private static final AutopsyEventPublisher eventPublisher = new AutopsyEventPublisher(); private static final Object caseActionSerializationLock = new Object(); @@ -2739,6 +2741,9 @@ public class Case { ContentStreamProvider contentProvider = loadContentProvider(metadata.getContentProviderName()); if (StringUtils.isNotBlank(metadata.getContentProviderName()) && contentProvider == null) { + if (metadata.getContentProviderName().trim().toUpperCase().startsWith(CT_PROVIDER_PREFIX.toUpperCase())) { + new CTIntegrationMissingDialog(WindowManager.getDefault().getMainWindow(), true).showDialog(null); + } throw new CaseActionException(Bundle.Case_exceptionMessage_contentProviderCouldNotBeFound()); }