package io.robe.admin.quartz;
import io.robe.admin.dto.JobInfoDTO;
import io.robe.admin.hibernate.entity.HJobInfo;
import io.robe.admin.hibernate.entity.HTriggerInfo;
import io.robe.hibernate.RobeHibernateBundle;
import io.robe.quartz.RobeJob;
import io.robe.quartz.info.JobInfo;
import io.robe.quartz.info.JobInfoProvider;
import io.robe.quartz.info.TriggerInfo;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import java.util.List;
public class HibernateJobInfoProvider extends JobInfoProvider {
@Override
public JobInfo getJob(Class<? extends org.quartz.Job> clazz) {
RobeJob infoAnn = clazz.getDeclaredAnnotation(RobeJob.class);
if (infoAnn == null)
return null;
Session session = RobeHibernateBundle.getInstance().getSessionFactory().openSession();
HJobInfo quartzHJobInfo = (HJobInfo) session.createCriteria(HJobInfo.class).add(Restrictions.eq("jobClass", clazz)).uniqueResult();
if (quartzHJobInfo == null) {
JobInfoDTO info = new JobInfoDTO();
info.setName(infoAnn.name());
info.setDescription(infoAnn.description());
info.setProvider(infoAnn.provider());
info.setJobClass(clazz);
info.setGroup(infoAnn.group());
return info;
}
List<TriggerInfo> triggerEntities = session.createCriteria(HTriggerInfo.class).add(Restrictions.eq("jobOid", quartzHJobInfo.getOid())).list();
session.close();
JobInfoDTO dto = new JobInfoDTO(quartzHJobInfo);
dto.setTriggers(triggerEntities);
//TODO: This code will be active later.
// Iterator<TriggerInfo> iterator = triggerEntities.iterator();
// while (iterator.hasNext()) {
// TriggerInfo info = iterator.next();
// if (info instanceof HTriggerInfo) {
// HTriggerInfo hibernateTriggerInfoEntity = (HTriggerInfo) info;
// if (hibernateTriggerInfoEntity.getType().equals(TriggerInfo.Type.CRON)) {
// if (false) {
// iterator.remove();
// }
// }
// }
// }
return dto;
}
}