001    package org.kuali.common.jdbc.vendor.spring;
002    
003    import org.kuali.common.jdbc.vendor.model.DatabaseVendor;
004    import org.kuali.common.jdbc.vendor.model.VendorDefault;
005    import org.kuali.common.jdbc.vendor.service.DatabaseVendorService;
006    import org.kuali.common.jdbc.vendor.service.MySqlDatabaseVendorService;
007    import org.kuali.common.jdbc.vendor.service.OracleDatabaseVendorService;
008    import org.kuali.common.util.Assert;
009    import org.kuali.common.util.spring.env.EnvironmentService;
010    import org.kuali.common.util.spring.service.SpringServiceConfig;
011    import org.springframework.beans.factory.annotation.Autowired;
012    import org.springframework.context.annotation.Bean;
013    import org.springframework.context.annotation.Configuration;
014    import org.springframework.context.annotation.Import;
015    
016    @Configuration
017    @Import({ SpringServiceConfig.class })
018    public class DatabaseVendorConfig {
019    
020            private static final String VENDOR_KEY = "db.vendor";
021    
022            @Autowired
023            EnvironmentService env;
024    
025            @Bean
026            public DatabaseVendorService databaseVendorService() {
027                    String vendorString = env.getString(VENDOR_KEY); // No default value. They must supply db.vendor
028                    Assert.noBlanks(vendorString);
029                    VendorDefault vendor = VendorDefault.valueOf(vendorString.toUpperCase());
030                    switch (vendor) {
031                    case ORACLE:
032                            return new OracleDatabaseVendorService(env, vendor);
033                    case MYSQL:
034                            return new MySqlDatabaseVendorService(env, vendor);
035                    default:
036                            throw new IllegalStateException("Vendor [" + vendor + "] is unknown");
037    
038                    }
039            }
040    
041            @Bean
042            public DatabaseVendor databaseVendor() {
043                    return databaseVendorService().getDatabaseVendor();
044            }
045    
046    }