1 package br.com.ibnetwork.guara.rundata.impl;
2
3 import javax.servlet.ServletConfig;
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpServletResponse;
6
7 import org.apache.avalon.framework.configuration.Configurable;
8 import org.apache.avalon.framework.configuration.Configuration;
9 import org.apache.avalon.framework.configuration.ConfigurationException;
10 import org.apache.avalon.framework.service.ServiceException;
11 import org.apache.avalon.framework.service.ServiceManager;
12 import org.apache.avalon.framework.service.Serviceable;
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15
16 import br.com.ibnetwork.xingu.factory.Factory;
17 import br.com.ibnetwork.guara.parameters.ParameterParser;
18 import br.com.ibnetwork.guara.parameters.ParameterParserBuilder;
19 import br.com.ibnetwork.guara.pipeline.Pipeline;
20 import br.com.ibnetwork.guara.pipeline.PipelineManager;
21 import br.com.ibnetwork.guara.rundata.Outcome;
22 import br.com.ibnetwork.guara.rundata.RunData;
23 import br.com.ibnetwork.guara.rundata.RunDataException;
24 import br.com.ibnetwork.guara.rundata.RunDataPool;
25 import br.com.ibnetwork.guara.rundata.PageInfo;
26 import br.com.ibnetwork.guara.rundata.URLHandler;
27 import br.com.ibnetwork.guara.util.ServletUtils;
28 import br.com.ibnetwork.guara.view.Context;
29 import br.com.ibnetwork.guara.view.TemplateEngine;
30
31 /***
32 * @author leandro
33 */
34 public class RunDataPoolImpl
35 implements RunDataPool, Serviceable, Configurable
36 {
37 private Log logger = LogFactory.getLog(RunDataPoolImpl.class);
38
39 private ParameterParserBuilder parserBuilder;
40
41 private PipelineManager pipelineManager;
42
43 private TemplateEngine templateEngine;
44
45 private Factory factory;
46
47 private URLHandler urlHandler;
48
49 public void service(ServiceManager manager)
50 throws ServiceException
51 {
52 parserBuilder = (ParameterParserBuilder) manager.lookup(ParameterParserBuilder.ROLE);
53 pipelineManager = (PipelineManager) manager.lookup(PipelineManager.ROLE);
54 templateEngine = (TemplateEngine) manager.lookup(TemplateEngine.ROLE);
55 factory = (Factory) manager.lookup(Factory.ROLE);
56 }
57
58 public void configure(Configuration conf)
59 throws ConfigurationException {
60 String className = conf.getChild("urlHandler").getAttribute("class",URLHandlerImpl.class.getName());
61 urlHandler = (URLHandler) factory.create(className);
62 }
63
64 public RunData create(HttpServletRequest request, HttpServletResponse response, ServletConfig servletConfig)
65 throws RunDataException
66 {
67 RunDataImpl data = new RunDataImpl();
68
69
70 data.setHttpServletRequest(request);
71 data.setHttpServletResponse(response);
72
73
74 ParameterParser pp = parserBuilder.createParameterParser(request);
75 data.setParameterParser(pp);
76
77
78 PageInfo pageInfo = null;
79 try
80 {
81 pageInfo = urlHandler.handleURL(request,pp);
82 data.setPageInfo(pageInfo);
83 }
84 catch(Exception e)
85 {
86 String url = ServletUtils.getURLFromRequest(request);
87 throw new RunDataException("Error handling url: "+url,e);
88 }
89
90 if(logger.isDebugEnabled())
91 {
92 logger.debug("template is ["+pageInfo.getTemplate()+"]");
93 logger.debug("layoutTemplate is ["+pageInfo.getLayoutTemplate()+"]");
94 logger.debug("screenName is ["+pageInfo.getScreenName()+"]");
95 logger.debug("actionName is ["+pageInfo.getActionName()+"]");
96 }
97
98
99 String pipelineName = pp.get("pipeline");
100 if(pipelineName != null)
101 {
102 Pipeline pipeline = pipelineManager.getPipeline(pipelineName);
103 data.setPipeline(pipeline);
104 }
105
106
107 Context ctx = templateEngine.createContext();
108 data.setContext(ctx);
109
110
111 data.setOutcome(Outcome.UNKNOWN);
112
113 return data;
114 }
115
116 public void returnRunData(RunData runData)
117 {
118
119 }
120 }