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 }