View Javadoc

1   package br.com.ibnetwork.guara.pipeline.factory.impl;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   
6   import org.apache.avalon.framework.configuration.Configurable;
7   import org.apache.avalon.framework.configuration.Configuration;
8   import org.apache.avalon.framework.service.ServiceException;
9   import org.apache.avalon.framework.service.ServiceManager;
10  import org.apache.avalon.framework.service.Serviceable;
11  import org.apache.commons.logging.Log;
12  import org.apache.commons.logging.LogFactory;
13  
14  import br.com.ibnetwork.xingu.factory.Factory;
15  import br.com.ibnetwork.guara.pipeline.Pipeline;
16  import br.com.ibnetwork.guara.pipeline.Valve;
17  import br.com.ibnetwork.guara.pipeline.factory.PipelineFactory;
18  import br.com.ibnetwork.guara.pipeline.impl.PipelineImpl;
19  
20  
21  /***
22   * @author <a href="mailto:leandro@ibnetwork.com.br">leandro</a>
23   */
24  public class PipelineFactoryImpl
25  	implements PipelineFactory, Serviceable
26  {
27      private Log logger = LogFactory.getLog(PipelineFactoryImpl.class);
28  
29      private Factory factory;
30      
31      public void service(ServiceManager manager) 
32  		throws ServiceException
33  	{
34          factory = (Factory) manager.lookup(Factory.ROLE);
35  	}
36  
37      public Map createPipelineMap(Configuration conf)
38      	throws Exception
39      {
40          Configuration[] pipelines = conf.getChildren("pipeline");
41          Map result = new HashMap(pipelines.length);
42          for (int i = 0; i < pipelines.length; i++)
43          {
44              Configuration pipelineConf = pipelines[i];
45              Pipeline pipeline = createPipeline(pipelineConf);
46              result.put(pipeline.getName(),pipeline);
47          }
48          return result;
49      }
50  
51      private Pipeline createPipeline(Configuration conf) 
52      	throws Exception
53      {
54          //TODO: use className
55          String name = conf.getAttribute("name",Pipeline.DEFAULT_PIPELINE_NAME);
56          logger.debug("Creating pipeline["+name+"]");
57          PipelineImpl pipeline = new PipelineImpl(name);
58          Configuration[] valves = conf.getChildren("valve");
59          for (int i = 0; i < valves.length; i++)
60          {
61              Configuration valveConf = valves[i];
62              Valve valve = createValve(pipeline,valveConf);
63              pipeline.addValve(valve);
64          }
65          return pipeline;
66      }
67  
68      private Valve createValve(PipelineImpl pipeline, Configuration conf) 
69      	throws Exception
70      {
71          String name = conf.getAttribute("name");
72          String className = conf.getAttribute("className");
73          logger.debug("Creating valve["+name+"]");
74          Valve valve = (Valve) factory.create(className);
75          valve.setPipeline(pipeline);
76          valve.setName(name);
77          if(valve instanceof Configurable)
78          {
79              //hack. Pipeline valves should be configured on pipeline.xml, not on guara.xml
80              //that is why we call .configure() here, not on the factory
81              ((Configurable)valve).configure(conf);
82          }
83          return valve;
84      }
85  }