mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
Merge pull request #3997 from sleuthkit/release-4.8.0
Merge in release 4.8.0 branch
This commit is contained in:
commit
8093d9610f
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||||||
OpenIDE-Module: org.sleuthkit.autopsy.core/10
|
OpenIDE-Module: org.sleuthkit.autopsy.core/10
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/core/Bundle.properties
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/core/layer.xml
|
||||||
OpenIDE-Module-Implementation-Version: 23
|
OpenIDE-Module-Implementation-Version: 24
|
||||||
OpenIDE-Module-Requires: org.openide.windows.WindowManager
|
OpenIDE-Module-Requires: org.openide.windows.WindowManager
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
AutoUpdate-Essential-Module: true
|
AutoUpdate-Essential-Module: true
|
||||||
|
@ -17,7 +17,6 @@ file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbi
|
|||||||
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
|
file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar
|
||||||
file.reference.sqlite-jdbc-3.8.11.jar=release/modules/ext/sqlite-jdbc-3.8.11.jar
|
file.reference.sqlite-jdbc-3.8.11.jar=release/modules/ext/sqlite-jdbc-3.8.11.jar
|
||||||
file.reference.StixLib.jar=release/modules/ext/StixLib.jar
|
file.reference.StixLib.jar=release/modules/ext/StixLib.jar
|
||||||
file.reference.sleuthkit-postgresql-4.6.1.jar=release/modules/ext/sleuthkit-postgresql-4.6.1.jar
|
|
||||||
file.reference.bcprov-jdk15on-1.54.jar=release/modules/ext/bcprov-jdk15on-1.54.jar
|
file.reference.bcprov-jdk15on-1.54.jar=release/modules/ext/bcprov-jdk15on-1.54.jar
|
||||||
file.reference.jackcess-2.1.8.jar=release/modules/ext/jackcess-2.1.8.jar
|
file.reference.jackcess-2.1.8.jar=release/modules/ext/jackcess-2.1.8.jar
|
||||||
file.reference.jackcess-encrypt-2.1.2.jar=release/modules/ext/jackcess-encrypt-2.1.2.jar
|
file.reference.jackcess-encrypt-2.1.2.jar=release/modules/ext/jackcess-encrypt-2.1.2.jar
|
||||||
@ -30,7 +29,7 @@ file.reference.cxf-rt-transports-http-3.0.16.jar=release/modules/ext/cxf-rt-tran
|
|||||||
file.reference.fontbox-2.0.8.jar=release/modules/ext/fontbox-2.0.8.jar
|
file.reference.fontbox-2.0.8.jar=release/modules/ext/fontbox-2.0.8.jar
|
||||||
file.reference.pdfbox-2.0.8.jar=release/modules/ext/pdfbox-2.0.8.jar
|
file.reference.pdfbox-2.0.8.jar=release/modules/ext/pdfbox-2.0.8.jar
|
||||||
file.reference.pdfbox-tools-2.0.8.jar=release/modules/ext/pdfbox-tools-2.0.8.jar
|
file.reference.pdfbox-tools-2.0.8.jar=release/modules/ext/pdfbox-tools-2.0.8.jar
|
||||||
file.reference.sleuthkit-postgresql-4.6.1.jar=release/modules/ext/sleuthkit-postgresql-4.6.1.jar
|
file.reference.sleuthkit-postgresql-4.6.2.jar=release/modules/ext/sleuthkit-postgresql-4.6.2.jar
|
||||||
file.reference.tika-core-1.17.jar=release/modules/ext/tika-core-1.17.jar
|
file.reference.tika-core-1.17.jar=release/modules/ext/tika-core-1.17.jar
|
||||||
file.reference.tika-parsers-1.17.jar=release/modules/ext/tika-parsers-1.17.jar
|
file.reference.tika-parsers-1.17.jar=release/modules/ext/tika-parsers-1.17.jar
|
||||||
file.reference.curator-client-2.8.0.jar=release/modules/ext/curator-client-2.8.0.jar
|
file.reference.curator-client-2.8.0.jar=release/modules/ext/curator-client-2.8.0.jar
|
||||||
@ -47,5 +46,5 @@ nbm.homepage=http://www.sleuthkit.org/
|
|||||||
nbm.module.author=Brian Carrier
|
nbm.module.author=Brian Carrier
|
||||||
nbm.needs.restart=true
|
nbm.needs.restart=true
|
||||||
source.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0-sources.jar
|
source.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0-sources.jar
|
||||||
spec.version.base=10.11
|
spec.version.base=10.12
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>3</release-version>
|
<release-version>3</release-version>
|
||||||
<specification-version>1.1</specification-version>
|
<specification-version>1.2</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
</module-dependencies>
|
</module-dependencies>
|
||||||
@ -412,8 +412,8 @@
|
|||||||
<binary-origin>release/modules/ext/metadata-extractor-2.10.1.jar</binary-origin>
|
<binary-origin>release/modules/ext/metadata-extractor-2.10.1.jar</binary-origin>
|
||||||
</class-path-extension>
|
</class-path-extension>
|
||||||
<class-path-extension>
|
<class-path-extension>
|
||||||
<runtime-relative-path>ext/sleuthkit-postgresql-4.6.1.jar</runtime-relative-path>
|
<runtime-relative-path>ext/sleuthkit-postgresql-4.6.2.jar</runtime-relative-path>
|
||||||
<binary-origin>release/modules/ext/sleuthkit-postgresql-4.6.1.jar</binary-origin>
|
<binary-origin>release/modules/ext/sleuthkit-postgresql-4.6.2.jar</binary-origin>
|
||||||
</class-path-extension>
|
</class-path-extension>
|
||||||
<class-path-extension>
|
<class-path-extension>
|
||||||
<runtime-relative-path>ext/tika-core-1.17.jar</runtime-relative-path>
|
<runtime-relative-path>ext/tika-core-1.17.jar</runtime-relative-path>
|
||||||
@ -499,7 +499,7 @@
|
|||||||
<runtime-relative-path>ext/xmpcore-5.1.3.jar</runtime-relative-path>
|
<runtime-relative-path>ext/xmpcore-5.1.3.jar</runtime-relative-path>
|
||||||
<binary-origin>release/modules/ext/xmpcore-5.1.3.jar</binary-origin>
|
<binary-origin>release/modules/ext/xmpcore-5.1.3.jar</binary-origin>
|
||||||
</class-path-extension>
|
</class-path-extension>
|
||||||
<class-path-extension>
|
<class-path-extension>
|
||||||
<runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
|
<runtime-relative-path>ext/SparseBitSet-1.1.jar</runtime-relative-path>
|
||||||
<binary-origin>release/modules/ext/SparseBitSet-1.1.jar</binary-origin>
|
<binary-origin>release/modules/ext/SparseBitSet-1.1.jar</binary-origin>
|
||||||
</class-path-extension>
|
</class-path-extension>
|
||||||
|
@ -21,51 +21,48 @@ package org.sleuthkit.autopsy.centralrepository;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
|
import org.openide.DialogDisplayer;
|
||||||
|
import org.openide.NotifyDescriptor;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An AbstractAction to manage adding and modifying a Central Repository file
|
* An AbstractAction to manage adding and modifying a Central Repository file
|
||||||
* instance comment.
|
* instance comment.
|
||||||
*/
|
*/
|
||||||
|
@Messages({"AddEditCentralRepoCommentAction.menuItemText.addEditCentralRepoComment=Add/Edit Central Repository Comment"})
|
||||||
public final class AddEditCentralRepoCommentAction extends AbstractAction {
|
public final class AddEditCentralRepoCommentAction extends AbstractAction {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(AddEditCentralRepoCommentAction.class.getName());
|
private static final Logger logger = Logger.getLogger(AddEditCentralRepoCommentAction.class.getName());
|
||||||
|
|
||||||
private boolean addToDatabase;
|
private boolean addToDatabase;
|
||||||
private CorrelationAttribute correlationAttribute;
|
private CorrelationAttribute correlationAttribute;
|
||||||
String title;
|
private String comment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private constructor to create an instance given a CorrelationAttribute.
|
* Constructor to create an instance given a CorrelationAttribute.
|
||||||
*
|
*
|
||||||
* @param correlationAttribute The correlation attribute to modify.
|
* @param correlationAttribute The correlation attribute to modify.
|
||||||
* @param title The text for the menu item.
|
|
||||||
*/
|
*/
|
||||||
private AddEditCentralRepoCommentAction(CorrelationAttribute correlationAttribute, String title) {
|
public AddEditCentralRepoCommentAction(CorrelationAttribute correlationAttribute) {
|
||||||
super(title);
|
super(Bundle.AddEditCentralRepoCommentAction_menuItemText_addEditCentralRepoComment());
|
||||||
this.title = title;
|
|
||||||
this.correlationAttribute = correlationAttribute;
|
this.correlationAttribute = correlationAttribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private constructor to create an instance given an AbstractFile.
|
* Constructor to create an instance given an AbstractFile.
|
||||||
*
|
*
|
||||||
* @param file The file from which a correlation attribute to modify is
|
* @param file The file from which a correlation attribute to modify is
|
||||||
* derived.
|
* derived.
|
||||||
* @param title The text for the menu item.
|
|
||||||
*/
|
*/
|
||||||
private AddEditCentralRepoCommentAction(AbstractFile file, String title) {
|
public AddEditCentralRepoCommentAction(AbstractFile file) {
|
||||||
|
super(Bundle.AddEditCentralRepoCommentAction_menuItemText_addEditCentralRepoComment());
|
||||||
super(title);
|
|
||||||
this.title = title;
|
|
||||||
correlationAttribute = EamArtifactUtil.getCorrelationAttributeFromContent(file);
|
correlationAttribute = EamArtifactUtil.getCorrelationAttributeFromContent(file);
|
||||||
if (correlationAttribute == null) {
|
if (correlationAttribute == null) {
|
||||||
addToDatabase = true;
|
addToDatabase = true;
|
||||||
@ -73,26 +70,24 @@ public final class AddEditCentralRepoCommentAction extends AbstractAction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent event) {
|
|
||||||
addEditCentralRepoComment();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Add/Edit dialog for the correlation attribute file instance
|
* Create a Add/Edit dialog for the correlation attribute file instance
|
||||||
* comment. The comment will be updated in the database if the file instance
|
* comment. The comment will be updated in the database if the file instance
|
||||||
* exists there, or a new file instance will be added to the database with
|
* exists there, or a new file instance will be added to the database with
|
||||||
* the comment attached otherwise.
|
* the comment attached otherwise.
|
||||||
*
|
|
||||||
* The current comment for this instance is returned in case it is needed to
|
|
||||||
* update the display.
|
|
||||||
*
|
*
|
||||||
* @return the current comment for this instance
|
* The current comment for this instance is saved in case it is needed to
|
||||||
|
* update the display. If the comment was not changed either due to the
|
||||||
|
* action being canceled or the occurrence of an error, the comment will be
|
||||||
|
* null.
|
||||||
*/
|
*/
|
||||||
public String addEditCentralRepoComment() {
|
@Override
|
||||||
CentralRepoCommentDialog centralRepoCommentDialog = new CentralRepoCommentDialog(correlationAttribute, title);
|
public void actionPerformed(ActionEvent event) {
|
||||||
|
CentralRepoCommentDialog centralRepoCommentDialog = new CentralRepoCommentDialog(correlationAttribute);
|
||||||
centralRepoCommentDialog.display();
|
centralRepoCommentDialog.display();
|
||||||
|
|
||||||
|
comment = null;
|
||||||
|
|
||||||
if (centralRepoCommentDialog.isCommentUpdated()) {
|
if (centralRepoCommentDialog.isCommentUpdated()) {
|
||||||
EamDb dbManager;
|
EamDb dbManager;
|
||||||
|
|
||||||
@ -104,45 +99,35 @@ public final class AddEditCentralRepoCommentAction extends AbstractAction {
|
|||||||
} else {
|
} else {
|
||||||
dbManager.updateAttributeInstanceComment(correlationAttribute);
|
dbManager.updateAttributeInstanceComment(correlationAttribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
comment = centralRepoCommentDialog.getComment();
|
||||||
} catch (EamDbException ex) {
|
} catch (EamDbException ex) {
|
||||||
logger.log(Level.SEVERE, "Error adding comment", ex);
|
logger.log(Level.SEVERE, "Error adding comment", ex);
|
||||||
|
NotifyDescriptor notifyDescriptor = new NotifyDescriptor.Message(
|
||||||
|
"An error occurred while trying to save the comment to the central repository.",
|
||||||
|
NotifyDescriptor.ERROR_MESSAGE);
|
||||||
|
DialogDisplayer.getDefault().notify(notifyDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return centralRepoCommentDialog.getComment();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance labeled "Add/Edit Central Repository Comment" given an
|
* Retrieve the comment that was last saved. If a comment update was
|
||||||
* AbstractFile. This is intended for the result view.
|
* canceled or an error occurred while attempting to save the comment, the
|
||||||
|
* comment will be null.
|
||||||
*
|
*
|
||||||
* @param file The file from which a correlation attribute to modify is
|
* @return The comment.
|
||||||
* derived.
|
|
||||||
*
|
|
||||||
* @return The instance.
|
|
||||||
*
|
|
||||||
* @throws EamDbException
|
|
||||||
* @throws NoCurrentCaseException
|
|
||||||
* @throws TskCoreException
|
|
||||||
*/
|
*/
|
||||||
@Messages({"AddEditCentralRepoCommentAction.menuItemText.addEditCentralRepoComment=Add/Edit Central Repository Comment"})
|
public String getComment() {
|
||||||
public static AddEditCentralRepoCommentAction createAddEditCentralRepoCommentAction(AbstractFile file) {
|
return comment;
|
||||||
|
|
||||||
return new AddEditCentralRepoCommentAction(file,
|
|
||||||
Bundle.AddEditCentralRepoCommentAction_menuItemText_addEditCentralRepoComment());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance labeled "Add/Edit Comment" given a
|
* Retrieve the associated correlation attribute.
|
||||||
* CorrelationAttribute. This is intended for the content view.
|
*
|
||||||
*
|
* @return The correlation attribute.
|
||||||
* @param correlationAttribute The correlation attribute to modify.
|
|
||||||
*
|
|
||||||
* @return The instance.
|
|
||||||
*/
|
*/
|
||||||
@Messages({"AddEditCentralRepoCommentAction.menuItemText.addEditComment=Add/Edit Comment"})
|
public CorrelationAttribute getCorrelationAttribute() {
|
||||||
public static AddEditCentralRepoCommentAction createAddEditCommentAction(CorrelationAttribute correlationAttribute) {
|
return correlationAttribute;
|
||||||
|
|
||||||
return new AddEditCentralRepoCommentAction(correlationAttribute,
|
|
||||||
Bundle.AddEditCentralRepoCommentAction_menuItemText_addEditComment());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.centralrepository;
|
package org.sleuthkit.autopsy.centralrepository;
|
||||||
|
|
||||||
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.openide.windows.WindowManager;
|
import org.openide.windows.WindowManager;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
@ -26,6 +27,7 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeIns
|
|||||||
* Dialog to allow Central Repository file instance comments to be added and
|
* Dialog to allow Central Repository file instance comments to be added and
|
||||||
* modified.
|
* modified.
|
||||||
*/
|
*/
|
||||||
|
@Messages({"CentralRepoCommentDialog.title.addEditCentralRepoComment=Add/Edit Central Repository Comment"})
|
||||||
@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
|
@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
|
||||||
final class CentralRepoCommentDialog extends javax.swing.JDialog {
|
final class CentralRepoCommentDialog extends javax.swing.JDialog {
|
||||||
|
|
||||||
@ -37,10 +39,9 @@ final class CentralRepoCommentDialog extends javax.swing.JDialog {
|
|||||||
* Create an instance.
|
* Create an instance.
|
||||||
*
|
*
|
||||||
* @param correlationAttribute The correlation attribute to be modified.
|
* @param correlationAttribute The correlation attribute to be modified.
|
||||||
* @param title The title to assign the dialog.
|
|
||||||
*/
|
*/
|
||||||
CentralRepoCommentDialog(CorrelationAttribute correlationAttribute, String title) {
|
CentralRepoCommentDialog(CorrelationAttribute correlationAttribute) {
|
||||||
super(WindowManager.getDefault().getMainWindow(), title);
|
super(WindowManager.getDefault().getMainWindow(), Bundle.CentralRepoCommentDialog_title_addEditCentralRepoComment());
|
||||||
|
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
@ -82,6 +83,7 @@ final class CentralRepoCommentDialog extends javax.swing.JDialog {
|
|||||||
* Get the current comment.
|
* Get the current comment.
|
||||||
* If the user hit OK, this will be the new comment.
|
* If the user hit OK, this will be the new comment.
|
||||||
* If the user canceled, this will be the original comment.
|
* If the user canceled, this will be the original comment.
|
||||||
|
*
|
||||||
* @return the comment
|
* @return the comment
|
||||||
*/
|
*/
|
||||||
String getComment() {
|
String getComment() {
|
||||||
|
@ -38,19 +38,23 @@ public class CentralRepoContextMenuActionsProvider implements ContextMenuActions
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Action> getActions() {
|
public List<Action> getActions() {
|
||||||
ArrayList<Action> actions = new ArrayList<>();
|
ArrayList<Action> actionsList = new ArrayList<>();
|
||||||
Collection<? extends AbstractFile> selectedFiles = Utilities.actionsGlobalContext().lookupAll(AbstractFile.class);
|
Collection<? extends AbstractFile> selectedFiles = Utilities.actionsGlobalContext().lookupAll(AbstractFile.class);
|
||||||
|
|
||||||
if (selectedFiles.size() != 1) {
|
if (selectedFiles.size() != 1) {
|
||||||
return actions;
|
return actionsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (AbstractFile file : selectedFiles) {
|
for (AbstractFile file : selectedFiles) {
|
||||||
if (EamDbUtil.useCentralRepo() && EamArtifactUtil.isSupportedAbstractFileType(file) && file.isFile()) {
|
if (EamDbUtil.useCentralRepo() && EamArtifactUtil.isSupportedAbstractFileType(file) && file.isFile()) {
|
||||||
actions.add(AddEditCentralRepoCommentAction.createAddEditCentralRepoCommentAction(file));
|
AddEditCentralRepoCommentAction action = new AddEditCentralRepoCommentAction(file);
|
||||||
|
if (action.getCorrelationAttribute() == null) {
|
||||||
|
action.setEnabled(false);
|
||||||
|
}
|
||||||
|
actionsList.add(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return actions;
|
return actionsList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ DataContentViewerOtherCases.showCaseDetailsMenuItem.text=Show Case Details
|
|||||||
DataContentViewerOtherCases.table.toolTip.text=Click column name to sort. Right-click on the table for more options.
|
DataContentViewerOtherCases.table.toolTip.text=Click column name to sort. Right-click on the table for more options.
|
||||||
DataContentViewerOtherCases.exportToCSVMenuItem.text=Export Selected Rows to CSV
|
DataContentViewerOtherCases.exportToCSVMenuItem.text=Export Selected Rows to CSV
|
||||||
DataContentViewerOtherCases.showCommonalityMenuItem.text=Show Frequency
|
DataContentViewerOtherCases.showCommonalityMenuItem.text=Show Frequency
|
||||||
DataContentViewerOtherCases.addCommentMenuItem.text=Add/Edit Comment
|
DataContentViewerOtherCases.addCommentMenuItem.text=Add/Edit Central Repository Comment
|
||||||
DataContentViewerOtherCases.earliestCaseDate.text=Earliest Case Date
|
DataContentViewerOtherCases.earliestCaseDate.text=Earliest Case Date
|
||||||
DataContentViewerOtherCases.earliestCaseLabel.toolTipText=
|
DataContentViewerOtherCases.earliestCaseLabel.toolTipText=
|
||||||
DataContentViewerOtherCases.earliestCaseLabel.text=Central Repository Starting Date:
|
DataContentViewerOtherCases.earliestCaseLabel.text=Central Repository Starting Date:
|
||||||
|
@ -38,7 +38,6 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
@ -127,12 +126,15 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi
|
|||||||
} else if (jmi.equals(addCommentMenuItem)) {
|
} else if (jmi.equals(addCommentMenuItem)) {
|
||||||
try {
|
try {
|
||||||
OtherOccurrenceNodeData selectedNode = (OtherOccurrenceNodeData) tableModel.getRow(otherCasesTable.getSelectedRow());
|
OtherOccurrenceNodeData selectedNode = (OtherOccurrenceNodeData) tableModel.getRow(otherCasesTable.getSelectedRow());
|
||||||
AddEditCentralRepoCommentAction action = AddEditCentralRepoCommentAction.createAddEditCommentAction(selectedNode.createCorrelationAttribute());
|
AddEditCentralRepoCommentAction action = new AddEditCentralRepoCommentAction(selectedNode.createCorrelationAttribute());
|
||||||
String currentComment = action.addEditCentralRepoComment();
|
action.actionPerformed(null);
|
||||||
selectedNode.updateComment(currentComment);
|
String currentComment = action.getComment();
|
||||||
otherCasesTable.repaint();
|
if (currentComment != null) {
|
||||||
|
selectedNode.updateComment(action.getComment());
|
||||||
|
otherCasesTable.repaint();
|
||||||
|
}
|
||||||
} catch (EamDbException ex) {
|
} catch (EamDbException ex) {
|
||||||
logger.log(Level.SEVERE, "Error performing Add/Edit Comment action", ex);
|
logger.log(Level.SEVERE, "Error performing Add/Edit Central Repository Comment action", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,21 +235,37 @@ public class EamArtifactUtil {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
CorrelationAttribute correlationAttribute = null;
|
CorrelationAttribute correlationAttribute;
|
||||||
|
CorrelationAttribute.Type type;
|
||||||
|
CorrelationCase correlationCase;
|
||||||
|
CorrelationDataSource correlationDataSource;
|
||||||
|
String value;
|
||||||
|
String filePath;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
CorrelationAttribute.Type type = EamDb.getInstance().getCorrelationTypeById(CorrelationAttribute.FILES_TYPE_ID);
|
type = EamDb.getInstance().getCorrelationTypeById(CorrelationAttribute.FILES_TYPE_ID);
|
||||||
CorrelationCase correlationCase = EamDb.getInstance().getCase(Case.getCurrentCaseThrows());
|
correlationCase = EamDb.getInstance().getCase(Case.getCurrentCaseThrows());
|
||||||
if (null == correlationCase) {
|
if (null == correlationCase) {
|
||||||
correlationCase = EamDb.getInstance().newCase(Case.getCurrentCaseThrows());
|
correlationCase = EamDb.getInstance().newCase(Case.getCurrentCaseThrows());
|
||||||
}
|
}
|
||||||
CorrelationDataSource correlationDataSource = CorrelationDataSource.fromTSKDataSource(correlationCase, file.getDataSource());
|
correlationDataSource = CorrelationDataSource.fromTSKDataSource(correlationCase, file.getDataSource());
|
||||||
String value = file.getMd5Hash();
|
value = file.getMd5Hash();
|
||||||
String filePath = (file.getParentPath() + file.getName()).toLowerCase();
|
filePath = (file.getParentPath() + file.getName()).toLowerCase();
|
||||||
|
} catch (TskCoreException | EamDbException ex) {
|
||||||
correlationAttribute = EamDb.getInstance().getCorrelationAttribute(type, correlationCase, correlationDataSource, value, filePath);
|
|
||||||
} catch (TskCoreException | EamDbException | NoCurrentCaseException ex) {
|
|
||||||
logger.log(Level.SEVERE, "Error retrieving correlation attribute.", ex);
|
logger.log(Level.SEVERE, "Error retrieving correlation attribute.", ex);
|
||||||
|
return null;
|
||||||
|
} catch (NoCurrentCaseException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Case is closed.", ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
correlationAttribute = EamDb.getInstance().getCorrelationAttribute(type, correlationCase, correlationDataSource, value, filePath);
|
||||||
|
} catch (EamDbException ex) {
|
||||||
|
logger.log(Level.WARNING, String.format(
|
||||||
|
"Correlation attribute could not be retrieved for '%s' (id=%d): %s",
|
||||||
|
content.getName(), content.getId(), ex.getMessage()));
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return correlationAttribute;
|
return correlationAttribute;
|
||||||
@ -300,9 +316,12 @@ public class EamArtifactUtil {
|
|||||||
af.getParentPath() + af.getName());
|
af.getParentPath() + af.getName());
|
||||||
eamArtifact.addInstance(cei);
|
eamArtifact.addInstance(cei);
|
||||||
return eamArtifact;
|
return eamArtifact;
|
||||||
} catch (TskCoreException | EamDbException | NoCurrentCaseException ex) {
|
} catch (TskCoreException | EamDbException ex) {
|
||||||
logger.log(Level.SEVERE, "Error making correlation attribute.", ex);
|
logger.log(Level.SEVERE, "Error making correlation attribute.", ex);
|
||||||
return null;
|
return null;
|
||||||
|
} catch (NoCurrentCaseException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Case is closed.", ex);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ public class FileInstanceNode extends FileNode {
|
|||||||
|
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_filesColLbl(), Bundle.CommonFilesSearchResultsViewerTable_filesColLbl(), NO_DESCR, this.getContent().getName()));
|
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_filesColLbl(), Bundle.CommonFilesSearchResultsViewerTable_filesColLbl(), NO_DESCR, this.getContent().getName()));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_pathColLbl(), Bundle.CommonFilesSearchResultsViewerTable_pathColLbl(), NO_DESCR, this.getContent().getParentPath()));
|
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_pathColLbl(), Bundle.CommonFilesSearchResultsViewerTable_pathColLbl(), NO_DESCR, this.getContent().getParentPath()));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_hashsetHitsColLbl(), Bundle.CommonFilesSearchResultsViewerTable_hashsetHitsColLbl(), NO_DESCR, getHashSetHitsForFile(this.getContent())));
|
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_hashsetHitsColLbl(), Bundle.CommonFilesSearchResultsViewerTable_hashsetHitsColLbl(), NO_DESCR, getHashSetHitsCsvList(this.getContent())));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_dataSourceColLbl(), Bundle.CommonFilesSearchResultsViewerTable_dataSourceColLbl(), NO_DESCR, this.getDataSource()));
|
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_dataSourceColLbl(), Bundle.CommonFilesSearchResultsViewerTable_dataSourceColLbl(), NO_DESCR, this.getDataSource()));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_mimeTypeColLbl(), Bundle.CommonFilesSearchResultsViewerTable_mimeTypeColLbl(), NO_DESCR, StringUtils.defaultString(this.getContent().getMIMEType())));
|
sheetSet.put(new NodeProperty<>(Bundle.CommonFilesSearchResultsViewerTable_mimeTypeColLbl(), Bundle.CommonFilesSearchResultsViewerTable_mimeTypeColLbl(), NO_DESCR, StringUtils.defaultString(this.getContent().getMIMEType())));
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
import org.openide.explorer.ExplorerManager;
|
import org.openide.explorer.ExplorerManager;
|
||||||
@ -579,29 +579,6 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Worker for RootNodeListener childrenAdded.
|
|
||||||
*/
|
|
||||||
class SetupTabsChildrenWorker extends SwingWorker<Void, Void> {
|
|
||||||
|
|
||||||
private final Node childNode;
|
|
||||||
|
|
||||||
SetupTabsChildrenWorker(Node aChildNode) {
|
|
||||||
childNode = aChildNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground() throws Exception {
|
|
||||||
setupTabs(childNode);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void done() {
|
|
||||||
setupTabs(childNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Responds to changes in the root node due to asynchronous child node
|
* Responds to changes in the root node due to asynchronous child node
|
||||||
* creation.
|
* creation.
|
||||||
@ -628,8 +605,13 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
*/
|
*/
|
||||||
if (waitingForData && containsReal(delta)) {
|
if (waitingForData && containsReal(delta)) {
|
||||||
waitingForData = false;
|
waitingForData = false;
|
||||||
Node childNode = nme.getNode();
|
if (SwingUtilities.isEventDispatchThread()) {
|
||||||
new SetupTabsChildrenWorker(childNode).execute();
|
setupTabs(nme.getNode());
|
||||||
|
} else {
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
setupTabs(nme.getNode());
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
|
|||||||
* Configure the child OutlineView (explorer view) component.
|
* Configure the child OutlineView (explorer view) component.
|
||||||
*/
|
*/
|
||||||
outlineView.setAllowedDragActions(DnDConstants.ACTION_NONE);
|
outlineView.setAllowedDragActions(DnDConstants.ACTION_NONE);
|
||||||
|
|
||||||
outline = outlineView.getOutline();
|
outline = outlineView.getOutline();
|
||||||
outline.setRowSelectionAllowed(true);
|
outline.setRowSelectionAllowed(true);
|
||||||
outline.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
outline.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||||
@ -208,6 +208,11 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
|
|||||||
@Override
|
@Override
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
||||||
public void setNode(Node rootNode) {
|
public void setNode(Node rootNode) {
|
||||||
|
if (! SwingUtilities.isEventDispatchThread()) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Attempting to run setNode() from non-EDT thread");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The quick filter must be reset because when determining column width,
|
* The quick filter must be reset because when determining column width,
|
||||||
* ETable.getRowCount is called, and the documentation states that quick
|
* ETable.getRowCount is called, and the documentation states that quick
|
||||||
@ -281,7 +286,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
|
|||||||
* let the table resize itself.
|
* let the table resize itself.
|
||||||
*/
|
*/
|
||||||
outline.setAutoResizeMode((props.isEmpty()) ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
|
outline.setAutoResizeMode((props.isEmpty()) ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
|
||||||
|
|
||||||
assignColumns(props); // assign columns to match the properties
|
assignColumns(props); // assign columns to match the properties
|
||||||
if (firstProp != null) {
|
if (firstProp != null) {
|
||||||
((DefaultOutlineModel) outline.getOutlineModel()).setNodesColumnLabel(firstProp.getDisplayName());
|
((DefaultOutlineModel) outline.getOutlineModel()).setNodesColumnLabel(firstProp.getDisplayName());
|
||||||
|
@ -251,7 +251,7 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
map.put(TYPE_DIR.toString(), content.getDirType().getLabel());
|
map.put(TYPE_DIR.toString(), content.getDirType().getLabel());
|
||||||
map.put(TYPE_META.toString(), content.getMetaType().toString());
|
map.put(TYPE_META.toString(), content.getMetaType().toString());
|
||||||
map.put(KNOWN.toString(), content.getKnown().getName());
|
map.put(KNOWN.toString(), content.getKnown().getName());
|
||||||
map.put(HASHSETS.toString(), getHashSetHitsForFile(content));
|
map.put(HASHSETS.toString(), getHashSetHitsCsvList(content));
|
||||||
map.put(MD5HASH.toString(), StringUtils.defaultString(content.getMd5Hash()));
|
map.put(MD5HASH.toString(), StringUtils.defaultString(content.getMd5Hash()));
|
||||||
map.put(ObjectID.toString(), content.getId());
|
map.put(ObjectID.toString(), content.getId());
|
||||||
map.put(MIMETYPE.toString(), StringUtils.defaultString(content.getMIMEType()));
|
map.put(MIMETYPE.toString(), StringUtils.defaultString(content.getMIMEType()));
|
||||||
@ -263,7 +263,7 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
* to their sheets.
|
* to their sheets.
|
||||||
*
|
*
|
||||||
* @param sheetSet the modifiable Sheet.Set returned by
|
* @param sheetSet the modifiable Sheet.Set returned by
|
||||||
* Sheet.get(Sheet.PROPERTIES)
|
* Sheet.get(Sheet.PROPERTIES)
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages("AbstractAbstractFileNode.tagsProperty.displayName=Tags")
|
@NbBundle.Messages("AbstractAbstractFileNode.tagsProperty.displayName=Tags")
|
||||||
protected void addTagProperty(Sheet.Set sheetSet) {
|
protected void addTagProperty(Sheet.Set sheetSet) {
|
||||||
@ -301,7 +301,15 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getHashSetHitsForFile(AbstractFile file) {
|
/**
|
||||||
|
* Gets a comma-separated values list of the names of the hash sets
|
||||||
|
* currently identified as including a given file.
|
||||||
|
*
|
||||||
|
* @param file The file.
|
||||||
|
*
|
||||||
|
* @return The CSV list of hash set names.
|
||||||
|
*/
|
||||||
|
protected static String getHashSetHitsCsvList(AbstractFile file) {
|
||||||
try {
|
try {
|
||||||
return StringUtils.join(file.getHashSetNames(), ", ");
|
return StringUtils.join(file.getHashSetNames(), ", ");
|
||||||
} catch (TskCoreException tskCoreException) {
|
} catch (TskCoreException tskCoreException) {
|
||||||
|
@ -41,9 +41,9 @@ import org.sleuthkit.datamodel.TskCoreException;
|
|||||||
* Child factory to create the top level children of the autopsy tree
|
* Child factory to create the top level children of the autopsy tree
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class AutopsyTreeChildrenFactory extends ChildFactory.Detachable<Object> {
|
public final class AutopsyTreeChildFactory extends ChildFactory.Detachable<Object> {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(AutopsyTreeChildrenFactory.class.getName());
|
private static final Logger logger = Logger.getLogger(AutopsyTreeChildFactory.class.getName());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener for handling DATA_SOURCE_ADDED events.
|
* Listener for handling DATA_SOURCE_ADDED events.
|
@ -80,7 +80,7 @@ import org.sleuthkit.autopsy.datamodel.FileTypesByMimeType;
|
|||||||
import org.sleuthkit.autopsy.datamodel.InterestingHits;
|
import org.sleuthkit.autopsy.datamodel.InterestingHits;
|
||||||
import org.sleuthkit.autopsy.datamodel.KeywordHits;
|
import org.sleuthkit.autopsy.datamodel.KeywordHits;
|
||||||
import org.sleuthkit.autopsy.datamodel.ResultsNode;
|
import org.sleuthkit.autopsy.datamodel.ResultsNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.AutopsyTreeChildrenFactory;
|
import org.sleuthkit.autopsy.datamodel.AutopsyTreeChildFactory;
|
||||||
import org.sleuthkit.autopsy.datamodel.ViewsNode;
|
import org.sleuthkit.autopsy.datamodel.ViewsNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.accounts.Accounts;
|
import org.sleuthkit.autopsy.datamodel.accounts.Accounts;
|
||||||
import org.sleuthkit.autopsy.datamodel.accounts.BINRange;
|
import org.sleuthkit.autopsy.datamodel.accounts.BINRange;
|
||||||
@ -108,7 +108,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
private final LinkedList<String[]> forwardList;
|
private final LinkedList<String[]> forwardList;
|
||||||
private static final String PREFERRED_ID = "DirectoryTreeTopComponent"; //NON-NLS
|
private static final String PREFERRED_ID = "DirectoryTreeTopComponent"; //NON-NLS
|
||||||
private static final Logger LOGGER = Logger.getLogger(DirectoryTreeTopComponent.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(DirectoryTreeTopComponent.class.getName());
|
||||||
private AutopsyTreeChildrenFactory autopsyTreeChildrenFactory;
|
private AutopsyTreeChildFactory autopsyTreeChildFactory;
|
||||||
private Children autopsyTreeChildren;
|
private Children autopsyTreeChildren;
|
||||||
private static final long DEFAULT_DATASOURCE_GROUPING_THRESHOLD = 5; // Threshold for prompting the user about grouping by data source
|
private static final long DEFAULT_DATASOURCE_GROUPING_THRESHOLD = 5; // Threshold for prompting the user about grouping by data source
|
||||||
private static final String GROUPING_THRESHOLD_NAME = "GroupDataSourceThreshold";
|
private static final String GROUPING_THRESHOLD_NAME = "GroupDataSourceThreshold";
|
||||||
@ -476,8 +476,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if there's at least one image, load the image and open the top componen
|
// if there's at least one image, load the image and open the top componen
|
||||||
autopsyTreeChildrenFactory = new AutopsyTreeChildrenFactory();
|
autopsyTreeChildFactory = new AutopsyTreeChildFactory();
|
||||||
autopsyTreeChildren = Children.create(autopsyTreeChildrenFactory, true);
|
autopsyTreeChildren = Children.create(autopsyTreeChildFactory, true);
|
||||||
Node root = new AbstractNode(autopsyTreeChildren) {
|
Node root = new AbstractNode(autopsyTreeChildren) {
|
||||||
//JIRA-2807: What is the point of these overrides?
|
//JIRA-2807: What is the point of these overrides?
|
||||||
/**
|
/**
|
||||||
@ -735,9 +735,11 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
* responsible for opening core windows. Consider moving
|
* responsible for opening core windows. Consider moving
|
||||||
* this elsewhere.
|
* this elsewhere.
|
||||||
*/
|
*/
|
||||||
if (!this.isOpened()) {
|
SwingUtilities.invokeLater(() -> {
|
||||||
SwingUtilities.invokeLater(CoreComponentControl::openCoreWindows);
|
if (! DirectoryTreeTopComponent.this.isOpened()) {
|
||||||
}
|
CoreComponentControl.openCoreWindows();
|
||||||
|
}
|
||||||
|
});
|
||||||
} catch (NoCurrentCaseException notUsed) {
|
} catch (NoCurrentCaseException notUsed) {
|
||||||
/**
|
/**
|
||||||
* Case is closed, do nothing.
|
* Case is closed, do nothing.
|
||||||
@ -907,7 +909,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// refresh all children of the root.
|
// refresh all children of the root.
|
||||||
autopsyTreeChildrenFactory.refreshChildren();
|
autopsyTreeChildFactory.refreshChildren();
|
||||||
|
|
||||||
// Select the first node and reset the selection history
|
// Select the first node and reset the selection history
|
||||||
// This should happen on the EDT once the tree has been rebuilt.
|
// This should happen on the EDT once the tree has been rebuilt.
|
||||||
|
@ -134,7 +134,7 @@ class ImageWriter implements PropertyChangeListener{
|
|||||||
|
|
||||||
@Messages({
|
@Messages({
|
||||||
"# {0} - data source name",
|
"# {0} - data source name",
|
||||||
"ImageWriter.progressBar.message=Finishing acquisition of {0}"
|
"ImageWriter.progressBar.message=Finishing acquisition of {0} (unplug device to cancel)"
|
||||||
})
|
})
|
||||||
private void startFinishImage(String dataSourceName){
|
private void startFinishImage(String dataSourceName){
|
||||||
|
|
||||||
|
@ -97,6 +97,9 @@
|
|||||||
<ResourceString bundle="org/sleuthkit/autopsy/report/Bundle.properties" key="ReportVisualPanel2.allResultsRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/report/Bundle.properties" key="ReportVisualPanel2.allResultsRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="allResultsRadioButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="dataLabel">
|
<Component class="javax.swing.JLabel" name="dataLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
@ -109,7 +109,7 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (TagName tagName : tagNamesInUse) {
|
for (TagName tagName : tagNamesInUse) {
|
||||||
String notableString = tagName.getKnownStatus() == TskData.FileKnown.BAD ? TagsManager.getNotableTagLabel() : "";
|
String notableString = tagName.getKnownStatus() == TskData.FileKnown.BAD ? TagsManager.getNotableTagLabel() : "";
|
||||||
tagStates.put(tagName.getDisplayName() + notableString, Boolean.FALSE);
|
tagStates.put(tagName.getDisplayName() + notableString, Boolean.FALSE);
|
||||||
}
|
}
|
||||||
tags.addAll(tagStates.keySet());
|
tags.addAll(tagStates.keySet());
|
||||||
@ -124,7 +124,9 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
tagsList.addMouseListener(new MouseAdapter() {
|
tagsList.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent evt) {
|
public void mousePressed(MouseEvent evt) {
|
||||||
|
if (!taggedResultsRadioButton.isSelected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int index = tagsList.locationToIndex(evt.getPoint());
|
int index = tagsList.locationToIndex(evt.getPoint());
|
||||||
if (index < tagsModel.getSize() && index >= 0) {
|
if (index < tagsModel.getSize() && index >= 0) {
|
||||||
String value = tagsModel.getElementAt(index);
|
String value = tagsModel.getElementAt(index);
|
||||||
@ -184,16 +186,26 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
return tagStates;
|
return tagStates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are any tags selected?
|
||||||
|
*
|
||||||
|
* @return True if any tags are selected; otherwise false.
|
||||||
|
*/
|
||||||
private boolean areTagsSelected() {
|
private boolean areTagsSelected() {
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
for (Entry<String, Boolean> entry : tagStates.entrySet()) {
|
for (Entry<String, Boolean> entry : tagStates.entrySet()) {
|
||||||
if (entry.getValue()) {
|
if (entry.getValue()) {
|
||||||
result = true;
|
result = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the Finish button as either enabled or disabled depending on the UI
|
||||||
|
* component selections.
|
||||||
|
*/
|
||||||
private void updateFinishButton() {
|
private void updateFinishButton() {
|
||||||
if (taggedResultsRadioButton.isSelected()) {
|
if (taggedResultsRadioButton.isSelected()) {
|
||||||
wizPanel.setFinish(areTagsSelected());
|
wizPanel.setFinish(areTagsSelected());
|
||||||
@ -209,6 +221,19 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
return taggedResultsRadioButton.isSelected();
|
return taggedResultsRadioButton.isSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set all tagged results as either selected or unselected.
|
||||||
|
*
|
||||||
|
* @param selected Should all tagged results be selected?
|
||||||
|
*/
|
||||||
|
void setAllTaggedResultsSelected(boolean selected) {
|
||||||
|
for (String tag : tags) {
|
||||||
|
tagStates.put(tag, (selected ? Boolean.TRUE : Boolean.FALSE));
|
||||||
|
}
|
||||||
|
tagsList.repaint();
|
||||||
|
wizPanel.setFinish(selected);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called from within the constructor to initialize the form.
|
* This method is called from within the constructor to initialize the form.
|
||||||
* WARNING: Do NOT modify this code. The content of this method is always
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
@ -234,6 +259,11 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
|
|
||||||
optionsButtonGroup.add(allResultsRadioButton);
|
optionsButtonGroup.add(allResultsRadioButton);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(allResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.allResultsRadioButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(allResultsRadioButton, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.allResultsRadioButton.text")); // NOI18N
|
||||||
|
allResultsRadioButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
allResultsRadioButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(dataLabel, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.dataLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(dataLabel, org.openide.util.NbBundle.getMessage(ReportVisualPanel2.class, "ReportVisualPanel2.dataLabel.text")); // NOI18N
|
||||||
|
|
||||||
@ -312,25 +342,21 @@ final class ReportVisualPanel2 extends JPanel {
|
|||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
|
private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
|
||||||
for (String tag : tags) {
|
setAllTaggedResultsSelected(true);
|
||||||
tagStates.put(tag, Boolean.TRUE);
|
|
||||||
}
|
|
||||||
tagsList.repaint();
|
|
||||||
wizPanel.setFinish(true);
|
|
||||||
}//GEN-LAST:event_selectAllButtonActionPerformed
|
}//GEN-LAST:event_selectAllButtonActionPerformed
|
||||||
|
|
||||||
private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deselectAllButtonActionPerformed
|
private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deselectAllButtonActionPerformed
|
||||||
for (String tag : tags) {
|
setAllTaggedResultsSelected(false);
|
||||||
tagStates.put(tag, Boolean.FALSE);
|
|
||||||
}
|
|
||||||
tagsList.repaint();
|
|
||||||
wizPanel.setFinish(false);
|
|
||||||
}//GEN-LAST:event_deselectAllButtonActionPerformed
|
}//GEN-LAST:event_deselectAllButtonActionPerformed
|
||||||
|
|
||||||
private void advancedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedButtonActionPerformed
|
private void advancedButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedButtonActionPerformed
|
||||||
artifactStates = dialog.display();
|
artifactStates = dialog.display();
|
||||||
}//GEN-LAST:event_advancedButtonActionPerformed
|
}//GEN-LAST:event_advancedButtonActionPerformed
|
||||||
|
|
||||||
|
private void allResultsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allResultsRadioButtonActionPerformed
|
||||||
|
setAllTaggedResultsSelected(false);
|
||||||
|
}//GEN-LAST:event_allResultsRadioButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JButton advancedButton;
|
private javax.swing.JButton advancedButton;
|
||||||
private javax.swing.JRadioButton allResultsRadioButton;
|
private javax.swing.JRadioButton allResultsRadioButton;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.corelibs/3
|
OpenIDE-Module: org.sleuthkit.autopsy.corelibs/3
|
||||||
OpenIDE-Module-Implementation-Version: 4
|
OpenIDE-Module-Implementation-Version: 5
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/corelibs/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/corelibs/Bundle.properties
|
||||||
OpenIDE-Module-Specification-Version: 1.1
|
OpenIDE-Module-Specification-Version: 1.2
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
AutoUpdate-Essential-Module: true
|
AutoUpdate-Essential-Module: true
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>10</release-version>
|
<release-version>10</release-version>
|
||||||
<specification-version>10.11</specification-version>
|
<specification-version>10.12</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -144,7 +144,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>3</release-version>
|
<release-version>3</release-version>
|
||||||
<specification-version>1.1</specification-version>
|
<specification-version>1.2</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -19,14 +19,11 @@
|
|||||||
package org.sleuthkit.autopsy.experimental.objectdetection;
|
package org.sleuthkit.autopsy.experimental.objectdetection;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.opencv.core.CvException;
|
import org.opencv.core.CvException;
|
||||||
import org.opencv.core.Mat;
|
import org.opencv.core.Mat;
|
||||||
import org.opencv.core.MatOfByte;
|
import org.opencv.core.MatOfByte;
|
||||||
@ -52,7 +49,6 @@ import org.sleuthkit.datamodel.AbstractFile;
|
|||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_OBJECT_DETECTED;
|
import static org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE.TSK_OBJECT_DETECTED;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.ReadContentInputStream;
|
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,6 +57,7 @@ import org.sleuthkit.datamodel.TskCoreException;
|
|||||||
public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter {
|
public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter {
|
||||||
|
|
||||||
private final static Logger logger = Logger.getLogger(ObjectDetectectionFileIngestModule.class.getName());
|
private final static Logger logger = Logger.getLogger(ObjectDetectectionFileIngestModule.class.getName());
|
||||||
|
private final static int MAX_FILE_SIZE = 100000000; //Max size of pictures to perform object detection on
|
||||||
private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter();
|
private static final IngestModuleReferenceCounter refCounter = new IngestModuleReferenceCounter();
|
||||||
private long jobId;
|
private long jobId;
|
||||||
private Map<String, CascadeClassifier> classifiers;
|
private Map<String, CascadeClassifier> classifiers;
|
||||||
@ -100,15 +97,24 @@ public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter
|
|||||||
@Override
|
@Override
|
||||||
public ProcessResult process(AbstractFile file) {
|
public ProcessResult process(AbstractFile file) {
|
||||||
if (!classifiers.isEmpty() && ImageUtils.isImageThumbnailSupported(file)) {
|
if (!classifiers.isEmpty() && ImageUtils.isImageThumbnailSupported(file)) {
|
||||||
//Any image we can create a thumbnail for is one we should apply the classifiers to
|
//Any image we can create a thumbnail for is one we should apply the classifiers to
|
||||||
InputStream inputStream = new ReadContentInputStream(file);
|
|
||||||
byte[] imageInMemory;
|
if (file.getSize() > MAX_FILE_SIZE) {
|
||||||
|
//prevent it from allocating gigabytes of memory for extremely large files
|
||||||
|
logger.log(Level.INFO, "Encountered file " + file.getParentPath() + file.getName() + " with object id of "
|
||||||
|
+ file.getId() + " which exceeds max file size of " + MAX_FILE_SIZE + " bytes, with a size of " + file.getSize());
|
||||||
|
return IngestModule.ProcessResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] imageInMemory = new byte[(int) file.getSize()];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
imageInMemory = IOUtils.toByteArray(inputStream);
|
file.read(imageInMemory, 0, file.getSize());
|
||||||
} catch (IOException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.WARNING, "Unable to read image to byte array for performing object detection on " + file.getParentPath() + file.getName() + " with object id of " + file.getId(), ex);
|
logger.log(Level.WARNING, "Unable to read image to byte array for performing object detection on " + file.getParentPath() + file.getName() + " with object id of " + file.getId(), ex);
|
||||||
return IngestModule.ProcessResult.ERROR;
|
return IngestModule.ProcessResult.ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mat originalImage;
|
Mat originalImage;
|
||||||
try {
|
try {
|
||||||
originalImage = Highgui.imdecode(new MatOfByte(imageInMemory), Highgui.IMREAD_GRAYSCALE);
|
originalImage = Highgui.imdecode(new MatOfByte(imageInMemory), Highgui.IMREAD_GRAYSCALE);
|
||||||
@ -121,7 +127,6 @@ public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter
|
|||||||
logger.log(Level.SEVERE, "Unexpected Exception encountered attempting to use OpenCV to decode picture: " + file.getParentPath() + file.getName() + " with object id of " + file.getId(), unexpectedException);
|
logger.log(Level.SEVERE, "Unexpected Exception encountered attempting to use OpenCV to decode picture: " + file.getParentPath() + file.getName() + " with object id of " + file.getId(), unexpectedException);
|
||||||
return IngestModule.ProcessResult.ERROR;
|
return IngestModule.ProcessResult.ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
MatOfRect detectionRectangles = new MatOfRect(); //the rectangles which reprent the coordinates on the image for where objects were detected
|
MatOfRect detectionRectangles = new MatOfRect(); //the rectangles which reprent the coordinates on the image for where objects were detected
|
||||||
for (String classifierKey : classifiers.keySet()) {
|
for (String classifierKey : classifiers.keySet()) {
|
||||||
//apply each classifier to the file
|
//apply each classifier to the file
|
||||||
@ -130,9 +135,9 @@ public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter
|
|||||||
} catch (CvException ignored) {
|
} catch (CvException ignored) {
|
||||||
//The image was likely an image which we are unable to generate a thumbnail for, and the classifier was likely one where that is not acceptable
|
//The image was likely an image which we are unable to generate a thumbnail for, and the classifier was likely one where that is not acceptable
|
||||||
continue;
|
continue;
|
||||||
} catch (Exception unexpectedException) {
|
} catch (Exception unexpectedException) {
|
||||||
//hopefully an unnecessary generic exception catch but currently present to catch any exceptions OpenCv throws which may not be documented
|
//hopefully an unnecessary generic exception catch but currently present to catch any exceptions OpenCv throws which may not be documented
|
||||||
logger.log(Level.SEVERE, "Unexpected Exception encountered for image " + file.getParentPath() + file.getName() + " with object id of " + file.getId() +" while trying to apply classifier " + classifierKey, unexpectedException);
|
logger.log(Level.SEVERE, "Unexpected Exception encountered for image " + file.getParentPath() + file.getName() + " with object id of " + file.getId() + " while trying to apply classifier " + classifierKey, unexpectedException);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,10 +168,14 @@ public class ObjectDetectectionFileIngestModule extends FileIngestModuleAdapter
|
|||||||
|
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.SEVERE, String.format("Failed to create blackboard artifact for '%s'.", file.getParentPath() + file.getName()), ex); //NON-NLS
|
logger.log(Level.SEVERE, String.format("Failed to create blackboard artifact for '%s'.", file.getParentPath() + file.getName()), ex); //NON-NLS
|
||||||
|
detectionRectangles.release();
|
||||||
|
originalImage.release();
|
||||||
return IngestModule.ProcessResult.ERROR;
|
return IngestModule.ProcessResult.ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
detectionRectangles.release();
|
||||||
|
originalImage.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
return IngestModule.ProcessResult.OK;
|
return IngestModule.ProcessResult.OK;
|
||||||
|
@ -127,7 +127,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>10</release-version>
|
<release-version>10</release-version>
|
||||||
<specification-version>10.11</specification-version>
|
<specification-version>10.12</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -136,7 +136,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>3</release-version>
|
<release-version>3</release-version>
|
||||||
<specification-version>1.1</specification-version>
|
<specification-version>1.2</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
</module-dependencies>
|
</module-dependencies>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
AutoUpdate-Show-In-Client: true
|
AutoUpdate-Show-In-Client: true
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.keywordsearch/6
|
OpenIDE-Module: org.sleuthkit.autopsy.keywordsearch/6
|
||||||
OpenIDE-Module-Implementation-Version: 19
|
OpenIDE-Module-Implementation-Version: 20
|
||||||
OpenIDE-Module-Install: org/sleuthkit/autopsy/keywordsearch/Installer.class
|
OpenIDE-Module-Install: org/sleuthkit/autopsy/keywordsearch/Installer.class
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/keywordsearch/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/keywordsearch/layer.xml
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/keywordsearch/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/keywordsearch/Bundle.properties
|
||||||
|
@ -119,7 +119,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>10</release-version>
|
<release-version>10</release-version>
|
||||||
<specification-version>10.11</specification-version>
|
<specification-version>10.12</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -128,7 +128,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>3</release-version>
|
<release-version>3</release-version>
|
||||||
<specification-version>1.1</specification-version>
|
<specification-version>1.2</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
</module-dependencies>
|
</module-dependencies>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
OpenIDE-Module: org.sleuthkit.autopsy.recentactivity/6
|
OpenIDE-Module: org.sleuthkit.autopsy.recentactivity/6
|
||||||
OpenIDE-Module-Implementation-Version: 15
|
OpenIDE-Module-Implementation-Version: 16
|
||||||
OpenIDE-Module-Layer: org/sleuthkit/autopsy/recentactivity/layer.xml
|
OpenIDE-Module-Layer: org/sleuthkit/autopsy/recentactivity/layer.xml
|
||||||
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/recentactivity/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: org/sleuthkit/autopsy/recentactivity/Bundle.properties
|
||||||
OpenIDE-Module-Requires:
|
OpenIDE-Module-Requires:
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>10</release-version>
|
<release-version>10</release-version>
|
||||||
<specification-version>10.11</specification-version>
|
<specification-version>10.12</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
</module-dependencies>
|
</module-dependencies>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<project name="TSK_VERSION">
|
<project name="TSK_VERSION">
|
||||||
<property name="TSK_VERSION" value="4.6.1"/>
|
<property name="TSK_VERSION" value="4.6.2"/>
|
||||||
</project>
|
</project>
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
<compile-dependency/>
|
<compile-dependency/>
|
||||||
<run-dependency>
|
<run-dependency>
|
||||||
<release-version>10</release-version>
|
<release-version>10</release-version>
|
||||||
<specification-version>10.11</specification-version>
|
<specification-version>10.12</specification-version>
|
||||||
</run-dependency>
|
</run-dependency>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Verifies programs are installed and copies native code into the Autopsy folder structure
|
# Verifies programs are installed and copies native code into the Autopsy folder structure
|
||||||
|
|
||||||
TSK_VERSION=4.6.1
|
TSK_VERSION=4.6.2
|
||||||
|
|
||||||
# Verify PhotoRec was installed
|
# Verify PhotoRec was installed
|
||||||
photorec_filepath=/usr/bin/photorec
|
photorec_filepath=/usr/bin/photorec
|
||||||
|
Loading…
x
Reference in New Issue
Block a user