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 }