View Javadoc

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  }