View Javadoc

1   /*
2    * $Id: CustomJobFromMessageConfig.java 21610 2011-03-28 09:52:05Z dirk.olmes $
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          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 }