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