1   /*
2    * Created on Nov 17, 2003
3    *
4    * To change the template for this generated file go to
5    * Window - Preferences - Java - Code Generation - Code and Comments
6    */
7   package com.atlassian.spring.container;
8   
9   import org.springframework.web.context.ContextLoaderListener;
10  
11  import javax.servlet.ServletContextEvent;
12  
13  /**
14   * @author Ross Mason
15   *         <p/>
16   *         The confluence context listener will obtain a reference to the spring application context to use
17   *         for resolving components.  This listener extends the Spring ContextLoaderListener and should be used instead of
18   *         in the web.xml.
19   *         <p/>
20   *         The loader now fires an event once the ContainerManager has been setup with a context.
21   * @see com.atlassian.spring.container.ContainerContextLoadedEvent
22   */
23  public class ContainerContextLoaderListener extends ContextLoaderListener
24  {
25      /* (non-Javadoc)
26       * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
27       */
28      public void contextInitialized(ServletContextEvent event)
29      {
30          if (canInitialiseContainer())
31          {
32              super.contextInitialized(event);
33              postInitialiseContext(event);
34          }
35  
36          SpringContainerContext springCC = getNewSpringContainerContext();
37          springCC.setServletContext(event.getServletContext());
38          ContainerManager.getInstance().setContainerContext(springCC);
39  
40          springCC.contextReloaded();
41      }
42  
43      protected void postInitialiseContext(ServletContextEvent event)
44      {
45          
46      }
47  
48      protected SpringContainerContext getNewSpringContainerContext()
49      {
50          return new SpringContainerContext();
51      }
52  
53      /**
54       * Overriding classes can apply contidional behaviour here
55       *
56       * @return
57       */
58      public boolean canInitialiseContainer()
59      {
60          return true;
61      }
62  
63  }