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
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
80
81 ((Configurable)valve).configure(conf);
82 }
83 return valve;
84 }
85 }