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