All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.lakis.cerebro.jobs.prosumer.Prosumer Maven / Gradle / Ivy

package net.lakis.cerebro.jobs.prosumer;

import java.util.Collection;

import org.apache.commons.lang.StringUtils;

import lombok.Getter;
import lombok.Setter;
import net.lakis.cerebro.jobs.Worker;
import net.lakis.cerebro.jobs.prosumer.consumer.Consumer;
import net.lakis.cerebro.jobs.prosumer.poller.Poller;
import net.lakis.cerebro.jobs.prosumer.producer.Producer;
 
@Getter
@Setter
@SuppressWarnings("rawtypes")
public class Prosumer {
	private Producer producer;
	private Poller poller;
	private Consumer consumer;
	private ConsumerWorker[] workers;

	private String workersName;
	private int workersCount = 1;
	private int bulkCount = 1;

	public Prosumer(Producer producer, Poller poller, Consumer consumer) {
		this.producer = producer;
		this.poller = poller;
		this.consumer = consumer;
	}

	public Prosumer(Poller poller, Consumer consumer) {
		this(null, poller, consumer);
	}

	public boolean startWorkers() {
		try {
			return startWorkers(0);
		} catch (InterruptedException e) {
			return false; // won't reach this
		}
	}

	public boolean startWorkers(int sleep) throws InterruptedException {
		if (workers != null) {
			boolean ret = false;
			for (Worker worker : workers) {
				if (worker.start()) {
					ret = true;
				}
			}
			return ret;
		}

//		if (StringUtils.isBlank(workersName))
//			workersName = "Prosumer-" + System.currentTimeMillis();
		workers = new ConsumerWorker[workersCount];
		for (int i = 0; i < workers.length; i++) {
			ConsumerWorker w = new ConsumerWorker(StringUtils.isBlank(workersName) ? null : workersName + "-" + i, //
					poller, consumer, bulkCount);

			if (workersCount > 0 && sleep > 0) {
				Thread.sleep(sleep);
			}
			w.start();
			workers[i] = w;
		}
		return true;
	}

	public boolean stopWorkers() {
		if (workers == null)
			return false;
		for (int i = 0; i < workers.length; i++) {
			workers[i].stop();
		}
		workers = null;
		return true;
	}

	public boolean isRunning() {
		if (workers != null) {
			for (Worker worker : workers) {
				if (worker.isRunning()) {
					return true;
				}
			}
		}
		return false;
	}

	public boolean handle(T[] objects) {
		if (producer == null)
			return false;
		producer.handle(objects);
		return true;

	}

	public boolean handle(Collection objects) {
		if (producer == null)
			return false;
		producer.handle(objects);
		return true;
	}

	public boolean handle(T object) {
		if (producer == null)
			return false;
		producer.handle(object);
		return true;
	}

	public boolean handleIfRunning(T[] objects) {
		if (producer == null && !this.isRunning())
			return false;

		producer.handle(objects);
		return true;
	}

	public boolean handleIfRunning(Collection objects) {
		if (producer == null && !this.isRunning())
			return false;

		producer.handle(objects);
		return true;

	}

	public boolean handleIfRunning(T object) {
		if (producer == null && !this.isRunning())
			return false;

		producer.handle(object);
		return true;
	}

	public int pendingJobs() {
		if (producer != null)
			return producer.pendingJobs();
		return 0;
	}
	
	public int activeWorkers() {
		int  i= 0;
		for(ConsumerWorker worker : workers) {
			if(worker.isWorking())
				i++;
		}
		return i;
	}

	public void clear() {
		if (poller != null)
			poller.clear();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy