diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.java index 99e4deb600..ece26b0b71 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboard.java @@ -37,8 +37,6 @@ import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.core.ServicesMonitor; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestMonitor.JobsSnapshot; /** * A dashboard for monitoring an automated ingest cluster. @@ -90,7 +88,7 @@ final class AutoIngestDashboard extends JPanel implements Observer { statusByService.put(ServicesMonitor.Service.REMOTE_KEYWORD_SEARCH.toString(), NbBundle.getMessage(AutoIngestDashboard.class, "AutoIngestDashboard.tbServicesStatusMessage.Message.Down")); statusByService.put(ServicesMonitor.Service.MESSAGING.toString(), NbBundle.getMessage(AutoIngestDashboard.class, "AutoIngestDashboard.tbServicesStatusMessage.Message.Down")); setServicesStatusMessage(); - pendingJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobType.PENDING_JOB); + pendingJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobStatus.PENDING_JOB); pendingJobsPanel.setSize(pendingScrollPane.getSize()); pendingScrollPane.add(pendingJobsPanel); pendingScrollPane.setViewportView(pendingJobsPanel); @@ -111,8 +109,8 @@ final class AutoIngestDashboard extends JPanel implements Observer { this.deprioritizeJobButton.setEnabled(enableDeprioritizeButtons); this.deprioritizeCaseButton.setEnabled(enableDeprioritizeButtons); }); - pendingJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_pendingTable.toolTipText()); - runningJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobType.RUNNING_JOB); + pendingJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_pendingTable_toolTipText()); + runningJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobStatus.RUNNING_JOB); runningJobsPanel.setSize(runningScrollPane.getSize()); runningScrollPane.add(runningJobsPanel); runningScrollPane.setViewportView(runningJobsPanel); @@ -123,8 +121,8 @@ final class AutoIngestDashboard extends JPanel implements Observer { this.deprioritizeJobButton.setEnabled(enabled); this.deprioritizeCaseButton.setEnabled(enabled); }); - runningJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_runningTable.toolTipText()); - completedJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobType.COMPLETED_JOB); + runningJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_runningTable_toolTipText()); + completedJobsPanel = new AutoIngestJobsPanel(AutoIngestJobsNode.AutoIngestJobStatus.COMPLETED_JOB); completedJobsPanel.setSize(completedScrollPane.getSize()); completedScrollPane.add(completedJobsPanel); completedScrollPane.setViewportView(completedJobsPanel); @@ -135,7 +133,7 @@ final class AutoIngestDashboard extends JPanel implements Observer { this.deprioritizeJobButton.setEnabled(enabled); this.deprioritizeCaseButton.setEnabled(enabled); }); - completedJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_completedTable.toolTipText()); + completedJobsPanel.setToolTipText(Bundle.AutoIngestDashboard_completedTable_toolTipText()); /* * Must set this flag, otherwise pop up menus don't close properly. */ @@ -143,6 +141,14 @@ final class AutoIngestDashboard extends JPanel implements Observer { UIManager.put("PopupMenu.consumeEventOnClose", false); } + AutoIngestMonitor getMonitor() { + return autoIngestMonitor; + } + + AutoIngestJobsPanel getPendingJobsPanel() { + return pendingJobsPanel; + } + /** * Update status of the services on the dashboard */ @@ -253,7 +259,9 @@ final class AutoIngestDashboard extends JPanel implements Observer { @Override public void update(Observable observable, Object arg) { - EventQueue.invokeLater(new RefreshComponentsTask((JobsSnapshot) arg)); + EventQueue.invokeLater(() -> { + refreshTables(); + }); } /** @@ -262,10 +270,10 @@ final class AutoIngestDashboard extends JPanel implements Observer { * * @param jobsSnapshot The jobs snapshot. */ - private void refreshTables(JobsSnapshot jobsSnapshot) { - pendingJobsPanel.refresh(jobsSnapshot); - runningJobsPanel.refresh(jobsSnapshot); - completedJobsPanel.refresh(jobsSnapshot); + private void refreshTables() { + pendingJobsPanel.refresh(autoIngestMonitor); + runningJobsPanel.refresh(autoIngestMonitor); + completedJobsPanel.refresh(autoIngestMonitor); } /** @@ -473,46 +481,13 @@ final class AutoIngestDashboard extends JPanel implements Observer { */ private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - JobsSnapshot jobsSnapshot = autoIngestMonitor.refreshJobsSnapshot(); - refreshTables(jobsSnapshot); + refreshTables(); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); }//GEN-LAST:event_refreshButtonActionPerformed - @Messages({"AutoIngestDashboard.errorMessage.jobPrioritization=Failed to prioritize job \"%s\"."}) - private void prioritizeJobButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prioritizeJobButtonActionPerformed - AutoIngestJob job = pendingJobsPanel.getSelectedAutoIngestJob(); - if (job != null) { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - JobsSnapshot jobsSnapshot; - try { - jobsSnapshot = autoIngestMonitor.prioritizeJob(job); - refreshTables(jobsSnapshot); - } catch (AutoIngestMonitor.AutoIngestMonitorException ex) { - String errorMessage = String.format(Bundle.AutoIngestDashboard_errorMessage_jobPrioritization(), job.getManifest().getFilePath()); - LOGGER.log(Level.SEVERE, errorMessage, ex); - MessageNotifyUtil.Message.error(errorMessage); - } - setCursor(Cursor.getDefaultCursor()); - } - }//GEN-LAST:event_prioritizeJobButtonActionPerformed - @Messages({"AutoIngestDashboard.errorMessage.casePrioritization=Failed to prioritize case \"%s\"."}) private void prioritizeCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prioritizeCaseButtonActionPerformed - AutoIngestJob job = pendingJobsPanel.getSelectedAutoIngestJob(); - if (job != null) { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - String caseName = job.getManifest().getCaseName(); - JobsSnapshot jobsSnapshot; - try { - jobsSnapshot = autoIngestMonitor.prioritizeCase(caseName); - refreshTables(jobsSnapshot); - } catch (AutoIngestMonitor.AutoIngestMonitorException ex) { - String errorMessage = String.format(Bundle.AutoIngestDashboard_errorMessage_casePrioritization(), caseName); - LOGGER.log(Level.SEVERE, errorMessage, ex); - MessageNotifyUtil.Message.error(errorMessage); - } - setCursor(Cursor.getDefaultCursor()); - } + new PrioritizationAction.PrioritizeCaseAction(pendingJobsPanel.getSelectedAutoIngestJob()).actionPerformed(evt); }//GEN-LAST:event_prioritizeCaseButtonActionPerformed private void clusterMetricsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clusterMetricsButtonActionPerformed @@ -521,41 +496,19 @@ final class AutoIngestDashboard extends JPanel implements Observer { @Messages({"AutoIngestDashboard.errorMessage.jobDeprioritization=Failed to deprioritize job \"%s\"."}) private void deprioritizeJobButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deprioritizeJobButtonActionPerformed - AutoIngestJob job = pendingJobsPanel.getSelectedAutoIngestJob(); - if (job != null) { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - JobsSnapshot jobsSnapshot; - try { - jobsSnapshot = autoIngestMonitor.deprioritizeJob(job); - refreshTables(jobsSnapshot); - } catch (AutoIngestMonitor.AutoIngestMonitorException ex) { - String errorMessage = String.format(Bundle.AutoIngestDashboard_errorMessage_jobDeprioritization(), job.getManifest().getFilePath()); - LOGGER.log(Level.SEVERE, errorMessage, ex); - MessageNotifyUtil.Message.error(errorMessage); - } - setCursor(Cursor.getDefaultCursor()); - } + new PrioritizationAction.DeprioritizeJobAction(pendingJobsPanel.getSelectedAutoIngestJob()).actionPerformed(evt); }//GEN-LAST:event_deprioritizeJobButtonActionPerformed @Messages({"AutoIngestDashboard.errorMessage.caseDeprioritization=Failed to deprioritize case \"%s\"."}) private void deprioritizeCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deprioritizeCaseButtonActionPerformed - AutoIngestJob job = pendingJobsPanel.getSelectedAutoIngestJob(); - if (job != null) { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - String caseName = job.getManifest().getCaseName(); - JobsSnapshot jobsSnapshot; - try { - jobsSnapshot = autoIngestMonitor.deprioritizeCase(caseName); - refreshTables(jobsSnapshot); - } catch (AutoIngestMonitor.AutoIngestMonitorException ex) { - String errorMessage = String.format(Bundle.AutoIngestDashboard_errorMessage_caseDeprioritization(), caseName); - LOGGER.log(Level.SEVERE, errorMessage, ex); - MessageNotifyUtil.Message.error(errorMessage); - } - setCursor(Cursor.getDefaultCursor()); - } + new PrioritizationAction.DeprioritizeCaseAction(pendingJobsPanel.getSelectedAutoIngestJob()).actionPerformed(evt); }//GEN-LAST:event_deprioritizeCaseButtonActionPerformed + @Messages({"AutoIngestDashboard.errorMessage.jobPrioritization=Failed to prioritize job \"%s\"."}) + private void prioritizeJobButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prioritizeJobButtonActionPerformed + new PrioritizationAction.PrioritizeJobAction(pendingJobsPanel.getSelectedAutoIngestJob()).actionPerformed(evt); + }//GEN-LAST:event_prioritizeJobButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton clusterMetricsButton; private javax.swing.JScrollPane completedScrollPane; @@ -573,29 +526,4 @@ final class AutoIngestDashboard extends JPanel implements Observer { private javax.swing.JScrollPane runningScrollPane; private javax.swing.JTextField tbServicesStatusMessage; // End of variables declaration//GEN-END:variables - /** - * A task that refreshes the UI components on this panel to reflect a - * snapshot of the pending, running and completed auto ingest jobs lists of - * an auto ingest cluster. - */ - private class RefreshComponentsTask implements Runnable { - - private final JobsSnapshot jobsSnapshot; - - /** - * Constructs a task that refreshes the UI components on this panel to - * reflect a snapshot of the pending, running and completed auto ingest - * jobs lists of an auto ingest cluster. - * - * @param jobsSnapshot The jobs snapshot. - */ - RefreshComponentsTask(JobsSnapshot jobsSnapshot) { - this.jobsSnapshot = jobsSnapshot; - } - - @Override - public void run() { - refreshTables(jobsSnapshot); - } - } } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboardTopComponent.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboardTopComponent.java index 83bad29a99..54c7848b4f 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboardTopComponent.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDashboardTopComponent.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.experimental.autoingest; +import java.awt.Component; import java.util.List; import java.util.logging.Level; import java.util.stream.Collectors; @@ -74,7 +75,7 @@ public final class AutoIngestDashboardTopComponent extends TopComponent { AutoIngestDashboard dashboard = AutoIngestDashboard.createDashboard(); tc.add(dashboard); dashboard.setSize(dashboard.getPreferredSize()); - + tc.open(); } tc.toFront(); @@ -104,6 +105,24 @@ public final class AutoIngestDashboardTopComponent extends TopComponent { setName(Bundle.CTL_AutoIngestDashboardTopComponent()); } + AutoIngestMonitor getAutoIngestMonitor() { + for (Component comp : getComponents()) { + if (comp instanceof AutoIngestDashboard) { + return ((AutoIngestDashboard) comp).getMonitor(); + } + } + return null; + } + + AutoIngestJobsPanel getPendingJobsPanel() { + for (Component comp : getComponents()) { + if (comp instanceof AutoIngestDashboard) { + return ((AutoIngestDashboard) comp).getPendingJobsPanel(); + } + } + return null; + } + @Override public List availableModes(List modes) { /* diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsNode.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsNode.java index c71f0dcd55..cf6e4c7f29 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsNode.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsNode.java @@ -18,6 +18,11 @@ */ package org.sleuthkit.autopsy.experimental.autoingest; +import java.awt.Cursor; +import java.awt.EventQueue; +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import javax.swing.Action; import java.time.Instant; import java.util.ArrayList; import java.util.Date; @@ -28,8 +33,9 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; import org.openide.util.NbBundle.Messages; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.datamodel.NodeProperty; -import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestMonitor.JobsSnapshot; import org.sleuthkit.autopsy.guiutils.DurationCellRenderer; import org.sleuthkit.autopsy.guiutils.StatusIconCellRenderer; @@ -54,8 +60,8 @@ final class AutoIngestJobsNode extends AbstractNode { /** * Construct a new AutoIngestJobsNode. */ - AutoIngestJobsNode(JobsSnapshot snapshot, AutoIngestJobStatus status) { - super(Children.create(new AutoIngestNodeChildren(snapshot, status), false)); + AutoIngestJobsNode(AutoIngestMonitor autoIngestMonitor, AutoIngestJobStatus status) { + super(Children.create(new AutoIngestNodeChildren(autoIngestMonitor, status), false)); } /** @@ -64,7 +70,7 @@ final class AutoIngestJobsNode extends AbstractNode { static class AutoIngestNodeChildren extends ChildFactory { private final AutoIngestJobStatus autoIngestJobStatus; - private final JobsSnapshot jobsSnapshot; + private final AutoIngestMonitor autoIngestMonitor; /** * Create children nodes for the AutoIngestJobsNode which will each @@ -73,8 +79,8 @@ final class AutoIngestJobsNode extends AbstractNode { * @param snapshot the snapshot which contains the AutoIngestJobs * @param status the status of the jobs being displayed */ - AutoIngestNodeChildren(JobsSnapshot snapshot, AutoIngestJobStatus status) { - jobsSnapshot = snapshot; + AutoIngestNodeChildren(AutoIngestMonitor monitor, AutoIngestJobStatus status) { + autoIngestMonitor = monitor; autoIngestJobStatus = status; } @@ -83,13 +89,13 @@ final class AutoIngestJobsNode extends AbstractNode { List jobs; switch (autoIngestJobStatus) { case PENDING_JOB: - jobs = jobsSnapshot.getPendingJobs(); + jobs = autoIngestMonitor.refreshJobsSnapshot().getPendingJobs(); break; case RUNNING_JOB: - jobs = jobsSnapshot.getRunningJobs(); + jobs = autoIngestMonitor.refreshJobsSnapshot().getRunningJobs(); break; case COMPLETED_JOB: - jobs = jobsSnapshot.getCompletedJobs(); + jobs = autoIngestMonitor.refreshJobsSnapshot().getCompletedJobs(); break; default: jobs = new ArrayList<>(); @@ -180,6 +186,29 @@ final class AutoIngestJobsNode extends AbstractNode { } return s; } + + @Override + public Action[] getActions(boolean context) { + List actions = new ArrayList<>(); + switch (jobStatus) { + case PENDING_JOB: + actions.add(new PrioritizationAction.PrioritizeJobAction(autoIngestJob)); + actions.add(new PrioritizationAction.PrioritizeCaseAction(autoIngestJob)); + PrioritizationAction.DeprioritizeJobAction deprioritizeJobAction = new PrioritizationAction.DeprioritizeJobAction(autoIngestJob); + deprioritizeJobAction.setEnabled(autoIngestJob.getPriority() > 0); + actions.add(deprioritizeJobAction); + PrioritizationAction.DeprioritizeCaseAction deprioritizeCaseAction = new PrioritizationAction.DeprioritizeCaseAction(autoIngestJob); + deprioritizeCaseAction.setEnabled(autoIngestJob.getPriority() > 0); + actions.add(deprioritizeCaseAction); + break; + case RUNNING_JOB: + break; + case COMPLETED_JOB: + break; + default: + } + return actions.toArray(new Action[actions.size()]); + } } /** diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsPanel.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsPanel.java index 40c306ddd2..ecb829c288 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsPanel.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestJobsPanel.java @@ -129,11 +129,11 @@ final class AutoIngestJobsPanel extends javax.swing.JPanel implements ExplorerMa * @param jobsSnapshot - the JobsSnapshot which will provide the new * contents */ - void refresh(AutoIngestMonitor.JobsSnapshot jobsSnapshot) { + void refresh(AutoIngestMonitor autoIngestMonitor) { synchronized (this) { outline.setRowSelectionAllowed(false); Node[] selectedNodes = explorerManager.getSelectedNodes(); - AutoIngestJobsNode autoIngestNode = new AutoIngestJobsNode(jobsSnapshot, status); + AutoIngestJobsNode autoIngestNode = new AutoIngestJobsNode(autoIngestMonitor, status); explorerManager.setRootContext(autoIngestNode); outline.setRowSelectionAllowed(true); if (selectedNodes.length > 0) { diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/PrioritizationAction.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/PrioritizationAction.java new file mode 100644 index 0000000000..ce6e03071e --- /dev/null +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/PrioritizationAction.java @@ -0,0 +1,162 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.experimental.autoingest; + +import java.awt.Cursor; +import java.awt.EventQueue; +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; + +abstract class PrioritizationAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + private final AutoIngestJob job; + + PrioritizationAction(AutoIngestJob selectedJob, String title) { + super(title); + job = selectedJob; + } + + protected abstract void modifyPriority(AutoIngestMonitor monitor, AutoIngestJobsPanel panel) throws AutoIngestMonitor.AutoIngestMonitorException; + + protected abstract String getErrorMessage(); + + protected AutoIngestJob getJob() { + return job; + } + + @Override + public void actionPerformed(ActionEvent e) { + if (job != null) { + final AutoIngestDashboardTopComponent tc = (AutoIngestDashboardTopComponent) WindowManager.getDefault().findTopComponent(AutoIngestDashboardTopComponent.PREFERRED_ID); + if (tc != null) { + tc.getPendingJobsPanel().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + EventQueue.invokeLater(() -> { + try { + AutoIngestMonitor monitor = tc.getAutoIngestMonitor(); + AutoIngestJobsPanel pendingPanel = tc.getPendingJobsPanel(); + if (monitor != null && pendingPanel != null) { + modifyPriority(monitor, pendingPanel); + } + } catch (AutoIngestMonitor.AutoIngestMonitorException ex) { + String errorMessage = getErrorMessage(); + // LOGGER.log(Level.SEVERE, errorMessage, ex); + MessageNotifyUtil.Message.error(errorMessage); + } finally { + tc.getPendingJobsPanel().setCursor(Cursor.getDefaultCursor()); + } + }); + } + } + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + + static final class PrioritizeJobAction extends PrioritizationAction { + + private static final long serialVersionUID = 1L; + + PrioritizeJobAction(AutoIngestJob selectedJob) { + super(selectedJob, "Prioritize Job"); + } + + @Override + protected void modifyPriority(AutoIngestMonitor monitor, AutoIngestJobsPanel panel) throws AutoIngestMonitor.AutoIngestMonitorException { + monitor.prioritizeJob(getJob()); + panel.refresh(monitor); + } + + @Override + protected String getErrorMessage() { + return String.format(Bundle.AutoIngestDashboard_errorMessage_jobPrioritization(), getJob().getManifest().getFilePath()); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + } + + static final class DeprioritizeJobAction extends PrioritizationAction { + + private static final long serialVersionUID = 1L; + + DeprioritizeJobAction(AutoIngestJob selectedJob) { + super(selectedJob, "Deprioritize Job"); + } + + @Override + protected void modifyPriority(AutoIngestMonitor monitor, AutoIngestJobsPanel panel) throws AutoIngestMonitor.AutoIngestMonitorException { + monitor.deprioritizeJob(getJob()); + panel.refresh(monitor); + } + + @Override + protected String getErrorMessage() { + return String.format(Bundle.AutoIngestDashboard_errorMessage_jobDeprioritization(), getJob().getManifest().getFilePath()); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + } + + static final class PrioritizeCaseAction extends PrioritizationAction { + + private static final long serialVersionUID = 1L; + + PrioritizeCaseAction(AutoIngestJob selectedJob) { + super(selectedJob, "Prioritize Case"); + } + + @Override + protected void modifyPriority(AutoIngestMonitor monitor, AutoIngestJobsPanel panel) throws AutoIngestMonitor.AutoIngestMonitorException { + monitor.prioritizeCase(getJob().getManifest().getCaseName()); + panel.refresh(monitor); + } + + @Override + protected String getErrorMessage() { + return String.format(Bundle.AutoIngestDashboard_errorMessage_casePrioritization(), getJob().getManifest().getCaseName()); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + } + + static final class DeprioritizeCaseAction extends PrioritizationAction { + + private static final long serialVersionUID = 1L; + + DeprioritizeCaseAction(AutoIngestJob selectedJob) { + super(selectedJob, "Deprioritize Case"); + } + + @Override + protected void modifyPriority(AutoIngestMonitor monitor, AutoIngestJobsPanel panel) throws AutoIngestMonitor.AutoIngestMonitorException { + monitor.deprioritizeCase(getJob().getManifest().getCaseName()); + panel.refresh(monitor); + } + + @Override + protected String getErrorMessage() { + return String.format(Bundle.AutoIngestDashboard_errorMessage_caseDeprioritization(), getJob().getManifest().getCaseName()); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + } +}