View Javadoc

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          //request and response
70          data.setHttpServletRequest(request);
71          data.setHttpServletResponse(response);
72  
73          //parameters
74          ParameterParser pp = parserBuilder.createParameterParser(request);
75          data.setParameterParser(pp);
76  
77          //page info
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          //pipeline
99          String pipelineName = pp.get("pipeline");
100         if(pipelineName != null)
101         {
102             Pipeline pipeline = pipelineManager.getPipeline(pipelineName);
103             data.setPipeline(pipeline);
104         }
105         
106         //context
107         Context ctx = templateEngine.createContext();
108         data.setContext(ctx);
109         
110         //outcome
111         data.setOutcome(Outcome.UNKNOWN);
112 
113         return data;
114     }
115 
116     public void returnRunData(RunData runData)
117     {
118         //do nothing for now 
119     }
120 }