View Javadoc
1   /*
2    * Licensed under the GPL License. You may not use this file except in compliance with the License.
3    * You may obtain a copy of the License at
4    *
5    *   https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6    *
7    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
8    * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
9    * PURPOSE.
10   */
11  package psiprobe;
12  
13  import java.util.ArrayList;
14  import java.util.Collections;
15  import java.util.HashMap;
16  import java.util.List;
17  import java.util.Locale;
18  import java.util.Map;
19  import java.util.Properties;
20  
21  import org.slf4j.Logger;
22  import org.slf4j.LoggerFactory;
23  import org.springframework.beans.factory.FactoryBean;
24  import org.springframework.beans.factory.annotation.Autowired;
25  import org.springframework.beans.factory.config.PropertiesFactoryBean;
26  import org.springframework.context.MessageSource;
27  import org.springframework.context.annotation.Bean;
28  import org.springframework.context.annotation.ComponentScan;
29  import org.springframework.context.annotation.Configuration;
30  import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
31  import org.springframework.context.support.ReloadableResourceBundleMessageSource;
32  import org.springframework.core.io.ClassPathResource;
33  import org.springframework.web.multipart.support.StandardServletMultipartResolver;
34  import org.springframework.web.servlet.HandlerMapping;
35  import org.springframework.web.servlet.LocaleResolver;
36  import org.springframework.web.servlet.ThemeResolver;
37  import org.springframework.web.servlet.ViewResolver;
38  import org.springframework.web.servlet.config.annotation.EnableWebMvc;
39  import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
40  import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
41  import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
42  import org.springframework.web.servlet.i18n.CookieLocaleResolver;
43  import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
44  import org.springframework.web.servlet.theme.FixedThemeResolver;
45  import org.springframework.web.servlet.view.InternalResourceViewResolver;
46  import org.springframework.web.servlet.view.JstlView;
47  
48  import psiprobe.beans.ClusterWrapperBean;
49  import psiprobe.beans.ContainerListenerBean;
50  import psiprobe.beans.ContainerWrapperBean;
51  import psiprobe.beans.JBossResourceResolverBean;
52  import psiprobe.beans.JvmMemoryInfoAccessorBean;
53  import psiprobe.beans.LogResolverBean;
54  import psiprobe.beans.ResourceResolver;
55  import psiprobe.beans.ResourceResolverBean;
56  import psiprobe.beans.RuntimeInfoAccessorBean;
57  import psiprobe.tools.Mailer;
58  
59  /**
60   * The Class ProbeConfig.
61   */
62  @EnableWebMvc
63  @Configuration
64  @ComponentScan(basePackages = {"psiprobe"})
65  public class ProbeConfig implements WebMvcConfigurer {
66  
67    /** The Constant logger. */
68    private static final Logger logger = LoggerFactory.getLogger(ProbeConfig.class);
69  
70    /**
71     * Gets the container listener bean.
72     *
73     * @return the container listener bean
74     */
75    @Bean(name = "containerListener")
76    public ContainerListenerBean getContainerListenerBean() {
77      logger.debug("Instantiated containerListener");
78      return new ContainerListenerBean();
79    }
80  
81    /**
82     * Gets the container wrapper bean.
83     *
84     * @return the container wrapper bean
85     */
86    @Bean(name = "containerWrapper")
87    public ContainerWrapperBean getContainerWrapperBean() {
88      logger.debug("Instantiated containerWrapper");
89      return new ContainerWrapperBean();
90    }
91  
92    /**
93     * Gets the cluster wrapper bean.
94     *
95     * @return the cluster wrapper bean
96     */
97    @Bean(name = "clusterWrapper")
98    public ClusterWrapperBean getClusterWrapperBean() {
99      logger.debug("Instantiated clusterWrapper");
100     return new ClusterWrapperBean();
101   }
102 
103   /**
104    * Gets the mailer.
105    *
106    * @return the mailer
107    */
108   @Bean(name = "mailer")
109   public Mailer getMailer() {
110     logger.debug("Instantiated mailer");
111     return new Mailer();
112   }
113 
114   /**
115    * Gets the default res.
116    *
117    * @return the default res
118    */
119   @Bean(name = "datasourceMappers")
120   public List<String> getDefaultRes() {
121     logger.debug("Instantiated datasourceMappers");
122     List<String> list = new ArrayList<>();
123     list.add("psiprobe.beans.accessors.C3P0DatasourceAccessor");
124     list.add("psiprobe.beans.accessors.Dbcp2DatasourceAccessor");
125     list.add("psiprobe.beans.accessors.HikariCpDatasourceAccessor");
126     list.add("psiprobe.beans.accessors.OracleDatasourceAccessor");
127     list.add("psiprobe.beans.accessors.OracleUcpDatasourceAccessor");
128     list.add("psiprobe.beans.accessors.OpenEjbBasicDatasourceAccessor");
129     list.add("psiprobe.beans.accessors.OpenEjbManagedDatasourceAccessor");
130     list.add("psiprobe.beans.accessors.Tomcat10DbcpDatasourceAccessor");
131     list.add("psiprobe.beans.accessors.Tomcat11DbcpDatasourceAccessor");
132     list.add("psiprobe.beans.accessors.TomcatJdbcPoolDatasourceAccessor");
133     list.add("psiprobe.beans.accessors.TomEeJdbcPoolDatasourceAccessor");
134     list.add("psiprobe.beans.accessors.ViburCpDatasourceAccessor");
135     return list;
136   }
137 
138   /**
139    * Gets the resource resolver bean.
140    *
141    * @return the resource resolver bean
142    */
143   @Bean(name = "default")
144   public ResourceResolverBean getResourceResolverBean() {
145     logger.debug("Instantiated default resourceResolverBean");
146     return new ResourceResolverBean();
147   }
148 
149   /**
150    * Gets the jboss resource resolver bean.
151    *
152    * @return the jboss resource resolver bean
153    */
154   @Bean(name = "jboss")
155   public JBossResourceResolverBean getJBossResourceResolverBean() {
156     logger.debug("Instantiated jbossResourceResolverBean");
157     return new JBossResourceResolverBean();
158   }
159 
160   /**
161    * Gets the resource resolvers.
162    *
163    * @param jbossResourceResolverBean the jboss resource resolver bean
164    * @param resourceResolverBean the resource resolver bean
165    *
166    * @return the resource resolvers
167    */
168   @Bean(name = "resourceResolvers")
169   public Map<String, ResourceResolver> getResourceResolvers(
170       @Autowired JBossResourceResolverBean jbossResourceResolverBean,
171       @Autowired ResourceResolverBean resourceResolverBean) {
172     logger.debug("Instantiated resourceResolvers");
173     Map<String, ResourceResolver> map = new HashMap<>();
174     map.put("jboss", jbossResourceResolverBean);
175     map.put("default", resourceResolverBean);
176     return map;
177   }
178 
179   /**
180    * Gets the adapter classes.
181    *
182    * @return the adapter classes
183    */
184   @Bean(name = "adapterClasses")
185   public List<String> getAdapterClasses() {
186     logger.debug("Instantiated adapterClasses");
187     List<String> list = new ArrayList<>();
188     try {
189       Properties properties = adapters().getObject();
190       if (properties == null) {
191         return Collections.emptyList();
192       }
193       for (Object adapter : properties.values()) {
194         list.add((String) adapter);
195       }
196     } catch (Exception e) {
197       logger.error("", e);
198     }
199     return list;
200   }
201 
202   /**
203    * Gets the stdout files. Any file added to this list will be displayed.
204    *
205    * @return the stdout files
206    */
207   @Bean(name = "stdoutFiles")
208   public List<String> getStdoutFiles() {
209     logger.debug("Instantiated stdoutFiles");
210     List<String> list = new ArrayList<>();
211     try {
212       Properties properties = stdout().getObject();
213       if (properties == null) {
214         return Collections.emptyList();
215       }
216       for (Object stdout : properties.values()) {
217         list.add((String) stdout);
218       }
219     } catch (Exception e) {
220       logger.error("", e);
221     }
222     return list;
223   }
224 
225   /**
226    * Standard Out Properties.
227    *
228    * @return the properties factory bean for standard out
229    */
230   @Bean(name = "stdout")
231   public FactoryBean<Properties> stdout() {
232     logger.debug("Instantiated stdout");
233     PropertiesFactoryBean bean = new PropertiesFactoryBean();
234     bean.setLocation(new ClassPathResource("stdout.properties"));
235     return bean;
236   }
237 
238   /**
239    * Adapters Properties.
240    *
241    * @return the properties factory bean for adaptors
242    */
243   @Bean(name = "adapters")
244   public FactoryBean<Properties> adapters() {
245     logger.debug("Instantiated adapters");
246     PropertiesFactoryBean bean = new PropertiesFactoryBean();
247     bean.setLocation(new ClassPathResource("adapters.properties"));
248     return bean;
249   }
250 
251   /**
252    * Gets the log resolver bean.
253    *
254    * @return the log resolver bean
255    */
256   @Bean(name = "logResolver")
257   public LogResolverBean getLogResolverBean() {
258     logger.debug("Instantiated logResolver");
259     return new LogResolverBean();
260   }
261 
262   /**
263    * Gets the jvm memory info accessor bean.
264    *
265    * @return the jvm memory info accessor bean
266    */
267   @Bean(name = "jvmMemoryInfoAccessor")
268   public JvmMemoryInfoAccessorBean getJvmMemoryInfoAccessorBean() {
269     logger.debug("Instantiated jvmMemoryInfoAccessorBean");
270     return new JvmMemoryInfoAccessorBean();
271   }
272 
273   /**
274    * Gets the runtime info accessor bean.
275    *
276    * @return the runtime info accessor bean
277    */
278   @Bean(name = "runtimeInfoAccessor")
279   public RuntimeInfoAccessorBean getRuntimeInfoAccessorBean() {
280     logger.debug("Instantiated runtimeInfoAccessorBean");
281     return new RuntimeInfoAccessorBean();
282   }
283 
284   /**
285    * Gets the internal resource view resolver.
286    *
287    * @return the internal resource view resolver
288    */
289   @Bean(name = "jspViewResolver")
290   public ViewResolver getViewResolver() {
291     logger.debug("Instantiated internalResourceViewResolver");
292     InternalResourceViewResolver resolver = new InternalResourceViewResolver();
293     resolver.setViewClass(JstlView.class);
294     resolver.setPrefix("/WEB-INF/jsp/");
295     resolver.setSuffix(".jsp");
296     return resolver;
297   }
298 
299   /**
300    * Gets the fixed theme resolver.
301    *
302    * @return the fixed theme resolver
303    */
304   @Bean(name = "themeResolver")
305   public ThemeResolver getThemeResolver() {
306     logger.debug("Instantiated fixedThemeResolver");
307     FixedThemeResolver resolver = new FixedThemeResolver();
308     resolver.setDefaultThemeName("theme-classic");
309     return resolver;
310   }
311 
312   /**
313    * Gets the reloadable resource bundle message source.
314    *
315    * @return the reloadable resource bundle message source
316    */
317   @Bean(name = "messageSource")
318   public MessageSource getMessageSource() {
319     logger.debug("Instantiated reloadableResourceBundleMessageSource");
320     ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
321     source.setBasename("/WEB-INF/messages");
322     source.setCacheSeconds(1);
323     source.setFallbackToSystemLocale(false);
324     return source;
325   }
326 
327   /**
328    * Gets the cookie locale resolver.
329    *
330    * @return the cookie locale resolver
331    */
332   @Bean(name = "localeResolver")
333   public LocaleResolver getLocaleResolver() {
334     logger.debug("Instantiated cookieLocaleResolver");
335     CookieLocaleResolver resolver = new CookieLocaleResolver();
336     resolver.setDefaultLocale(Locale.ENGLISH);
337     resolver.setCookieSecure(true);
338     resolver.setCookieHttpOnly(true);
339     return resolver;
340   }
341 
342   /**
343    * Gets the bean name url handler mapping.
344    *
345    * @param interceptor the interceptor
346    *
347    * @return the bean name url handler mapping
348    */
349   @Bean(name = "handlerMapping")
350   public HandlerMapping getHandlerMapping(@Autowired LocaleChangeInterceptor interceptor) {
351     logger.debug("Instantiated beanNameUrlHandlerMapping");
352     BeanNameUrlHandlerMapping mapping = new BeanNameUrlHandlerMapping();
353     mapping.setAlwaysUseFullPath(true);
354     mapping.setInterceptors(interceptor);
355     return mapping;
356   }
357 
358   @Override
359   public void addInterceptors(InterceptorRegistry registry) {
360     logger.debug("Registering localeChangeInterceptor");
361     registry.addInterceptor(getLocaleChangeInterceptor());
362   }
363 
364   /**
365    * Gets the locale change interceptor.
366    *
367    * @return the locale change interceptor
368    */
369   @Bean(name = "localeChangeInterceptor")
370   public LocaleChangeInterceptor getLocaleChangeInterceptor() {
371     logger.debug("Instantiated localeChangeInterceptor");
372     LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
373     interceptor.setParamName("lang");
374     return interceptor;
375   }
376 
377   /**
378    * Gets the property sources placeholder configurer.
379    *
380    * @return the property sources placeholder configurer
381    */
382   @Bean(name = "propertySourcesPlaceholderConfigurer")
383   public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
384     logger.debug("Instantiated propertySourcesPlaceholderConfigurer");
385     PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
386     configurer.setLocation(new ClassPathResource("stats.properties"));
387     configurer.setNullValue("NULL");
388 
389     Properties properties = new Properties();
390     properties.put("psiprobe.tools.mail.to", "NULL");
391     properties.put("psiprobe.tools.mail.subjectPrefix", "[PSI Probe]");
392     configurer.setProperties(properties);
393     return configurer;
394   }
395 
396   /**
397    * Version.
398    *
399    * @return the properties factory bean
400    */
401   @Bean(name = "version")
402   public PropertiesFactoryBean version() {
403     logger.debug("Instantiated version");
404     PropertiesFactoryBean bean = new PropertiesFactoryBean();
405     bean.setLocation(new ClassPathResource("version.properties"));
406     return bean;
407   }
408 
409   /**
410    * Multipart resolver.
411    *
412    * @return the standard servlet multipart resolver
413    */
414   @Bean(name = "multipartResolver")
415   public StandardServletMultipartResolver multipartResolver() {
416     return new StandardServletMultipartResolver();
417   }
418 
419 }