package org.akaza.openclinica.job;
import java.util.HashMap;
import java.util.Map;
import org.akaza.openclinica.bean.extract.ExtractPropertyBean;
import org.akaza.openclinica.bean.login.UserAccountBean;
import org.quartz.JobDataMap;
import org.quartz.SimpleTrigger;
import org.springframework.context.annotation.*;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
import static org.akaza.openclinica.service.extract.XsltTriggerService.*;
@Configuration
public class QuartzConfiguration {
@Bean
@Scope("prototype")
@Lazy
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(String xslFile, String xmlFile, String endFilePath,
String endFile, int datasetId, ExtractPropertyBean epBean, UserAccountBean userAccountBean, String locale,int cnt, String xsltPath){
SimpleTriggerFactoryBean triggerFactoryBean = new SimpleTriggerFactoryBean();
triggerFactoryBean.setBeanName("trigger1");
triggerFactoryBean.setGroup("group1");
triggerFactoryBean.setRepeatInterval(1);
triggerFactoryBean.setRepeatCount(0);
//triggerFactoryBean.setStartTime(startDateTime);
triggerFactoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
// set job data map
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(XSL_FILE_PATH, xslFile);
jobDataMap.put(XML_FILE_PATH, endFilePath);
jobDataMap.put(POST_FILE_PATH, endFilePath);
jobDataMap.put(POST_FILE_NAME, endFile);
jobDataMap.put(EXTRACT_PROPERTY, epBean.getId());
jobDataMap.put(USER_ID, userAccountBean.getId());
jobDataMap.put(STUDY_ID, userAccountBean.getActiveStudyId());
jobDataMap.put(LOCALE, locale);
jobDataMap.put(DATASET_ID, datasetId);
jobDataMap.put(EMAIL, userAccountBean.getEmail());
jobDataMap.put(ZIPPED,epBean.getZipFormat());
jobDataMap.put(DELETE_OLD,epBean.getDeleteOld());
jobDataMap.put(SUCCESS_MESSAGE,epBean.getSuccessMessage());
jobDataMap.put(FAILURE_MESSAGE,epBean.getFailureMessage());
jobDataMap.put(POST_PROC_DELETE_OLD, epBean.getPostProcDeleteOld());
jobDataMap.put(POST_PROC_ZIP, epBean.getPostProcZip());
jobDataMap.put(POST_PROC_LOCATION, epBean.getPostProcLocation());
jobDataMap.put(POST_PROC_EXPORT_NAME, epBean.getPostProcExportName());
jobDataMap.put(COUNT,cnt);
jobDataMap.put(XSLT_PATH,xsltPath);
// jobDataMap.put(DIRECTORY, directory);
// jobDataMap.put(ExampleSpringJob.LOCALE, locale);
jobDataMap.put(EP_BEAN, epBean);
triggerFactoryBean.setJobDataMap(jobDataMap);
return triggerFactoryBean;
}
@Bean
@Scope("prototype")
@Lazy
public JobDetailFactoryBean getJobDetailFactoryBean(SimpleTrigger simpleTrigger, String triggerGroupName) {
JobDetailFactoryBean jobDetailFactoryBean;
jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setGroup(triggerGroupName);
jobDetailFactoryBean.setName(simpleTrigger.getKey().getName()+System.currentTimeMillis());
jobDetailFactoryBean.setJobClass(org.akaza.openclinica.job.XsltStatefulJob.class);
jobDetailFactoryBean.setJobDataMap(simpleTrigger.getJobDataMap());
jobDetailFactoryBean.setDurability(true); // need durability? YES - we will want to see if it's finished
return jobDetailFactoryBean;
}
}