001    package org.kuali.common.jdbc.sql.spring;
002    
003    import org.kuali.common.jdbc.model.Credentials;
004    import org.kuali.common.jdbc.model.JdbcConnections;
005    import org.kuali.common.jdbc.service.spring.JdbcConnectionsConfig;
006    import org.kuali.common.jdbc.sql.model.AdminSql;
007    import org.kuali.common.jdbc.sql.model.DbaSql;
008    import org.kuali.common.jdbc.sql.model.SqlContext;
009    import org.kuali.common.jdbc.sql.model.SqlKeys;
010    import org.kuali.common.jdbc.vendor.model.DatabaseVendor;
011    import org.kuali.common.jdbc.vendor.spring.DatabaseVendorConfig;
012    import org.kuali.common.util.spring.env.EnvironmentService;
013    import org.kuali.common.util.spring.service.SpringServiceConfig;
014    import org.springframework.beans.factory.annotation.Autowired;
015    import org.springframework.context.annotation.Bean;
016    import org.springframework.context.annotation.Configuration;
017    import org.springframework.context.annotation.Import;
018    
019    @Configuration
020    @Import({ SpringServiceConfig.class, DatabaseVendorConfig.class, JdbcConnectionsConfig.class })
021    public class SqlContextConfig {
022    
023            @Autowired
024            DatabaseVendor vendor;
025    
026            @Autowired
027            JdbcConnections connections;
028    
029            @Autowired
030            EnvironmentService env;
031    
032            @Bean
033            public SqlContext sqlContext() {
034                    Credentials auth = connections.getNormal().getCredentials();
035    
036                    int threads = env.getInteger(SqlKeys.THREADS.getValue(), SqlContext.DEFAULT_THREADS);
037                    String encoding = env.getString(SqlKeys.ENCODING.getValue()); // No default value, force them to supply this
038                    String schema = env.getString(SqlKeys.SCHEMA.getValue(), auth.getUsername());
039                    String username = env.getString(SqlKeys.USERNAME.getValue(), auth.getUsername());
040                    String password = env.getString(SqlKeys.PASSWORD.getValue(), auth.getPassword());
041                    String validate = env.getString(SqlKeys.VALIDATE.getValue(), vendor.getSql().getAdmin().getValidate());
042                    String create = env.getString(SqlKeys.CREATE.getValue(), vendor.getSql().getAdmin().getCreate());
043                    String drop = env.getString(SqlKeys.DROP.getValue(), vendor.getSql().getAdmin().getDrop());
044                    String dbaBefore = env.getString(SqlKeys.DBA_BEFORE.getValue(), vendor.getSql().getDba().getBefore());
045                    String dbaAfter = env.getString(SqlKeys.DBA_AFTER.getValue(), vendor.getSql().getDba().getAfter());
046    
047                    DbaSql dba = new DbaSql(dbaBefore, dbaAfter);
048                    AdminSql admin = new AdminSql(validate, create, drop);
049                    Credentials creds = new Credentials(username, password);
050    
051                    return new SqlContext(creds, dba, admin, schema, encoding, threads);
052            }
053    }