/*- * ================================================================================ * ECOMP Portal SDK * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ================================================================================ */ package org.openecomp.portalsdk.core.conf; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.openecomp.portalsdk.core.interceptor.ResourceInterceptor; import org.openecomp.portalsdk.core.interceptor.SessionTimeoutInterceptor; import org.openecomp.portalsdk.core.lm.FusionLicenseManager; import org.openecomp.portalsdk.core.logging.format.AlarmSeverityEnum; import org.openecomp.portalsdk.core.logging.format.AppMessagesEnum; import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.openecomp.portalsdk.core.menu.MenuBuilder; import org.openecomp.portalsdk.core.onboarding.util.CipherUtil; import org.openecomp.portalsdk.core.service.DataAccessService; import org.openecomp.portalsdk.core.service.DataAccessServiceImpl; import org.openecomp.portalsdk.core.util.SystemProperties; import org.openecomp.portalsdk.core.web.support.AppUtils; import org.openecomp.portalsdk.core.web.support.UserUtils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import org.springframework.web.servlet.view.UrlBasedViewResolver; import org.springframework.web.servlet.view.tiles3.TilesConfigurer; import org.springframework.web.servlet.view.tiles3.TilesView; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * Configures Spring features in the ECOMP Portal SDK including request * interceptors and view resolvers. Application should subclass and override * methods as needed. */ public class AppConfig extends WebMvcConfigurerAdapter implements Configurable, ApplicationContextAware { EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppConfig.class); private final List tileDefinitions = new ArrayList(); protected ApplicationContext appApplicationContext = null; public AppConfig() { //loads all default fields and marks logging //has been started for each log file type. initGlobalLocalContext(); } /** * Creates and returns a new instance of a secondary (order=2) * {@link ViewResolver} that finds files by adding prefix "/WEB-INF/jsp/" * and suffix ".jsp" to the base view name. * * @return New instance of {@link ViewResolver}. */ @Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/jsp/"); viewResolver.setSuffix(".jsp"); viewResolver.setOrder(2); return viewResolver; } /** * Loads all the default logging fields into the * global MDC context and marks each log file type * that logging has been started. */ private void initGlobalLocalContext() { logger.init(); } /* * Any requests from the url pattern /static/**, Spring will look for the * resources from the /static/ Same as in xml */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // registry.addResourceHandler("/static/**").addResourceLocations("/static/"); registry.addResourceHandler("/**").addResourceLocations("/"); } /** * Creates and returns a new instance of a {@link DataAccessService} class. * * @return New instance of {@link DataAccessService}. */ @Bean public DataAccessService dataAccessService() { return new DataAccessServiceImpl(); } /** * Creates and returns a new instance of a {@link SystemProperties} class. * * @return New instance of {@link SystemProperties}. */ @Bean public SystemProperties systemProperties() { return new SystemProperties(); } /** * Creates and returns a new instance of a {@link MenuBuilder} class. * * @return New instance of {@link MenuBuilder}. */ @Bean public MenuBuilder menuBuilder() { return new MenuBuilder(); } /** * Creates and returns a new instance of a {@link UserUtils} class. * * @return New instance of {@link UserUtils}. */ @Bean public UserUtils userUtil() { return new UserUtils(); } /** * Creates and returns a new instance of an {@link AppUtils} class. * * @return New instance of {@link AppUtils}. */ @Bean public AppUtils appUtils() { return new AppUtils(); } /** * Creates and returns a new instance of a {@link TilesConfigurer} class. * * @return New instance of {@link TilesConfigurer}. */ @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); tilesConfigurer.setDefinitions(tileDefinitions()); tilesConfigurer.setCheckRefresh(true); return tilesConfigurer; } /** * * Application Data Source * * @return DataSource Object */ @Bean public DataSource dataSource() throws Exception { systemProperties(); ComboPooledDataSource dataSource = new ComboPooledDataSource(); try { dataSource.setDriverClass(SystemProperties.getProperty(SystemProperties.DB_DRIVER)); dataSource.setJdbcUrl(SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL)); dataSource.setUser(SystemProperties.getProperty(SystemProperties.DB_USERNAME)); // dataSource.setPassword(SystemProperties.getProperty(SystemProperties.DB_PASSWOR)); String password = SystemProperties.getProperty(SystemProperties.DB_PASSWOR); if (SystemProperties.containsProperty(SystemProperties.DB_ENCRYPT_FLAG)) { String encryptFlag = SystemProperties.getProperty(SystemProperties.DB_ENCRYPT_FLAG); if (encryptFlag != null && encryptFlag.equalsIgnoreCase("true")) { password = CipherUtil.decrypt(password); } } dataSource.setPassword(password); dataSource .setMinPoolSize(Integer.parseInt(SystemProperties.getProperty(SystemProperties.DB_MIN_POOL_SIZE))); dataSource .setMaxPoolSize(Integer.parseInt(SystemProperties.getProperty(SystemProperties.DB_MAX_POOL_SIZE))); dataSource.setIdleConnectionTestPeriod( Integer.parseInt(SystemProperties.getProperty(SystemProperties.IDLE_CONNECTION_TEST_PERIOD))); } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, "Error initializing database, verify database settings in properties file: " + UserUtils.getStackTrace(e),AlarmSeverityEnum.CRITICAL); logger.error(EELFLoggerDelegate.debugLogger, "Error initializing database, verify database settings in properties file: " + UserUtils.getStackTrace(e),AlarmSeverityEnum.CRITICAL); // Raise an alarm that opening a connection to the database is // failed. logger.logEcompError(AppMessagesEnum.BeDaoSystemError); throw e; } return dataSource; } /* * TODO: Check whether it is appropriate to extend the list of tile * definitions at every invocation. */ protected String[] tileDefinitions() { tileDefinitions.add("/WEB-INF/fusion/defs/definitions.xml"); tileDefinitions.addAll(addTileDefinitions()); return tileDefinitions.toArray(new String[0]); } /** * Creates and returns a new empty list. This method should be overridden by * child classes. * * @return An empty list. */ public List addTileDefinitions() { return new ArrayList(); } /** * Creates and returns a new instance of a primary (order=1) * {@link UrlBasedViewResolver} that finds files using the contents of * definitions.xml files. * * @return New instance of {@link UrlBasedViewResolver} */ @Bean public UrlBasedViewResolver tileViewResolver() { UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); viewResolver.setViewClass(TilesView.class); viewResolver.setOrder(1); return viewResolver; } /** * Adds new instances of the following interceptors to the specified * interceptor registry: {@link SessionTimeoutInterceptor}, * {@link ResourceInterceptor} */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SessionTimeoutInterceptor()) .excludePathPatterns(getExcludeUrlPathsForSessionTimeout()); registry.addInterceptor(resourceInterceptor()); } /** * Creates and returns a new instance of a {@link ResourceInterceptor}. * * @return New instance of {@link ResourceInterceptor} */ @Bean public ResourceInterceptor resourceInterceptor() { return new ResourceInterceptor(); } private String[] excludeUrlPathsForSessionTimeout = {}; /** * Gets the array of Strings that are paths excluded for session timeout. * * @return Array of String */ public String[] getExcludeUrlPathsForSessionTimeout() { return excludeUrlPathsForSessionTimeout; } /** * Sets the array of Strings that are paths excluded for session timeout. */ public void setExcludeUrlPathsForSessionTimeout(final String... excludeUrlPathsForSessionTimeout) { this.excludeUrlPathsForSessionTimeout = excludeUrlPathsForSessionTimeout; } /** * Creates and returns a new instance of a {@link FusionLicenseManager}. * * @return New instance of {@link FusionLicenseManager}. // @Bean public FusionLicenseManager fusionLicenseManager() { return new FusionLicenseManager(new LicenseableClassImpl()); } */ /* * (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { appApplicationContext = applicationContext; } }