package com.performizeit.plumbing;
/**
* Created by life on 22/8/14.
*/
public class Generator<E> extends Thread {
private final GeneratorHandler<E> generator;
private final Pipe<E, ?> pipe;
public Generator(String name, GeneratorHandler<E> generator, Pipe<E, ?> pipe) {
super(name);
this.generator = generator;
this.pipe = pipe;
this.pipe.registerProducer();
}
@Override
public void run() {
while (!generator.isDone()) {
E data = generator.generate();
if (pipe != null && data != null) {
pipe.send(data);
}
if (generator.isDone()) {
this.pipe.producerDone();
} else {
generator.sleepBetweenIteration();
}
}
}
}