package com.hqyg.disjob.monitor.event;
import com.hqyg.disjob.common.EventType;
import com.hqyg.disjob.common.thread.ExecutorFactory;
import com.hqyg.disjob.event.AbstractEventObject;
import com.hqyg.disjob.event.ObjectEvent;
import com.hqyg.disjob.event.ObjectListener;
import com.hqyg.disjob.quence.Action;
import com.hqyg.disjob.quence.ActionQueue;
import com.hqyg.disjob.quence.BaseActionQueue;
import com.hqyg.disjob.monitor.DBJobBasicInfoOpAction;
import com.hqyg.disjob.monitor.db.domain.DBJobBasicInfo;
public class JobTracker extends AbstractEventObject<DBJobBasicInfo>{
private BaseActionQueue baseActionQueue ;
private String groupName;
private String jobName ;
public JobTracker(String groupName,String jobName) {
this.groupName = groupName;
this.jobName = jobName;
this.baseActionQueue = new BaseActionQueue(ExecutorFactory.getExecutor());
}
public void attachListener() {
this.addCreateDBBasicInfoEvent();
this.addUpdateDBBasicInfoEvent();
}
/**
* 添加调度一个job 时往数据库里添加一个进度信息的事件
*/
private void addCreateDBBasicInfoEvent(){
this.addListener(new ObjectListener<DBJobBasicInfo>() {
@Override
public void onEvent(ObjectEvent<DBJobBasicInfo> event) {
DBJobBasicInfo info = event.getValue();
if(info !=null){
enQueue(new DBJobBasicInfoOpAction(info, DBJobBasicInfoOpAction.BASICINFO_CREATE_OP));
}
}
}, EventType.CREATE_DBBASICINFO);
}
private void addUpdateDBBasicInfoEvent(){
this.addListener(new ObjectListener<DBJobBasicInfo>() {
@Override
public void onEvent(ObjectEvent<DBJobBasicInfo> event) {
DBJobBasicInfo info = event.getValue();
if(info != null){
enQueue(new DBJobBasicInfoOpAction(info, DBJobBasicInfoOpAction.BASICINFO_UPDATE_OP));
}
}
}, EventType.UPDATE_DBBASICINFO);
}
private void enQueue(Action action){
if(action.getActionQueue() ==null){
action.setActionQueue(baseActionQueue);
}
this.baseActionQueue.enqueue(action);
}
public void notifyCreateDBBasicInfoEvent(DBJobBasicInfo info){
ObjectEvent<DBJobBasicInfo> objectEvent = new ObjectEvent<DBJobBasicInfo>(info, EventType.CREATE_DBBASICINFO);
notifyListeners(objectEvent);
}
public void notifyUpdateDBBasicInfoEvent(DBJobBasicInfo info){
ObjectEvent<DBJobBasicInfo> updateEvent = new ObjectEvent<DBJobBasicInfo>(info, EventType.UPDATE_DBBASICINFO);
notifyListeners(updateEvent);
}
public ActionQueue getActionQueue(){
return this.baseActionQueue;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
}