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 if (evaluator.equals("custom"))
37 {
38 evaluator = customEvaluator;
39 }
40
41 Object result = getMuleContext().getExpressionManager().evaluate(expression, evaluator, message, true);
42 Class<? extends Job> clazz;
43 if (result instanceof Job)
44 {
45 return (Job) result;
46 }
47 else if (result instanceof JobConfig)
48 {
49 clazz = ((JobConfig)result).getJobClass();
50 }
51 else
52 {
53 throw new IllegalStateException(CoreMessages.propertyIsNotSupportedType(evaluator + ":" + expression,
54 new Class[]{Job.class, JobConfig.class}, result.getClass()).getMessage());
55 }
56
57 return (Job) ClassUtils.instanciateClass(clazz);
58 }
59
60 public JobConfig getJobConfig(MuleMessage message) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException
61 {
62 if (evaluator.equals("custom"))
63 {
64 evaluator = customEvaluator;
65 }
66
67 final MuleContext muleContext = getMuleContext();
68 Object result = muleContext.getExpressionManager().evaluate(expression, evaluator, message, true);
69 if (result instanceof Job)
70 {
71 CustomJobConfig customJob = new CustomJobConfig();
72 customJob.setJob((Job) result);
73 customJob.setMuleContext(muleContext);
74 return customJob;
75 }
76 else if (result instanceof JobConfig)
77 {
78 if (result instanceof MuleContextAware)
79 {
80 ((MuleContextAware) result).setMuleContext(muleContext);
81 }
82 return (JobConfig) result;
83 }
84 else
85 {
86 throw new IllegalStateException(CoreMessages.propertyIsNotSupportedType(evaluator + ":" + expression,
87 new Class[]{Job.class, JobConfig.class, Class.class, String.class}, result.getClass()).getMessage());
88 }
89 }
90
91 public String getCustomEvaluator()
92 {
93 return customEvaluator;
94 }
95
96 public void setCustomEvaluator(String customEvaluator)
97 {
98 this.customEvaluator = customEvaluator;
99 }
100
101 public String getEvaluator()
102 {
103 return evaluator;
104 }
105
106 public void setEvaluator(String evaluator)
107 {
108 this.evaluator = evaluator;
109 }
110
111 public String getExpression()
112 {
113 return expression;
114 }
115
116 public void setExpression(String expression)
117 {
118 this.expression = expression;
119 }
120
121 @Override
122 protected Class<? extends StatefulJob> getStatefulJobClass()
123 {
124 return StatefulCustomJob.class;
125 }
126
127 @Override
128 protected Class<? extends Job> getStatelessJobClass()
129 {
130 return CustomJob.class;
131 }
132 }