package com.github.ltsopensource.core.support; import com.github.ltsopensource.biz.logger.domain.JobLogPo; import com.github.ltsopensource.core.commons.utils.CollectionUtils; import com.github.ltsopensource.core.commons.utils.StringUtils; import com.github.ltsopensource.core.constant.Constants; import com.github.ltsopensource.core.domain.Job; import com.github.ltsopensource.core.domain.JobMeta; import com.github.ltsopensource.core.domain.JobRunResult; import com.github.ltsopensource.core.domain.JobType; import com.github.ltsopensource.queue.domain.JobFeedbackPo; import com.github.ltsopensource.queue.domain.JobPo; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; /** * @author Robert HG (254963746@qq.com) on 8/18/14. */ public class JobDomainConverter { private JobDomainConverter() { } public static JobPo convert(Job job) { JobPo jobPo = new JobPo(); jobPo.setPriority(job.getPriority()); jobPo.setTaskId(job.getTaskId()); jobPo.setRealTaskId(jobPo.getTaskId()); jobPo.setRealTaskId(jobPo.getTaskId()); jobPo.setGmtCreated(SystemClock.now()); jobPo.setGmtModified(jobPo.getGmtCreated()); jobPo.setSubmitNodeGroup(job.getSubmitNodeGroup()); jobPo.setTaskTrackerNodeGroup(job.getTaskTrackerNodeGroup()); if (CollectionUtils.isNotEmpty(job.getExtParams())) { Set<String> removeKeySet = null; for (Map.Entry<String, String> entry : job.getExtParams().entrySet()) { String key = entry.getKey(); if (key.startsWith("__LTS_")) { jobPo.setInternalExtParam(key, entry.getValue()); removeKeySet = CollectionUtils.newHashSetOnNull(removeKeySet); removeKeySet.add(key); } } if (removeKeySet != null) { for (String key : removeKeySet) { job.getExtParams().remove(key); } } } // 设置JobType if (job.isCron()) { jobPo.setJobType(JobType.CRON); jobPo.setCronExpression(job.getCronExpression()); } else if (job.isRepeatable()) { jobPo.setCronExpression(null); jobPo.setRepeatInterval(job.getRepeatInterval()); jobPo.setJobType(JobType.REPEAT); } else if (job.getTriggerTime() == null) { jobPo.setJobType(JobType.REAL_TIME); } else { jobPo.setJobType(JobType.TRIGGER_TIME); } jobPo.setExtParams(job.getExtParams()); jobPo.setNeedFeedback(job.isNeedFeedback()); jobPo.setMaxRetryTimes(job.getMaxRetryTimes()); jobPo.setRelyOnPrevCycle(job.isRelyOnPrevCycle()); jobPo.setRepeatCount(job.getRepeatCount()); if (!jobPo.isCron()) { if (job.getTriggerTime() == null) { jobPo.setTriggerTime(SystemClock.now()); } else { jobPo.setTriggerTime(job.getTriggerTime()); } } if (job.isRepeatable()) { if (jobPo.getTriggerTime() < SystemClock.now()) { jobPo.setTriggerTime(SystemClock.now()); } jobPo.setInternalExtParam(Constants.FIRST_FIRE_TIME, String.valueOf(jobPo.getTriggerTime())); } return jobPo; } /** * JobPo 转 Job */ public static JobMeta convert(JobPo jobPo) { Job job = new Job(); job.setPriority(jobPo.getPriority()); job.setExtParams(jobPo.getExtParams()); job.setSubmitNodeGroup(jobPo.getSubmitNodeGroup()); job.setTaskId(jobPo.getTaskId()); job.setTaskTrackerNodeGroup(jobPo.getTaskTrackerNodeGroup()); job.setNeedFeedback(jobPo.isNeedFeedback()); job.setCronExpression(jobPo.getCronExpression()); job.setTriggerTime(jobPo.getTriggerTime()); job.setMaxRetryTimes(jobPo.getMaxRetryTimes() == null ? 0 : jobPo.getMaxRetryTimes()); job.setRelyOnPrevCycle(jobPo.getRelyOnPrevCycle() == null ? true : jobPo.getRelyOnPrevCycle()); job.setRepeatCount(jobPo.getRepeatCount()); job.setRepeatInterval(jobPo.getRepeatInterval()); JobMeta jobMeta = new JobMeta(); jobMeta.setJobId(jobPo.getJobId()); jobMeta.setJob(job); jobMeta.setRealTaskId(jobPo.getRealTaskId()); jobMeta.setInternalExtParams(jobPo.getInternalExtParams()); jobMeta.setRetryTimes(jobPo.getRetryTimes() == null ? 0 : jobPo.getRetryTimes()); jobMeta.setRepeatedCount(jobPo.getRepeatedCount()); jobMeta.setJobType(jobPo.getJobType()); return jobMeta; } public static List<JobMeta> convert(List<JobPo> jobPos) { List<JobMeta> jobMetaList = new ArrayList<JobMeta>(jobPos.size()); for (JobPo jobPo : jobPos) { jobMetaList.add(convert(jobPo)); } return jobMetaList; } public static JobLogPo convertJobLog(JobMeta jobMeta) { JobLogPo jobLogPo = new JobLogPo(); jobLogPo.setGmtCreated(SystemClock.now()); Job job = jobMeta.getJob(); jobLogPo.setPriority(job.getPriority()); jobLogPo.setExtParams(job.getExtParams()); jobLogPo.setInternalExtParams(jobMeta.getInternalExtParams()); jobLogPo.setSubmitNodeGroup(job.getSubmitNodeGroup()); jobLogPo.setTaskId(job.getTaskId()); jobLogPo.setJobType(jobMeta.getJobType()); jobLogPo.setRealTaskId(jobMeta.getRealTaskId()); jobLogPo.setTaskTrackerNodeGroup(job.getTaskTrackerNodeGroup()); jobLogPo.setNeedFeedback(job.isNeedFeedback()); jobLogPo.setRetryTimes(jobMeta.getRetryTimes()); jobLogPo.setMaxRetryTimes(job.getMaxRetryTimes()); jobLogPo.setDepPreCycle(jobMeta.getJob().isRelyOnPrevCycle()); jobLogPo.setJobId(jobMeta.getJobId()); jobLogPo.setCronExpression(job.getCronExpression()); jobLogPo.setTriggerTime(job.getTriggerTime()); jobLogPo.setRepeatCount(job.getRepeatCount()); jobLogPo.setRepeatedCount(jobMeta.getRepeatedCount()); jobLogPo.setRepeatInterval(job.getRepeatInterval()); return jobLogPo; } public static JobLogPo convertJobLog(JobPo jobPo) { JobLogPo jobLogPo = new JobLogPo(); jobLogPo.setGmtCreated(SystemClock.now()); jobLogPo.setPriority(jobPo.getPriority()); jobLogPo.setJobType(jobPo.getJobType()); jobLogPo.setExtParams(jobPo.getExtParams()); jobLogPo.setInternalExtParams(jobPo.getInternalExtParams()); jobLogPo.setSubmitNodeGroup(jobPo.getSubmitNodeGroup()); jobLogPo.setTaskId(jobPo.getTaskId()); jobLogPo.setRealTaskId(jobPo.getRealTaskId()); jobLogPo.setTaskTrackerNodeGroup(jobPo.getTaskTrackerNodeGroup()); jobLogPo.setNeedFeedback(jobPo.isNeedFeedback()); jobLogPo.setJobId(jobPo.getJobId()); jobLogPo.setCronExpression(jobPo.getCronExpression()); jobLogPo.setTriggerTime(jobPo.getTriggerTime()); jobLogPo.setTaskTrackerIdentity(jobPo.getTaskTrackerIdentity()); jobLogPo.setRetryTimes(jobPo.getRetryTimes()); jobLogPo.setMaxRetryTimes(jobPo.getMaxRetryTimes()); jobLogPo.setDepPreCycle(jobPo.getRelyOnPrevCycle()); jobLogPo.setRepeatCount(jobPo.getRepeatCount()); jobLogPo.setRepeatedCount(jobPo.getRepeatedCount()); jobLogPo.setRepeatInterval(jobPo.getRepeatInterval()); return jobLogPo; } public static JobFeedbackPo convert(JobRunResult result) { JobFeedbackPo jobFeedbackPo = new JobFeedbackPo(); jobFeedbackPo.setJobRunResult(result); jobFeedbackPo.setId(StringUtils.generateUUID()); jobFeedbackPo.setGmtCreated(SystemClock.now()); return jobFeedbackPo; } }