package com.xiaozhi.blog.quartz;
import java.io.File;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import weibo4j.Timeline;
import weibo4j.http.ImageItem;
import com.xiaozhi.blog.mongo.SinaBlogDao;
import com.xiaozhi.blog.utils.FileUtil;
import com.xiaozhi.blog.vo.SinaAccessToken;
import com.xiaozhi.blog.vo.SinaPost;
@PersistJobDataAfterExecution//保存JobDataMap传递的参数,有状态
@DisallowConcurrentExecution//不允许并发执行,这样可以防止在前一个任务和后一个时间任务并行执行
public class MySinaBlogJob implements Job {
private static Log logger = LogFactory.getLog(MySinaBlogJob.class);
@Override
public void execute(JobExecutionContext cxt) throws JobExecutionException {
SinaPost post = (SinaPost)cxt.getJobDetail().getJobDataMap().get("post");
SinaAccessToken accessToken = (SinaAccessToken)cxt.getJobDetail().getJobDataMap().get("accessToken");//获取accessToken
if(logger.isDebugEnabled())logger.debug("------------------------------->accessToken :"+accessToken.toString());
try {
Timeline timeline = (Timeline)cxt.getScheduler().getContext().get("timeline");
timeline.client.setToken(accessToken.getAccesstoken());
if(post.getFilePath()==null || "".equals(post.getFilePath())){
timeline.UpdateStatus(post.getContent());
}else{
byte[] picbyte = FileUtil.readFileImage(post.getFilePath());
ImageItem imageItem = new ImageItem("pic", picbyte);
timeline.UploadStatus(java.net.URLEncoder.encode(post.getContent(), "utf-8"), imageItem);
}
SinaBlogDao sinaBlogDao = (SinaBlogDao)cxt.getScheduler().getContext().get("sinaBlogDao");
sinaBlogDao.removeSinaPostById(post.getId());
//删除对应的图片
if(post.getFilePath()!=null){
File file = new File(post.getFilePath());
if(file!=null && file.isFile())file.delete();
}
} catch (Exception e) {
logger.error("----------------------->execute error :", e.fillInStackTrace());
}
}
}