1 package nl.hippo.cms.workflows.shared; 2 3 import java.util.HashMap ; 4 import java.util.HashSet ; 5 import java.util.Iterator ; 6 import java.util.Map ; 7 import java.util.Set ; 8 import nl.hippo.servermanager.Project; 9 import nl.hippo.servermanager.ProjectWorkflowRepository; 10 import nl.hippo.servermanager.Server; 11 import nl.hippo.servermanager.ServerManager; 12 import org.quartz.Job; 13 import org.quartz.JobDataMap; 14 import org.quartz.JobExecutionContext; 15 import org.quartz.JobExecutionException; 16 import org.quartz.SchedulerContext; 17 import org.springframework.beans.factory.BeanFactory; 18 19 public class ProjectWorkflowQuartzJob implements Job 20 { 21 private static final Set JOB_DATA_PROPERTIES_TO_FILTER = new HashSet (); 22 23 static 24 { 25 JOB_DATA_PROPERTIES_TO_FILTER.add("workflowId"); 26 JOB_DATA_PROPERTIES_TO_FILTER.add("className"); 27 } 28 29 public ProjectWorkflowQuartzJob() 30 { 31 super(); 32 } 33 34 public void execute(JobExecutionContext context) throws JobExecutionException 35 { 36 JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); 37 long workflowId = jobDataMap.getLong("workflowId"); 38 try 39 { 40 SchedulerContext schedulerContext = context.getScheduler().getContext(); 41 42 BeanFactory bf = (BeanFactory) schedulerContext.get("beanFactory"); 43 Server server = ((ServerManager)bf.getBean("serverManager")).getServer(); 44 45 String projectName = jobDataMap.getString("projectName"); 46 Project project = server.getProject(projectName); 47 ProjectWorkflowRepository workflow = project.getWorkflowRepository(); 48 49 String className = jobDataMap.getString("className"); 50 Object jobAsObject = workflow.loadComponent(workflowId, className); 51 if (jobAsObject instanceof ProjectWorkflowJob) 52 { 53 Map params = new HashMap (); 54 55 params.put("httpstate", bf.getBean("httpState")); 56 57 Iterator keysIterator = jobDataMap.keySet().iterator(); 58 while (keysIterator.hasNext()) 59 { 60 Object key = keysIterator.next(); 61 if (!JOB_DATA_PROPERTIES_TO_FILTER.contains(key)) 62 { 63 params.put(key, jobDataMap.get(key)); 64 } 65 } 66 ((ProjectWorkflowJob)jobAsObject).execute(project, workflowId, params); 67 } 68 } 69 catch (Exception e) 70 { 71 throw createJobExecutionException(workflowId, e); 72 } 73 } 74 75 private JobExecutionException createJobExecutionException(long workflowId, Exception e) 76 { 77 return new JobExecutionException("Workflow task failed for workflow ID: " + workflowId, e, false); 78 } 79 80 } 81 | Popular Tags |