KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nl > hippo > cms > workflows > shared > WorkflowQuartzJob


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 JavaDoc;
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 JavaDoc 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 JavaDoc 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 JavaDoc componentIdentifier = jobData.getString("component");
47                     ProjectWorkflowRepository pwr = p.getWorkflowRepository();
48                     Object JavaDoc 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 JavaDoc 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 JavaDoc e)
82         {
83             throw createJobExecutionException(url, e);
84         }
85     }
86
87     private JobExecutionException createJobExecutionException(String JavaDoc url, Exception JavaDoc e)
88     {
89         return new JobExecutionException("Workflow task failed for URI: " + url, e, false);
90     }
91
92     private JobExecutionException createJobExecutionException(String JavaDoc url, String JavaDoc msg)
93     {
94         return new JobExecutionException("Workflow task failed for URI: " + url + ". Reason: " + msg, null, false);
95     }
96
97 }
98
Popular Tags