added property change support to IngestManager to notify of service events

This commit is contained in:
adam-m 2012-01-31 13:10:20 -05:00
parent 6810c188f3
commit b13997e752
2 changed files with 48 additions and 7 deletions

View File

@ -94,18 +94,18 @@ public class IngestImageThread extends SwingWorker {
//notify services of completion //notify services of completion
if (!this.isCancelled()) { if (!this.isCancelled()) {
service.complete(); service.complete();
IngestManager.firePropertyChange(IngestManager.SERVICE_COMPLETED_EVT, service.getName(), "");
} }
} catch (CancellationException e) { } catch (CancellationException e) {
//task was cancelled //task was cancelled
service.stop(); handleInterruption();
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
service.stop(); handleInterruption();
} catch (ExecutionException ex) { } catch (ExecutionException ex) {
service.stop(); handleInterruption();
logger.log(Level.SEVERE, "Fatal error during image ingest from sevice: " + service.getName() + " image: " + image.getName(), ex); logger.log(Level.SEVERE, "Fatal error during image ingest from sevice: " + service.getName() + " image: " + image.getName(), ex);
} catch (Exception ex) { } catch (Exception ex) {
service.stop(); handleInterruption();
logger.log(Level.SEVERE, "Fatal error during image ingest in service: " + service.getName() + " image: " + image.getName(), ex); logger.log(Level.SEVERE, "Fatal error during image ingest in service: " + service.getName() + " image: " + image.getName(), ex);
} finally { } finally {
progress.finish(); progress.finish();
@ -114,4 +114,9 @@ public class IngestImageThread extends SwingWorker {
manager.removeImageIngestWorker(this); manager.removeImageIngestWorker(this);
} }
} }
private void handleInterruption() {
service.stop();
IngestManager.firePropertyChange(IngestManager.SERVICE_STOPPED_EVT, service.getName(), "");
}
} }

View File

@ -18,6 +18,8 @@
*/ */
package org.sleuthkit.autopsy.ingest; package org.sleuthkit.autopsy.ingest;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -66,6 +68,16 @@ public class IngestManager {
//services //services
final Collection<IngestServiceImage> imageServices = enumerateImageServices(); final Collection<IngestServiceImage> imageServices = enumerateImageServices();
final Collection<IngestServiceFsContent> fsContentServices = enumerateFsContentServices(); final Collection<IngestServiceFsContent> fsContentServices = enumerateFsContentServices();
//notifications
private final static PropertyChangeSupport pcs = new PropertyChangeSupport(IngestManager.class);
private enum IngestManagerEvents {
SERVICE_STARTED, SERVICE_COMPLETED, SERVICE_STOPPED
};
public final static String SERVICE_STARTED_EVT = IngestManagerEvents.SERVICE_STARTED.name();
public final static String SERVICE_COMPLETED_EVT = IngestManagerEvents.SERVICE_COMPLETED.name();
public final static String SERVICE_STOPPED_EVT = IngestManagerEvents.SERVICE_STOPPED.name();
/** /**
* *
@ -88,6 +100,17 @@ public class IngestManager {
} }
} }
/**
* Add property change listener to listen to ingest events
* @param l PropertyChangeListener to add
*/
public static void addPropertyChangeListener(final PropertyChangeListener l) {
pcs.addPropertyChangeListener(l);
}
static void firePropertyChange(String property, Object oldV, Object newV) {
pcs.firePropertyChange(property, oldV, newV);
}
/** /**
* Multiple image version of execute, enqueues multiple images and associated services at once * Multiple image version of execute, enqueues multiple images and associated services at once
* @param services services to execute on every image * @param services services to execute on every image
@ -156,12 +179,13 @@ public class IngestManager {
//image services are now initialized per instance //image services are now initialized per instance
quService.init(this); quService.init(this);
newImageWorker.execute(); newImageWorker.execute();
firePropertyChange(SERVICE_STARTED_EVT, quService.getName(), "");
} }
} }
} }
} }
//fsContent ingester //fsContent ingester
boolean startFsContentIngester = false; boolean startFsContentIngester = false;
if (hasNextFsContent()) { if (hasNextFsContent()) {
@ -213,7 +237,7 @@ public class IngestManager {
boolean cancelled = imageWorker.cancel(true); boolean cancelled = imageWorker.cancel(true);
if (!cancelled) { if (!cancelled) {
logger.log(Level.WARNING, "Unable to cancel image ingest worker for service: " + imageWorker.getService().getName() + " img: " + imageWorker.getImage().getName()); logger.log(Level.WARNING, "Unable to cancel image ingest worker for service: " + imageWorker.getService().getName() + " img: " + imageWorker.getImage().getName());
} }
} }
} }
@ -685,6 +709,16 @@ public class IngestManager {
logger.log(Level.INFO, "Starting background processing"); logger.log(Level.INFO, "Starting background processing");
stats.start(); stats.start();
//notify main thread services started
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
for (IngestServiceFsContent s : fsContentServices) {
firePropertyChange(SERVICE_STARTED_EVT, s.getName(), "");
}
}
});
progress = ProgressHandleFactory.createHandle("File Ingest", new Cancellable() { progress = ProgressHandleFactory.createHandle("File Ingest", new Cancellable() {
@Override @Override
@ -738,6 +772,7 @@ public class IngestManager {
if (!this.isCancelled()) { if (!this.isCancelled()) {
for (IngestServiceFsContent s : fsContentServices) { for (IngestServiceFsContent s : fsContentServices) {
s.complete(); s.complete();
firePropertyChange(SERVICE_COMPLETED_EVT, s.getName(), "");
} }
} }
@ -769,6 +804,7 @@ public class IngestManager {
private void handleInterruption() { private void handleInterruption() {
for (IngestServiceFsContent s : fsContentServices) { for (IngestServiceFsContent s : fsContentServices) {
s.stop(); s.stop();
firePropertyChange(SERVICE_STOPPED_EVT, s.getName(), "");
} }
//empty queues //empty queues
emptyFsContents(); emptyFsContents();