/* ScanSignalWorker.java created 2008-01-30 * */ package org.signalml.app.worker.signal; import java.util.List; import javax.swing.SwingWorker; import org.apache.log4j.Logger; import org.signalml.app.view.common.dialogs.PleaseWaitDialog; import org.signalml.app.view.signal.SignalScanResult; import org.signalml.domain.signal.SignalScanner; import org.signalml.domain.signal.SignalWriterMonitor; import org.signalml.domain.signal.samplesource.MultichannelSampleSource; /** ScanSignalWorker * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class ScanSignalWorker extends SwingWorker<SignalScanResult,Integer> implements SignalWriterMonitor { protected static final Logger logger = Logger.getLogger(ScanSignalWorker.class); private MultichannelSampleSource sampleSource; private PleaseWaitDialog pleaseWaitDialog; private volatile boolean requestingAbort; private volatile int processedSampleCount; public ScanSignalWorker(MultichannelSampleSource sampleSource, PleaseWaitDialog pleaseWaitDialog) { this.sampleSource = sampleSource; this.pleaseWaitDialog = pleaseWaitDialog; } @Override protected SignalScanResult doInBackground() throws Exception { SignalScanner signalScanner = new SignalScanner(); return signalScanner.scanSignal(sampleSource, this); } public int getProcessedSampleCount() { return processedSampleCount; } @Override public void setProcessedSampleCount(int processedSampleCount) { if (this.processedSampleCount != processedSampleCount) { this.processedSampleCount = processedSampleCount; publish(processedSampleCount); } } public PleaseWaitDialog getPleaseWaitDialog() { synchronized (pleaseWaitDialog) { return pleaseWaitDialog; } } @Override protected void done() { if (pleaseWaitDialog != null) { pleaseWaitDialog.releaseIfOwnedBy(this); } } @Override protected void process(List<Integer> chunks) { if (pleaseWaitDialog != null && !chunks.isEmpty()) { synchronized (pleaseWaitDialog) { pleaseWaitDialog.setProgress((int) chunks.get(0)); } } } @Override public void abort() { synchronized (this) { requestingAbort = true; } } @Override public boolean isRequestingAbort() { return requestingAbort; } }