KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > appfuse > webapp > listener > StartupListener


1 package org.appfuse.webapp.listener;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.Map JavaDoc;
6
7 import javax.servlet.ServletContext JavaDoc;
8 import javax.servlet.ServletContextEvent JavaDoc;
9 import javax.servlet.ServletContextListener JavaDoc;
10
11 import org.acegisecurity.providers.AuthenticationProvider;
12 import org.acegisecurity.providers.ProviderManager;
13 import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
14 import org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider;
15
16 import org.apache.commons.logging.Log;
17 import org.apache.commons.logging.LogFactory;
18 import org.appfuse.Constants;
19 import org.appfuse.service.LookupManager;
20 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
21 import org.springframework.context.ApplicationContext;
22 import org.springframework.web.context.ContextLoaderListener;
23 import org.springframework.web.context.support.WebApplicationContextUtils;
24
25 /**
26  * <p>StartupListener class used to initialize and database settings
27  * and populate any application-wide drop-downs.
28  *
29  * <p>Keep in mind that this listener is executed outside of OpenSessionInViewFilter,
30  * so if you're using Hibernate you'll have to explicitly initialize all loaded data at the
31  * Dao or service level to avoid LazyInitializationException. Hibernate.initialize() works
32  * well for doing this.
33  *
34  * @author <a HREF="mailto:matt@raibledesigns.com">Matt Raible</a>
35  */

36 public class StartupListener extends ContextLoaderListener
37     implements ServletContextListener JavaDoc {
38     
39     private static final Log log = LogFactory.getLog(StartupListener.class);
40
41     public void contextInitialized(ServletContextEvent JavaDoc event) {
42         if (log.isDebugEnabled()) {
43             log.debug("initializing context...");
44         }
45
46         // call Spring's context ContextLoaderListener to initialize
47
// all the context files specified in web.xml
48
super.contextInitialized(event);
49
50         ServletContext JavaDoc context = event.getServletContext();
51
52         // Orion starts Servlets before Listeners, so check if the config
53
// object already exists
54
Map JavaDoc config = (HashMap JavaDoc) context.getAttribute(Constants.CONFIG);
55
56         if (config == null) {
57             config = new HashMap JavaDoc();
58         }
59         
60         if (context.getInitParameter(Constants.CSS_THEME) != null) {
61             config.put(Constants.CSS_THEME, context.getInitParameter(Constants.CSS_THEME));
62         }
63
64         ApplicationContext ctx =
65             WebApplicationContextUtils.getRequiredWebApplicationContext(context);
66
67         boolean encryptPassword = false;
68         try {
69             ProviderManager provider = (ProviderManager) ctx.getBean("authenticationManager");
70             for (Iterator JavaDoc it = provider.getProviders().iterator(); it.hasNext();) {
71                 AuthenticationProvider p = (AuthenticationProvider) it.next();
72                 if (p instanceof RememberMeAuthenticationProvider) {
73                     config.put("rememberMeEnabled", Boolean.TRUE);
74                 }
75             }
76
77             if (ctx.containsBean("passwordEncoder")) {
78                 encryptPassword = true;
79                 config.put(Constants.ENCRYPT_PASSWORD, Boolean.TRUE);
80                 String JavaDoc algorithm = "SHA";
81                 if (ctx.getBean("passwordEncoder") instanceof Md5PasswordEncoder) {
82                     algorithm = "MD5";
83                 }
84                 config.put(Constants.ENC_ALGORITHM, algorithm);
85             }
86         } catch (NoSuchBeanDefinitionException n) {
87             // ignore, should only happen when testing
88
}
89
90         context.setAttribute(Constants.CONFIG, config);
91
92         // output the retrieved values for the Init and Context Parameters
93
if (log.isDebugEnabled()) {
94             log.debug("Remember Me Enabled? " + config.get("rememberMeEnabled"));
95             log.debug("Encrypt Passwords? " + encryptPassword);
96             if (encryptPassword) {
97                 log.debug("Encryption Algorithm: " + config.get(Constants.ENC_ALGORITHM));
98             }
99             log.debug("Populating drop-downs...");
100         }
101
102         setupContext(context);
103     }
104
105     public static void setupContext(ServletContext JavaDoc context) {
106         ApplicationContext ctx =
107             WebApplicationContextUtils.getRequiredWebApplicationContext(context);
108
109         LookupManager mgr = (LookupManager) ctx.getBean("lookupManager");
110
111         // get list of possible roles
112
context.setAttribute(Constants.AVAILABLE_ROLES, mgr.getAllRoles());
113
114         if (log.isDebugEnabled()) {
115             log.debug("Drop-down initialization complete [OK]");
116         }
117     }
118 }
119
Popular Tags