package com.vip.saturn.job.sharding.listener;
import com.vip.saturn.job.sharding.node.SaturnExecutorsNode;
import com.vip.saturn.job.sharding.service.AddJobListenersService;
import org.apache.commons.lang3.StringUtils;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author chembo.huang
*
*/
public class AddOrRemoveJobListener extends AbstractTreeCacheListener {
static Logger log = LoggerFactory.getLogger(AddOrRemoveJobListener.class);
private AddJobListenersService addJobListenersService;
public AddOrRemoveJobListener(AddJobListenersService addJobListenersService) {
this.addJobListenersService = addJobListenersService;
}
@Override
public void childEvent(Type type, String path, String nodeData) throws Exception {
try {
String job = StringUtils.substringAfterLast(path, "/");
if (!SaturnExecutorsNode.$JOBS.equals(job)) {
if (isAddJob(type)) {
log.info("job: {} created", job);
addJobListenersService.addJobPathListener(job);
} else if (isRemoveJob(type)) {
log.info("job: {} removed", job);
addJobListenersService.removeJobPathTreeCache(job);
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw e;
}
}
private boolean isAddJob(TreeCacheEvent.Type type) {
return type == TreeCacheEvent.Type.NODE_ADDED ;
}
private boolean isRemoveJob(TreeCacheEvent.Type type) {
return type == TreeCacheEvent.Type.NODE_REMOVED ;
}
}