blob: da07bba575961aec1eac9aa1004b89b3c6a1bdaf [file] [log] [blame]
/*-
* ============LICENSE_START=======================================================
* OSAM
* ================================================================================
* Copyright (C) 2018 AT&T
* ================================================================================
* 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.
* ============LICENSE_END=========================================================
*/
package org.onap.portalapp.conf;
import javax.sql.DataSource;
import org.onap.portalapp.login.LoginStrategyImpl;
import org.onap.portalapp.scheduler.RegistryAdapter;
import org.onap.portalsdk.core.auth.LoginStrategy;
import org.onap.portalsdk.core.conf.AppConfig;
import org.onap.portalsdk.core.conf.Configurable;
import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
import org.onap.portalsdk.core.objectcache.AbstractCacheManager;
import org.onap.portalsdk.core.service.DataAccessService;
import org.onap.portalsdk.core.util.CacheManager;
import org.onap.portalsdk.core.util.SystemProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
/**
* ONAP Portal SDK sample application. Extends core AppConfig class to
* reuse interceptors, view resolvers and other features defined there.
*/
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"org.onap"})
@PropertySource(value = { "${container.classpath:}/WEB-INF/conf/app/test.properties" }, ignoreResourceNotFound = true)
@Profile("src")
@EnableAsync
@EnableScheduling
public class ExternalAppConfig extends AppConfig implements Configurable {
private RegistryAdapter schedulerRegistryAdapter;
/** The Constant LOG. */
private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(ExternalAppConfig.class);
/** The vid schema script. */
@Value("classpath:osam-core-schema.sql")
private Resource osamCoreSchemaScript;
/** The vid data script. */
@Value("classpath:osam-core-data.sql")
private Resource osamCoreDataScript;
/**
* The Class InnerConfiguration.
*/
@Configuration
@Import(SystemProperties.class)
static class InnerConfiguration {
}
/**
* @see org.onap.portalsdk.core.conf.AppConfig#viewResolver()
*/
@Override
public ViewResolver viewResolver() {
return super.viewResolver();
}
/**
* @see org.onap.portalsdk.core.conf.AppConfig#addResourceHandlers(ResourceHandlerRegistry)
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
}
/**
* @see org.onap.portalsdk.core.conf.AppConfig#dataAccessService()
*/
@Override
public DataAccessService dataAccessService() {
// Echo the JDBC URL to assist developers when starting the app.
System.out.println("ExternalAppConfig: " + SystemProperties.DB_CONNECTIONURL + " is "
+ SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL));
return super.dataAccessService();
}
/**
* Creates a new list with a single entry that is the external app
* definitions.xml path.
*
* @return List of String, size 1
*/
/*@Override
public List<String> addTileDefinitions() {
List<String> definitions = new ArrayList<>();
definitions.add("/WEB-INF/defs/definitions.xml");
return definitions;
}*/
/**
* Adds request interceptors to the specified registry by calling
* {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes
* certain paths from the session timeout interceptor.
*/
// @Override
//public void addInterceptors(InterceptorRegistry registry) {
// super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm",
// "/api*", "/single_signon.htm", "/single_signon");
// super.addInterceptors(registry);
// }
/**
* Creates and returns a new instance of a {@link CacheManager} class.
*
* @return New instance of {@link CacheManager}
*/
@Bean
public AbstractCacheManager cacheManager() {
return new CacheManager();
}
/**
* Creates and returns a new instance of a {@link SchedulerFactoryBean} and
* populates it with triggers.
*
* @return New instance of {@link SchedulerFactoryBean}
* @throws Exception
*/
@Bean // ANNOTATION COMMENTED OUT
// APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION
@DependsOn("dataSourceInitializer")
public SchedulerFactoryBean schedulerFactoryBean() throws Exception {
SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
scheduler.setTriggers(schedulerRegistryAdapter.getTriggers());
scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties"));
scheduler.setDataSource(dataSource());
scheduler.setJobFactory(new SpringBeanJobFactory());
return scheduler;
}
/**
* Data source initializer.
*
* @param dataSource the data source
* @return the data source initializer
*/
@Bean
public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {
LOG.info("Initializing OSAM CORE data source");
final DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(databasePopulator());
return initializer;
}
/**
* Database populator.
*
* @return the database populator
*/
public DatabasePopulator databasePopulator() {
LOG.info("Populating OSAM CORE data source");
final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScript(osamCoreSchemaScript);
populator.addScript(osamCoreDataScript);
return populator;
}
/*@Bean
public SpringLiquibase liquibaseBean(DataSource dataSource) {
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setDataSource(dataSource);
springLiquibase.setChangeLog("classpath:db-master-changelog.xml");
return springLiquibase;
}*/
/**
* Sets the scheduler registry adapter.
*
* @param schedulerRegistryAdapter
*/
@Autowired
public void setSchedulerRegistryAdapter(final RegistryAdapter schedulerRegistryAdapter) {
this.schedulerRegistryAdapter = schedulerRegistryAdapter;
}
@Bean
public LoginStrategy loginStrategy() {
return new LoginStrategyImpl();
}
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver=new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
return resolver;
}
}