1 package br.com.ibnetwork.guara.pipeline.valve.modules; 2 3 4 import org.apache.avalon.framework.configuration.Configurable; 5 import org.apache.avalon.framework.configuration.Configuration; 6 import org.apache.avalon.framework.configuration.ConfigurationException; 7 import org.apache.avalon.framework.service.ServiceException; 8 import org.apache.avalon.framework.service.ServiceManager; 9 import org.apache.avalon.framework.service.Serviceable; 10 import org.apache.commons.logging.Log; 11 import org.apache.commons.logging.LogFactory; 12 13 import br.com.ibnetwork.guara.modules.Module; 14 import br.com.ibnetwork.guara.modules.ModuleLoader; 15 import br.com.ibnetwork.guara.pipeline.PipelineException; 16 import br.com.ibnetwork.guara.pipeline.valve.ValveSupport; 17 import br.com.ibnetwork.guara.rundata.Outcome; 18 import br.com.ibnetwork.guara.rundata.RunData; 19 20 /*** 21 * @author leandro 22 */ 23 public abstract class ModuleExecutorSupport 24 extends ValveSupport 25 implements Serviceable, Configurable 26 { 27 protected Log logger; 28 29 protected ModuleLoader loader; 30 31 protected boolean recurse; 32 33 public void service(ServiceManager manager) 34 throws ServiceException 35 { 36 logger = LogFactory.getLog(ModuleExecutorSupport.class); 37 loader = (ModuleLoader) manager.lookup(ModuleLoader.ROLE); 38 } 39 40 public void configure(Configuration conf) 41 throws ConfigurationException 42 { 43 recurse = true; 44 } 45 46 47 public boolean execute(RunData runData) 48 throws PipelineException 49 { 50 String name = getModuleName(runData); 51 String type = getModuleType(runData); 52 if(name != null) 53 { 54 if(logger.isDebugEnabled()) logger.debug("Executing module ["+name+"] type["+type+"]"); 55 try 56 { 57 Module module = loader.loadModule(name,type); 58 Outcome outcome = executeModule(module,runData); 59 if(outcome != null && !Outcome.UNKNOWN.equals(outcome)) 60 { 61 runData.setOutcome(outcome); 62 } 63 } 64 catch (Exception e) 65 { 66 throw new PipelineException("Error executing module["+name+"] type["+type+"]", e); 67 } 68 } 69 return true; 70 } 71 72 protected abstract String getModuleName(RunData runData); 73 74 protected abstract String getModuleType(RunData runData); 75 76 protected Outcome executeModule(Module module, RunData runData) 77 throws Exception 78 { 79 Outcome outcome = module.doPerform(runData, runData.getContext()); 80 return outcome; 81 } 82 83 }