package com.hqyg.disjob.graph;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import org.jboss.netty.util.internal.ConcurrentHashMap;
import com.hqyg.disjob.event.BaseCondition;
import com.hqyg.disjob.java.ExecutorBuilder;
import com.hqyg.disjob.java.job.DependEJob;
public abstract class AbstractJobCondition extends BaseCondition<Node<DependEJob>, Set<Node<DependEJob>>> {
protected Scheduler scheduler ;
protected ConcurrentHashMap<Node<DependEJob>,AtomicInteger> messageCountMap = null;
protected int messageTotal = 0;
public AbstractJobCondition(Scheduler schedule,Node<DependEJob> observiable,Set<Node<DependEJob>> v) {
super(observiable, v);
this.scheduler = schedule ;
if(v!=null){
this.messageCountMap = new ConcurrentHashMap<Node<DependEJob>, AtomicInteger>();
this.messageTotal = v.size();
Iterator<Node<DependEJob>> iter = getValue().iterator();
while(iter.hasNext()){
Node<DependEJob> tmp = iter.next();
messageCountMap.put(tmp, new AtomicInteger(0));
}
}
}
@Override
public abstract boolean isFinished() ;
public abstract void increMessageCount(Node<DependEJob> targetJobNode);
@Override
public void handler() {
if(this.isFinished()){
//一次消息消费成功,对每一个前驱节点的消息数减一。
for(AtomicInteger value : messageCountMap.values()){
if(value.get()>=1){
value.decrementAndGet();
}
}
ExecutorBuilder.getExecutor().execute(new JobAction(observiable, scheduler));
}else{
System.out.println(getObserviable().getVal().getKey()+"还没有达到条件:");
}
}
}