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 }