View Javadoc

1   /*
2    * $Id: CustomJobFromMessageConfig.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * This configuration simply holds a reference to a user defined job to execute.
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 }