1 package nl.hippo.cms.workflows.shared; 2 3 import com.opensymphony.workflow.InternalWorkflowException; 4 import com.opensymphony.workflow.WorkflowException; 5 import java.io.IOException ; 6 import nl.hippo.cms.Constants; 7 import nl.hippo.cocoon.webdav.WebDAVHelper; 8 import nl.hippo.servermanager.ComponentLoadException; 9 import nl.hippo.servermanager.Project; 10 import nl.hippo.servermanager.ProjectWorkflowRepository; 11 import org.apache.commons.httpclient.HttpState; 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.quartz.SchedulerException; 18 import org.springframework.beans.factory.BeanFactory; 19 20 public class WorkflowQuartzJob implements Job 21 { 22 23 public WorkflowQuartzJob() 24 { 25 super(); 26 } 27 28 public void execute(JobExecutionContext context) throws JobExecutionException 29 { 30 String url = context.getJobDetail().getJobDataMap().getString("location"); 31 try 32 { 33 SchedulerContext schedulerContext = context.getScheduler().getContext(); 34 BeanFactory bf = (BeanFactory) schedulerContext.get("beanFactory"); 35 HttpState httpState = (HttpState) bf.getBean("httpState"); 36 String workflowIdAsString = WebDAVHelper.propfindAsString(url, 37 Constants.CMS_1_0_NAMESPACE, Constants.WORKFLOW_ID_PROPERTY_NAME, 38 httpState); 39 if (workflowIdAsString != null && !workflowIdAsString.equals("")) 40 { 41 try 42 { 43 long workflowId = Long.parseLong(workflowIdAsString); 44 Project p = (Project) schedulerContext.get("project"); 45 JobDataMap jobData = context.getJobDetail().getJobDataMap(); 46 String componentIdentifier = jobData.getString("component"); 47 ProjectWorkflowRepository pwr = p.getWorkflowRepository(); 48 Object jobAsObject = pwr.loadComponent(workflowId, componentIdentifier); 49 if (jobAsObject instanceof WorkflowJob) 50 { 51 WorkflowJob job = (WorkflowJob) jobAsObject; 52 job.execute(url, workflowId, jobData, httpState, pwr); 53 } 54 else 55 { 56 throw createJobExecutionException(url, "component " + componentIdentifier + " is not an instanceof WorkflowJob"); 57 } 58 } 59 catch (NumberFormatException e) 60 { 61 throw createJobExecutionException(url, e); 62 } 63 catch (InternalWorkflowException e) 64 { 65 throw createJobExecutionException(url, e); 66 } 67 catch (ComponentLoadException e) 68 { 69 throw createJobExecutionException(url, e); 70 } 71 catch (WorkflowException e) 72 { 73 throw createJobExecutionException(url, e); 74 } 75 } 76 } 77 catch (SchedulerException e) 78 { 79 throw createJobExecutionException(url, e); 80 } 81 catch (IOException e) 82 { 83 throw createJobExecutionException(url, e); 84 } 85 } 86 87 private JobExecutionException createJobExecutionException(String url, Exception e) 88 { 89 return new JobExecutionException("Workflow task failed for URI: " + url, e, false); 90 } 91 92 private JobExecutionException createJobExecutionException(String url, String msg) 93 { 94 return new JobExecutionException("Workflow task failed for URI: " + url + ". Reason: " + msg, null, false); 95 } 96 97 } 98 | Popular Tags |