package ch.retorte.intervalmusiccompositor.cache;
import java.util.ArrayList;
import ch.retorte.intervalmusiccompositor.audiofile.IAudioFile;
import ch.retorte.intervalmusiccompositor.messagebus.DebugMessage;
import ch.retorte.intervalmusiccompositor.spi.TaskFinishListener;
import ch.retorte.intervalmusiccompositor.spi.messagebus.MessageProducer;
/**
* Representation of a job for creating an audio files raw data cache.
*
* @author nw
*/
public class CreateCacheJob implements Runnable {
private IAudioFile audioFile;
private ArrayList<TaskFinishListener> listeners = new ArrayList<>();
private MessageProducer messageProducer;
public CreateCacheJob(IAudioFile audioFile, MessageProducer messageProducer) {
this.audioFile = audioFile;
this.messageProducer = messageProducer;
}
void addListener(TaskFinishListener l) {
listeners.add(l);
}
private void notifyListeners() {
listeners.forEach(TaskFinishListener::onTaskFinished);
}
public IAudioFile getAudioFile() {
return audioFile;
}
@Override
public void run() {
try {
audioFile.createCache();
}
catch (Exception e) {
addDebugMessage(e.getMessage());
}
finally {
notifyListeners();
}
this.audioFile = null;
}
private void addDebugMessage(String message) {
messageProducer.send(new DebugMessage(this, message));
}
@Override
public String toString() {
return "Cache job for " + audioFile;
}
}