1
2
3
4
5
6
7 package org.mule.transport.quartz.jobs;
8
9 import org.mule.api.MuleContext;
10 import org.mule.api.MuleMessage;
11 import org.mule.api.context.MuleContextAware;
12 import org.mule.config.i18n.CoreMessages;
13 import org.mule.transport.quartz.config.AbstractJobConfig;
14 import org.mule.transport.quartz.config.JobConfig;
15 import org.mule.util.ClassUtils;
16
17 import java.lang.reflect.InvocationTargetException;
18
19 import org.quartz.Job;
20 import org.quartz.StatefulJob;
21
22
23
24
25 public class CustomJobFromMessageConfig extends AbstractJobConfig
26 {
27 private String expression;
28 private String evaluator;
29 private String customEvaluator;
30
31 public Job getJob(MuleMessage message) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException
32 {
33 setupEvaluator();
34
35 Object result = getMuleContext().getExpressionManager().evaluate(expression, evaluator, message, true);
36 Class<? extends Job> clazz;
37 if (result instanceof Job)
38 {
39 return (Job) result;
40 }
41 else if (result instanceof JobConfig)
42 {
43 clazz = ((JobConfig)result).getJobClass();
44 }
45 else
46 {
47 throw new IllegalStateException(CoreMessages.propertyIsNotSupportedType(evaluator + ":" + expression,
48 new Class[]{Job.class, JobConfig.class}, result.getClass()).getMessage());
49 }
50
51 return ClassUtils.instanciateClass(clazz);
52 }
53
54 public JobConfig getJobConfig(MuleMessage message) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException
55 {
56 setupEvaluator();
57
58 final MuleContext muleContext = getMuleContext();
59 Object result = muleContext.getExpressionManager().evaluate(expression, evaluator, message, true);
60 if (result instanceof Job)
61 {
62 CustomJobConfig customJob = new CustomJobConfig();
63 customJob.setJob((Job) result);
64 customJob.setMuleContext(muleContext);
65 return customJob;
66 }
67 else if (result instanceof JobConfig)
68 {
69 if (result instanceof MuleContextAware)
70 {
71 ((MuleContextAware) result).setMuleContext(muleContext);
72 }
73 return (JobConfig) result;
74 }
75 else
76 {
77 throw new IllegalStateException(CoreMessages.propertyIsNotSupportedType(evaluator + ":" + expression,
78 new Class[]{Job.class, JobConfig.class, Class.class, String.class}, result.getClass()).getMessage());
79 }
80 }
81
82 protected void setupEvaluator()
83 {
84 if (evaluator.equals("custom"))
85 {
86 evaluator = customEvaluator;
87 }
88 }
89
90 public String getCustomEvaluator()
91 {
92 return customEvaluator;
93 }
94
95 public void setCustomEvaluator(String customEvaluator)
96 {
97 this.customEvaluator = customEvaluator;
98 }
99
100 public String getEvaluator()
101 {
102 return evaluator;
103 }
104
105 public void setEvaluator(String evaluator)
106 {
107 this.evaluator = evaluator;
108 }
109
110 public String getExpression()
111 {
112 return expression;
113 }
114
115 public void setExpression(String expression)
116 {
117 this.expression = expression;
118 }
119
120 @Override
121 protected Class<? extends StatefulJob> getStatefulJobClass()
122 {
123 return StatefulCustomJob.class;
124 }
125
126 @Override
127 protected Class<? extends Job> getStatelessJobClass()
128 {
129 return CustomJob.class;
130 }
131 }