package edu.harvard.mcb.leschziner.pipe;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Vector;
import java.util.concurrent.BlockingQueue;
import edu.harvard.mcb.leschziner.core.Particle;
import edu.harvard.mcb.leschziner.core.ParticleGenerator;
import edu.harvard.mcb.leschziner.storage.DefaultStorageEngine;
public class GeneratingPipeTask extends ParticlePipeTask {
private static final long serialVersionUID = 638400970037283314L;
private final Vector<ParticleGenerator> stages;
public GeneratingPipeTask(Particle target,
Vector<ParticleGenerator> stages,
String processedQueueName,
String executorName) {
super(target, processedQueueName, executorName);
this.stages = stages;
}
@Override public void process() {
BlockingQueue<Particle> processedParticles = DefaultStorageEngine.getStorageEngine()
.getQueue(processedQueueName);
Collection<Particle> generated = new LinkedList<Particle>();
generated.add(target);
for (ParticleGenerator stage : stages) {
generated = stage.generate(generated);
}
processedParticles.addAll(generated);
outputCount = generated.size();
}
}