diff --git a/CentralRepository/Central Repository User Guide.pdf b/CentralRepository/Central Repository User Guide.pdf
deleted file mode 100755
index 0b597fbfbe..0000000000
Binary files a/CentralRepository/Central Repository User Guide.pdf and /dev/null differ
diff --git a/CentralRepository/ivy.xml b/CentralRepository/ivy.xml
deleted file mode 100755
index abf18b3da4..0000000000
--- a/CentralRepository/ivy.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/CentralRepository/ivysettings.xml b/CentralRepository/ivysettings.xml
deleted file mode 100755
index e3e086637b..0000000000
--- a/CentralRepository/ivysettings.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java
old mode 100755
new mode 100644
index afef305ace..1f5af1104c
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java
@@ -33,8 +33,6 @@ import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import java.util.logging.Level;
-import javafx.animation.KeyValue;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.Logger;
@@ -1062,8 +1060,9 @@ public abstract class AbstractSqlEamDb implements EamDb {
}
/**
- * Sets an eamArtifact instance to the given known status. If eamArtifact
- * exists, it is updated. If eamArtifact does not exist nothing happens
+ * Sets an eamArtifact instance to the given knownStatus. If eamArtifact
+ * exists, it is updated. If eamArtifact does not exist it is added
+ * with the given status.
*
* @param eamArtifact Artifact containing exactly one (1) ArtifactInstance.
* @param FileKnown The status to change the artifact to
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamArtifactUtil.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamArtifactUtil.java
index a582418911..670067ac0a 100755
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamArtifactUtil.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamArtifactUtil.java
@@ -27,6 +27,7 @@ import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardAttribute;
+import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskData;
import org.sleuthkit.datamodel.TskDataException;
@@ -192,4 +193,73 @@ public class EamArtifactUtil {
return null;
}
}
+
+ /**
+ * Create an EamArtifact from the given Content.
+ * Will return null if an artifact can not be created. Does not
+ * add the artifact to the database.
+ *
+ * @param content The content object
+ * @param knownStatus Unknown, known bad, or known
+ * @param comment The comment for the new artifact (generally used for a tag comment)
+ * @return The new EamArtifact or null if creation failed
+ */
+ public static EamArtifact getEamArtifactFromContent(Content content, TskData.FileKnown knownStatus, String comment){
+
+ if(! (content instanceof AbstractFile)){
+ return null;
+ }
+
+ final AbstractFile af = (AbstractFile) content;
+
+ if ((af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS)
+ || (af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS)
+ || (af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.SLACK)
+ || (af.getKnown() == TskData.FileKnown.KNOWN)
+ || (af.isDir() == true)
+ || (!af.isMetaFlagSet(TskData.TSK_FS_META_FLAG_ENUM.ALLOC))) {
+ return null;
+ }
+
+ String dsName;
+ try {
+ dsName = af.getDataSource().getName();
+ } catch (TskCoreException ex) {
+ LOGGER.log(Level.SEVERE, "Error, unable to get name of data source from abstract file.", ex);
+ return null;
+ }
+
+ // We need a hash to make the artifact
+ String md5 = af.getMd5Hash();
+ if (md5 == null || md5.isEmpty()) {
+ return null;
+ }
+
+ String deviceId;
+ try {
+ deviceId = Case.getCurrentCase().getSleuthkitCase().getDataSource(af.getDataSource().getId()).getDeviceId();
+ } catch (TskCoreException | TskDataException ex) {
+ LOGGER.log(Level.SEVERE, "Error, failed to get deviceID or data source from current case.", ex);
+ return null;
+ }
+
+ EamArtifact eamArtifact;
+ try {
+ EamArtifact.Type filesType = EamDb.getInstance().getCorrelationTypeById(EamArtifact.FILES_TYPE_ID);
+ eamArtifact = new EamArtifact(filesType, af.getMd5Hash());
+ EamArtifactInstance cei = new EamArtifactInstance(
+ new EamCase(Case.getCurrentCase().getName(), Case.getCurrentCase().getDisplayName()),
+ new EamDataSource(deviceId, dsName),
+ af.getParentPath() + af.getName(),
+ comment,
+ TskData.FileKnown.BAD,
+ EamArtifactInstance.GlobalStatus.LOCAL
+ );
+ eamArtifact.addInstance(cei);
+ return eamArtifact;
+ } catch (EamDbException ex) {
+ LOGGER.log(Level.SEVERE, "Error, unable to get FILES correlation type.", ex);
+ return null;
+ }
+ }
}
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java
index 14ee9387b2..fff8bbf540 100644
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java
@@ -327,7 +327,7 @@ public interface EamDb {
* @param FileKnown The status to change the artifact to
*/
void setArtifactInstanceKnownStatus(EamArtifact eamArtifact, TskData.FileKnown knownStatus) throws EamDbException;
-
+
/**
* Gets list of matching eamArtifact instances that have knownStatus =
* "Bad".
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java
index 102fdf227f..1e1bc7227e 100644
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java
@@ -600,7 +600,7 @@ public class SqliteEamDb extends AbstractSqlEamDb {
} finally {
releaseExclusiveLock();
}
- }
+ }
/**
* Gets list of matching eamArtifact instances that have knownStatus =
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/eventlisteners/CaseEventListener.java b/Core/src/org/sleuthkit/autopsy/centralrepository/eventlisteners/CaseEventListener.java
old mode 100755
new mode 100644
index e2d253cc28..d333a95100
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/eventlisteners/CaseEventListener.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/eventlisteners/CaseEventListener.java
@@ -30,11 +30,9 @@ import org.sleuthkit.autopsy.casemodule.events.BlackBoardArtifactTagDeletedEvent
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
import org.sleuthkit.autopsy.casemodule.events.DataSourceAddedEvent;
-import org.sleuthkit.autopsy.casemodule.services.Services;
import org.sleuthkit.autopsy.casemodule.services.TagsManager;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifact;
-import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactInstance;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamCase;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDataSource;
@@ -46,7 +44,6 @@ import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.BlackboardArtifactTag;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.ContentTag;
-import org.sleuthkit.datamodel.TagName;
import org.sleuthkit.datamodel.TskCoreException;
import org.sleuthkit.datamodel.TskData;
import org.sleuthkit.datamodel.TskDataException;
@@ -142,57 +139,14 @@ public class CaseEventListener implements PropertyChangeListener {
}
}
- if ((af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS)
- || (af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS)
- || (af.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.SLACK)
- || (af.getKnown() == TskData.FileKnown.KNOWN)
- || (af.isDir() == true)
- || (!af.isMetaFlagSet(TskData.TSK_FS_META_FLAG_ENUM.ALLOC))) {
- break;
- }
+ final EamArtifact eamArtifact = EamArtifactUtil.getEamArtifactFromContent(af,
+ knownStatus, comment);
- String dsName;
- try {
- dsName = af.getDataSource().getName();
- } catch (TskCoreException ex) {
- LOGGER.log(Level.SEVERE, "Error, unable to get name of data source from abstract file during CONTENT_TAG_ADDED event.", ex);
- return;
- }
-
- String md5 = af.getMd5Hash();
- if (md5 == null || md5.isEmpty()) {
- return;
- }
- String deviceId;
- try {
- deviceId = Case.getCurrentCase().getSleuthkitCase().getDataSource(af.getDataSource().getId()).getDeviceId();
- } catch (TskCoreException | TskDataException ex) {
- LOGGER.log(Level.SEVERE, "Error, failed to get deviceID or data source from current case.", ex);
- return;
- }
-
- EamArtifact eamArtifact;
- try {
- EamArtifact.Type filesType = dbManager.getCorrelationTypeById(EamArtifact.FILES_TYPE_ID);
- eamArtifact = new EamArtifact(filesType, af.getMd5Hash());
- EamArtifactInstance cei = new EamArtifactInstance(
- new EamCase(Case.getCurrentCase().getName(), Case.getCurrentCase().getDisplayName()),
- new EamDataSource(deviceId, dsName),
- af.getParentPath() + af.getName(),
- comment,
- knownStatus,
- EamArtifactInstance.GlobalStatus.LOCAL
- );
- eamArtifact.addInstance(cei);
- // send update to Central Repository db
- Runnable r = new KnownStatusChangeRunner(eamArtifact, knownStatus);
- // TODO: send r into a thread pool instead
- Thread t = new Thread(r);
- t.start();
- } catch (EamDbException ex) {
- LOGGER.log(Level.SEVERE, "Error, unable to get FILES correlation type during CONTENT_TAG_ADDED/CONTENT_TAG_DELETED event.", ex);
- }
-
+ // send update to Central Repository db
+ Runnable r = new KnownStatusChangeRunner(eamArtifact, knownStatus);
+ // TODO: send r into a thread pool instead
+ Thread t = new Thread(r);
+ t.start();
} // CONTENT_TAG_ADDED, CONTENT_TAG_DELETED
break;
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java
index a5c0b87b1b..49d9ab6d79 100755
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java
@@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.centralrepository.optionspanel;
+import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.ArrayList;
@@ -27,13 +28,23 @@ import java.util.logging.Level;
import java.util.stream.Collectors;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.JOptionPane;
import org.openide.util.NbBundle.Messages;
import org.openide.windows.WindowManager;
+import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.services.TagsManager;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException;
+import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifact;
+import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.datamodel.TskCoreException;
+import org.sleuthkit.datamodel.BlackboardArtifactTag;
+import org.sleuthkit.datamodel.TagName;
+import org.sleuthkit.datamodel.ContentTag;
+import org.sleuthkit.datamodel.TskData;
/**
* Instances of this class allow a user to select an existing hash database and
@@ -92,6 +103,8 @@ final class ManageTagsDialog extends javax.swing.JDialog {
boolean enabled = badTags.contains(tagName);
model.addRow(new Object[]{tagName, enabled});
}
+ CheckBoxModelListener listener = new CheckBoxModelListener(this);
+ model.addTableModelListener(listener);
}
private void display() {
@@ -230,6 +243,90 @@ final class ManageTagsDialog extends javax.swing.JDialog {
}
return true;
}
+
+ /**
+ * If the user sets a tag to "Implies known bad", give them the option to update
+ * any existing tagged items (in the current case only) in the central repo.
+ */
+ public class CheckBoxModelListener implements TableModelListener {
+ @Messages({"ManageTagsDialog.updateCurrentCase.msg=Mark as known bad any files/artifacts in the current case that have this tag?",
+ "ManageTagsDialog.updateCurrentCase.title=Update current case?",
+ "ManageTagsDialog.updateCurrentCase.error=Error updating existing Central Repository entries"})
+
+ javax.swing.JDialog dialog;
+ public CheckBoxModelListener(javax.swing.JDialog dialog){
+ this.dialog = dialog;
+ }
+
+ @Override
+ public void tableChanged(TableModelEvent e) {
+ int row = e.getFirstRow();
+ int column = e.getColumn();
+ if (column == 1) {
+ DefaultTableModel model = (DefaultTableModel) e.getSource();
+ String tagName = (String) model.getValueAt(row, 0);
+ Boolean checked = (Boolean) model.getValueAt(row, column);
+ if (checked) {
+
+ // Don't do anything if there's no case open
+ if(Case.isCaseOpen()){
+ int dialogButton = JOptionPane.YES_NO_OPTION;
+ int dialogResult = JOptionPane.showConfirmDialog (
+ null,
+ Bundle.ManageTagsDialog_updateCurrentCase_msg(),
+ Bundle.ManageTagsDialog_updateCurrentCase_title(),
+ dialogButton);
+ if(dialogResult == JOptionPane.YES_OPTION){
+ try{
+ dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+ setArtifactsKnownBadByTag(tagName, Case.getCurrentCase());
+ } catch (EamDbException ex) {
+ LOGGER.log(Level.SEVERE, "Failed to apply known bad status to current case", ex);
+ JOptionPane.showMessageDialog(null, Bundle.ManageTagsDialog_updateCurrentCase_error());
+ } finally {
+ dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Set knownBad status for all files/artifacts in the given case that
+ * are tagged with the given tag name.
+ * Files/artifacts that are not already in the database will be added.
+ * @param tagName The name of the tag to search for
+ * @param curCase The case to search in
+ */
+ public void setArtifactsKnownBadByTag(String tagNameString, Case curCase) throws EamDbException{
+ try{
+ TagName tagName = curCase.getServices().getTagsManager().getDisplayNamesToTagNamesMap().get(tagNameString);
+
+ // First find any matching artifacts
+ List artifactTags = curCase.getSleuthkitCase().getBlackboardArtifactTagsByTagName(tagName);
+
+ for(BlackboardArtifactTag bbTag:artifactTags){
+ List convertedArtifacts = EamArtifactUtil.fromBlackboardArtifact(bbTag.getArtifact(), true,
+ EamDb.getInstance().getCorrelationTypes(), true);
+ for (EamArtifact eamArtifact : convertedArtifacts) {
+ EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact,TskData.FileKnown.BAD);
+ }
+ }
+
+ // Now search for files
+ List fileTags = curCase.getSleuthkitCase().getContentTagsByTagName(tagName);
+ for(ContentTag contentTag:fileTags){
+ final EamArtifact eamArtifact = EamArtifactUtil.getEamArtifactFromContent(contentTag.getContent(),
+ TskData.FileKnown.BAD, "");
+ EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, TskData.FileKnown.BAD);
+ }
+ } catch (TskCoreException ex){
+ throw new EamDbException("Error updating artifacts", ex);
+ }
+
+ }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java
index bdd6310064..8f80022834 100755
--- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java
+++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestControlPanel.java
@@ -253,12 +253,12 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
* controlling automated ingest for a single node within the cluster.
*/
private AutoIngestControlPanel() {
-
+
//Disable the main window so they can only use the dashboard (if we used setVisible the taskBar icon would go away)
WindowManager.getDefault().getMainWindow().setEnabled(false);
-
+
manager = AutoIngestManager.getInstance();
-
+
pendingTableModel = new DefaultTableModel(JobsTableModelColumns.headers, 0) {
private static final long serialVersionUID = 1L;
@@ -304,6 +304,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
* text box.
*/
@Messages({
+ "# {0} - case db status", "# {1} - search svc Status", "# {2} - coord svc Status", "# {3} - msg broker status",
"AutoIngestControlPanel.tbServicesStatusMessage.Message=Case databases {0}, keyword search {1}, coordination {2}, messaging {3} ",
"AutoIngestControlPanel.tbServicesStatusMessage.Message.Up=up",
"AutoIngestControlPanel.tbServicesStatusMessage.Message.Down=down",
@@ -669,8 +670,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
@Messages({
"AutoIngestControlPanel.AutoIngestStartupError=Failed to start automated ingest. Verify Multi-user Settings.",
"AutoIngestControlPanel.AutoIngestStartupFailed.Message=Failed to start automated ingest.\nPlease see auto ingest system log for details.",
- "AutoIngestControlPanel.AutoIngestStartupFailed.Title=Automated Ingest Error",
- })
+ "AutoIngestControlPanel.AutoIngestStartupFailed.Title=Automated Ingest Error",})
private void startUp() {
/*
@@ -679,7 +679,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
try {
manager.startUp();
autoIngestStarted = true;
- } catch (AutoIngestManager.AutoIngestManagerStartupException ex) {
+ } catch (AutoIngestManager.AutoIngestManagerException ex) {
SYS_LOGGER.log(Level.SEVERE, "Dashboard error starting up auto ingest", ex);
tbStatusMessage.setText(NbBundle.getMessage(AutoIngestControlPanel.class, "AutoIngestControlPanel.AutoIngestStartupError"));
manager = null;
@@ -812,8 +812,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
"AutoIngestControlPanel.PauseDueToWriteStateFilesFailure=Paused, unable to write to shared images or cases location.",
"AutoIngestControlPanel.PauseDueToSharedConfigError=Paused, unable to update shared configuration.",
"AutoIngestControlPanel.PauseDueToIngestJobStartFailure=Paused, unable to start ingest job processing.",
- "AutoIngestControlPanel.PauseDueToFileExporterError=Paused, unable to load File Exporter settings.",
- })
+ "AutoIngestControlPanel.PauseDueToFileExporterError=Paused, unable to load File Exporter settings.",})
@Override
public void update(Observable o, Object arg) {
@@ -983,7 +982,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
List completedJobs = new ArrayList<>();
manager.getJobs(pendingJobs, runningJobs, completedJobs);
// Sort the completed jobs list by completed date
- Collections.sort(completedJobs, new AutoIngestJob.ReverseDateCompletedComparator());
+ Collections.sort(completedJobs, new AutoIngestJob.ReverseCompletedDateComparator());
EventQueue.invokeLater(new RefreshComponentsTask(pendingJobs, runningJobs, completedJobs));
}
}
@@ -1076,7 +1075,7 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
* @return True or fale.
*/
private boolean isLocalJob(AutoIngestJob job) {
- return job.getNodeName().equals(LOCAL_HOST_NAME);
+ return job.getProcessingHostName().equals(LOCAL_HOST_NAME);
}
/**
@@ -1145,20 +1144,19 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
tableModel.setRowCount(0);
for (AutoIngestJob job : jobs) {
AutoIngestJob.StageDetails status = job.getStageDetails();
- AutoIngestJobNodeData nodeData = job.getNodeData();
tableModel.addRow(new Object[]{
- nodeData.getCaseName(), // CASE
- nodeData.getDataSourcePath().getFileName(), // DATA_SOURCE
- job.getNodeName(), // HOST_NAME
- nodeData.getManifestFileDate(), // CREATED_TIME
- job.getStageStartDate(), // STARTED_TIME
- nodeData.getCompletedDate(), // COMPLETED_TIME
+ job.getManifest().getCaseName(), // CASE
+ job.getManifest().getDataSourcePath().getFileName(), // DATA_SOURCE
+ job.getProcessingHostName(), // HOST_NAME
+ job.getManifest().getDateFileCreated(), // CREATED_TIME
+ job.getProcessingStageStartDate(), // STARTED_TIME
+ job.getCompletedDate(), // COMPLETED_TIME
status.getDescription(), // ACTIVITY
- nodeData.getErrorsOccurred(), // STATUS
+job.getErrorsOccurred(), // STATUS
((Date.from(Instant.now()).getTime()) - (status.getStartDate().getTime())), // ACTIVITY_TIME
job.getCaseDirectoryPath(), // CASE_DIRECTORY_PATH
- job.getNodeName().equals(LOCAL_HOST_NAME), // IS_LOCAL_JOB
- nodeData.getManifestFilePath()}); // MANIFEST_FILE_PATH
+ job.getProcessingHostName().equals(LOCAL_HOST_NAME), // IS_LOCAL_JOB
+ job.getManifest().getFilePath()}); // MANIFEST_FILE_PATH
}
} catch (Exception ex) {
SYS_LOGGER.log(Level.SEVERE, "Dashboard error refreshing table", ex);
@@ -1703,11 +1701,17 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
*
* @param evt The button click event.
*/
+ @Messages({"AutoIngestControlPanel.casePrioritization.errorMessage=An error occurred when prioritizing the case. Some or all jobs may not have been prioritized."})
private void bnPrioritizeCaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnPrioritizeCaseActionPerformed
if (pendingTableModel.getRowCount() > 0 && pendingTable.getSelectedRow() >= 0) {
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
String caseName = (pendingTableModel.getValueAt(pendingTable.getSelectedRow(), JobsTableModelColumns.CASE.ordinal())).toString();
- manager.prioritizeCase(caseName);
+ try {
+ manager.prioritizeCase(caseName);
+ } catch (AutoIngestManager.AutoIngestManagerException ex) {
+ SYS_LOGGER.log(Level.SEVERE, "Error prioritizing a case", ex);
+ MessageNotifyUtil.Message.error(Bundle.AutoIngestControlPanel_casePrioritization_errorMessage());
+ }
refreshTables();
pendingTable.clearSelection();
enablePendingTableButtons(false);
@@ -1755,12 +1759,18 @@ public final class AutoIngestControlPanel extends JPanel implements Observer {
options[0]);
}
}//GEN-LAST:event_bnShowCaseLogActionPerformed
-
+
+ @Messages({"AutoIngestControlPanel.jobPrioritization.errorMessage=An error occurred when prioritizing the job."})
private void bnPrioritizeJobActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnPrioritizeJobActionPerformed
if (pendingTableModel.getRowCount() > 0 && pendingTable.getSelectedRow() >= 0) {
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
Path manifestFilePath = (Path) (pendingTableModel.getValueAt(pendingTable.getSelectedRow(), JobsTableModelColumns.MANIFEST_FILE_PATH.ordinal()));
- manager.prioritizeJob(manifestFilePath);
+ try {
+ manager.prioritizeJob(manifestFilePath);
+ } catch (AutoIngestManager.AutoIngestManagerException ex) {
+ SYS_LOGGER.log(Level.SEVERE, "Error prioritizing a case", ex);
+ MessageNotifyUtil.Message.error(Bundle.AutoIngestControlPanel_jobPrioritization_errorMessage());
+ }
refreshTables();
pendingTable.clearSelection();
enablePendingTableButtons(false);
diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.form b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.form
index 502fab6f16..ba1b540bd0 100755
--- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.form
+++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.form
@@ -1,6 +1,15 @@