View Javadoc

1   package br.com.ibnetwork.guara.pipeline.valve.pull;
2   
3   import java.util.Iterator;
4   import java.util.List;
5   
6   import javax.servlet.http.HttpSession;
7   
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.guara.pipeline.PipelineException;
15  import br.com.ibnetwork.guara.pipeline.valve.ValveSupport;
16  import br.com.ibnetwork.guara.pull.ApplicationToolHandler;
17  import br.com.ibnetwork.guara.pull.PullManager;
18  import br.com.ibnetwork.guara.rundata.RunData;
19  import br.com.ibnetwork.guara.view.Context;
20  
21  /***
22   * @author leandro
23   */
24  public class PopulateContextWithTools 
25  	extends ValveSupport
26  	implements Serviceable
27  {
28      private Log logger;
29      
30      private PullManager pullManager;
31      
32      public void service(ServiceManager manager) 
33      	throws ServiceException
34      {
35          logger = LogFactory.getLog(PopulateContextWithTools.class);
36          pullManager = (PullManager) manager.lookup(PullManager.ROLE);
37      }
38  
39      public boolean execute(RunData runData) 
40      	throws PipelineException
41      {
42          Context ctx = runData.getContext();
43          
44          //add global tools - all from cache
45          List globalTools = pullManager.getAllToolHandlers(PullManager.SCOPE_GLOBAL);
46          populateContext(globalTools, runData);
47          
48          //add request tools - all new
49          List requestTools = pullManager.getAllToolHandlers(PullManager.SCOPE_REQUEST);
50          populateContext(requestTools, runData);
51          
52          //add session tools - all new if session is new
53          HttpSession session = runData.getRequest().getSession();
54          if(session.isNew())
55          {
56              List sessionTools = pullManager.getAllToolHandlers(PullManager.SCOPE_SESSION);
57              populateContext(sessionTools, runData);
58          }
59          else
60          {
61              //TODO: restore tools from session
62          }
63          return true;
64      }
65  
66      private void populateContext(List tools, RunData runData)
67      {
68          if(tools == null)
69          {
70              return;
71          }
72          Context ctx = runData.getContext();
73          for (Iterator iter = tools.iterator(); iter.hasNext();)
74          {
75              ApplicationToolHandler handler = (ApplicationToolHandler) iter.next();
76              try
77              {
78                  Object tool = handler.newToolInstance(runData);
79                  ctx.put(handler.getName(),tool);
80                  if(logger.isDebugEnabled())
81                  {
82                      logger.debug("Adding tool["+handler.getName()+"] scope["
83                          +handler.getScope()+"] to context");
84                  }
85              }
86              catch (Exception e)
87              {
88                  logger.error("Error adding tool to context",e);
89              }
90          }
91      }
92  }