package org.signalml.plugin.newstager.logic.book;
import org.apache.log4j.Logger;
import org.signalml.plugin.newstager.data.NewStagerBookInfo;
import org.signalml.plugin.newstager.data.book.NewStagerBookSample;
import org.signalml.plugin.newstager.data.book.NewStagerSingleBookProcessorData;
import org.signalml.plugin.newstager.data.logic.NewStagerBookProcessorWorkerData;
import org.signalml.plugin.newstager.data.tag.NewStagerBookProcessorData;
public class NewStagerBookProcessorWorker implements Runnable {
protected static final Logger logger = Logger
.getLogger(NewStagerBookProcessorWorker.class);
private final NewStagerBookProcessorWorkerData data;
public NewStagerBookProcessorWorker(NewStagerBookProcessorWorkerData data) {
this.data = data;
}
@Override
public void run() {
final NewStagerBookDataProvider provider = this.data.provider;
NewStagerBookSample sample;
try {
NewStagerBookInfo bookInfo = provider.getBookInfo();
if (bookInfo == null) {
this.data.completion.completeWork(null);
return;
}
NewStagerSingleBookProcessor processor = new NewStagerSingleBookProcessor(
new NewStagerBookProcessorData(this.data.constants,
this.data.channelMap,
this.data.parameters, this.data.fixedParameters,
this.data.muscle, this.data.signalStatCoeffs,
bookInfo));
while (true) {
sample = provider.getNextBookAtoms();
if (sample == null) {
break;
}
processor.process(new NewStagerSingleBookProcessorData(sample));
this.data.completion.signalProgress(1);
}
this.data.completion.completeWork(processor.getResult());
} catch (InterruptedException e) {
logger.warn("Worker thread interrupted", e);
return;
}
}
}