/*
 * Decompiled with CFR 0_100.
 * 
 * Could not load the following classes:
 *  matc.interceptors.SessionCheckerInterceptor
 *  org.hibernate.SessionFactory
 *  org.springframework.beans.factory.annotation.Autowired
 *  org.springframework.context.annotation.Bean
 *  org.springframework.context.annotation.ComponentScan
 *  org.springframework.context.annotation.Configuration
 *  org.springframework.jdbc.datasource.DriverManagerDataSource
 *  org.springframework.orm.hibernate4.HibernateTransactionManager
 *  org.springframework.orm.hibernate4.LocalSessionFactoryBean
 *  org.springframework.transaction.annotation.EnableTransactionManagement
 *  org.springframework.web.servlet.HandlerExceptionResolver
 *  org.springframework.web.servlet.HandlerInterceptor
 *  org.springframework.web.servlet.config.annotation.EnableWebMvc
 *  org.springframework.web.servlet.config.annotation.InterceptorRegistration
 *  org.springframework.web.servlet.config.annotation.InterceptorRegistry
 *  org.springframework.web.servlet.config.annotation.ResourceHandlerRegistration
 *  org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
 *  org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
 *  org.springframework.web.servlet.handler.SimpleMappingExceptionResolver
 *  org.springframework.web.servlet.view.InternalResourceViewResolver
 */
package matc.context;

import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import matc.interceptors.SessionCheckerInterceptor;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/*
 * Failed to analyse overrides
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"matc"})
@EnableTransactionManagement
public class MatcApplicationContext
extends WebMvcConfigurerAdapter {
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(new String[]{"/images/**", "/css/**", "/js/**", "/font/raleway-regular/**", "/img/**"}).addResourceLocations(new String[]{"/WEB-INF/resource/images/", "/WEB-INF/resource/css/", "/WEB-INF/resource/js/", "/WEB-INF/resource/font/raleway-regular/", "/WEB-INF/resource/images/"}).setCachePeriod(Integer.valueOf(0));
    }

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.sessionCheckerInterceptor()).addPathPatterns(new String[]{"/**"});
    }

    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        exceptionResolvers.add((HandlerExceptionResolver)this.simpleMappingExceptionResolver());
    }

    @Bean
    public HandlerInterceptor sessionCheckerInterceptor() {
        SessionCheckerInterceptor sessionInterceptor = new SessionCheckerInterceptor();
        return sessionInterceptor;
    }

    @Bean
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
        Properties mappings = new Properties();
        mappings.setProperty("RequestSessionException", "matcLogin");
        mappings.setProperty("BasicPageException", "matcHome");
        mappings.setProperty("LogIOException", "redirect:matcLogin");
        exceptionResolver.setExceptionMappings(mappings);
        return exceptionResolver;
    }

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();
        jspViewResolver.setPrefix("/WEB-INF/view/jsp/");
        jspViewResolver.setSuffix(".jsp");
        jspViewResolver.setExposeContextBeansAsAttributes(true);
        return jspViewResolver;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("matcp");
        dataSource.setPassword("matcp");
        dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean localSessionFactoryBean() {
        String[] packages = new String[]{"matc.domain.user", "matc.domain.resume"};
        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
        factoryBean.setPackagesToScan(packages);
        factoryBean.setDataSource(this.dataSource());
        factoryBean.setHibernateProperties(this.hibernateProperties());
        return factoryBean;
    }

    @Bean
    public Properties hibernateProperties() {
        Properties prop = new Properties();
        prop.put("hibernate.dialect", "org.hibernate.dialect.Oracle9iDialect");
        prop.put("hibernate.show_sql", true);
        return prop;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager hibernateTransactionManager(LocalSessionFactoryBean bean) {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(bean.getObject());
        return transactionManager;
    }
}
