package com.aol.micro.server.reactive;
import java.util.concurrent.ScheduledExecutorService;
import com.aol.cyclops2.types.stream.HotStream;
import cyclops.stream.ReactiveSeq;
import lombok.AllArgsConstructor;
import com.aol.micro.server.events.ScheduledJob;
import com.aol.micro.server.events.SystemData;
@AllArgsConstructor
public class JobSchedular {
private final ScheduledExecutorService ex;
public <T,K,V> HotStream<SystemData<K,V>> schedule(String expression, ScheduledJob<T> job){
return ReactiveSeq.generate(()->"new job")
.<SystemData<K,V>>map(drop->job.scheduleAndLog())
.schedule(expression,ex);
}
public <T,K,V> HotStream<SystemData<K,V>> scheduleFixedDelay(long fixedDelay, ScheduledJob<T> job){
return ReactiveSeq.generate(()->"new job")
.<SystemData<K,V>>map(drop->job.scheduleAndLog())
.scheduleFixedDelay(fixedDelay,ex);
}
public <T,K,V> HotStream<SystemData<K,V>> scheduleFixedRate(long fixedRate, ScheduledJob<T> job){
return ReactiveSeq.generate(()->"new job")
.<SystemData<K,V>>map(drop->job.scheduleAndLog())
.scheduleFixedRate(fixedRate,ex);
}
}