View Javadoc

1   package br.com.ibnetwork.guara.pipeline.valve.modules;
2   
3   
4   import java.util.Iterator;
5   import java.util.Set;
6   
7   import org.apache.avalon.framework.configuration.Configurable;
8   import org.apache.avalon.framework.service.Serviceable;
9   import org.apache.commons.beanutils.MethodUtils;
10  
11  import br.com.ibnetwork.guara.modules.Module;
12  import br.com.ibnetwork.guara.modules.ModuleLoader;
13  import br.com.ibnetwork.guara.rundata.Outcome;
14  import br.com.ibnetwork.guara.rundata.RunData;
15  
16  /***
17   * @author leandro
18   */
19  public class ActionExecutor
20      extends ModuleExecutorSupport
21      implements Serviceable, Configurable
22  {
23      public static final String METHOD_KEY = "exec_";
24      
25      protected String getModuleName(RunData runData)
26      {
27          return runData.getPageInfo().getActionName();
28      }
29      
30      protected String getModuleType(RunData runData)
31      {
32          return ModuleLoader.ACTION_TYPE;
33      }
34  
35      protected Outcome executeModule(Module module, RunData runData) 
36  		throws Exception
37  	{
38          String methodName = getMethodName(runData);
39          Outcome result = null;
40          if(methodName != null)
41          {
42              if(logger.isDebugEnabled()) logger.debug("Executing method ["+methodName+"]");
43              Object obj = MethodUtils.invokeMethod(module,methodName,new Object[]{runData, runData.getContext()});
44              if(obj instanceof Outcome)
45              {
46                  result = (Outcome) obj;    
47              }
48          }
49          else
50          {
51              if(logger.isDebugEnabled()) logger.debug("Executing doPerform()");
52              result = module.doPerform(runData, runData.getContext());    
53          }
54          return result;
55  	}
56  
57    private String getMethodName(RunData runData)
58    {
59        Set keys = runData.getParameters().keySet();
60        for (Iterator iter = keys.iterator(); iter.hasNext();)
61        {
62            String key = (String) iter.next();
63            if(key.startsWith(METHOD_KEY))
64            {
65                String methodName = key.substring(METHOD_KEY.length());
66                return methodName;
67            }
68        }
69        return null;
70    }
71  }