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 a9a4571ed210340e77a1c17937abd9a9ab04f691..4d7a376395a35ffa93e53f94bb946df1128abe12 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=<html><body><p>The Cyber Triage Importer Module is required to open this case. </p><p>To open this case:</p><ul><li>Extract the module from the Integrations tab in the Cyber Triage options panel.</li><li>Select the 'Plugins' option from the 'Tools' menu, and go to the 'Downloaded' tab.</li><li>Click 'Add Plugins...' and select the path of the plugin.</li><li>Press 'Install' to finish the installation.</li></ul></body></html> +CTIntegrationMissingDialog.link.text=<html><span style="color: blue; text-decoration: underline">http://docs.cybertriage.com</span></html> +CTIntegrationMissingDialog.docsLabel.text=<html>For more information, refer to the Cyber Triage Users Guide</html> +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 6005c35acc4ab52de75281c0b2fbe604b1842bd4..59955cb3ddbdb46d8940def88a4294d5bb0ec724 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 @@ <ResourceString bundle="com/basistech/df/cybertriage/autopsy/Bundle.properties" key="CTIntegrationMissingDialog.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="alwaysOnTop" type="boolean" value="true"/> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 190]"/> - </Property> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 190]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 190]"/> - </Property> <Property name="resizable" type="boolean" value="false"/> - <Property name="size" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 190]"/> - </Property> </Properties> <SyntheticProperties> <SyntheticProperty name="formSizePolicy" type="int" value="1"/> @@ -35,7 +23,7 @@ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-67,0,0,1,-16"/> + <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-65,0,0,1,-9"/> </AuxValues> <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/> @@ -46,7 +34,7 @@ <ResourceString bundle="com/basistech/df/cybertriage/autopsy/Bundle.properties" key="CTIntegrationMissingDialog.descriptionLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[123, 116]"/> + <Dimension value="[483, 116]"/> </Property> </Properties> <AuxValues> @@ -64,6 +52,9 @@ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <ResourceString bundle="com/basistech/df/cybertriage/autopsy/Bundle.properties" key="CTIntegrationMissingDialog.docsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[312, 16]"/> + </Property> </Properties> <AuxValues> <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> @@ -93,7 +84,7 @@ </AuxValues> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> - <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/> + <GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/> </Constraint> </Constraints> </Component> diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java b/Core/src/com/basistech/df/cybertriage/autopsy/CTIntegrationMissingDialog.java index dbac6f9f55c73cc65a02690c0aa40fd96fb3e167..98690ced575e3511e0251fe495f5f2a423f7999b 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 @@ 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 @@ private void initComponents() { 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 @@ private void initComponents() { 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 void mouseClicked(java.awt.event.MouseEvent evt) { 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 @@ private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS }//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 61e689739347377b0ec6dae3978febd1e855263d..45a4d6dff64fa3b2db71c802c8ce90eb6add12a6 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 @@ private void openCaseDataBase(ProgressIndicator progressIndicator) throws CaseAc 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()); }