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