001    package org.kuali.common.jdbc.sql.spring;
002    
003    import javax.sql.DataSource;
004    
005    import org.kuali.common.jdbc.listeners.LogSqlListener;
006    import org.kuali.common.jdbc.listeners.SqlListener;
007    import org.kuali.common.jdbc.model.LogSqlMode;
008    import org.kuali.common.jdbc.model.context.JdbcContext;
009    import org.kuali.common.jdbc.reader.SqlReader;
010    import org.kuali.common.jdbc.reader.spring.SqlReaderConfig;
011    import org.kuali.common.jdbc.service.spring.DataSourceConfig;
012    import org.kuali.common.jdbc.sql.model.SqlContext;
013    import org.kuali.common.jdbc.suppliers.ComplexStringSupplier;
014    import org.kuali.common.jdbc.suppliers.SqlSupplier;
015    import org.kuali.common.util.log.LoggerLevel;
016    import org.springframework.beans.factory.annotation.Autowired;
017    import org.springframework.context.annotation.Configuration;
018    import org.springframework.context.annotation.Import;
019    
020    @Configuration
021    @Import({ DataSourceConfig.class, SqlContextConfig.class, SqlReaderConfig.class })
022    public class DbaContextConfig {
023    
024            private static final String BEFORE = "[dba:before]";
025            private static final String AFTER = "[dba:after]";
026    
027            @Autowired
028            SqlContext context;
029    
030            @Autowired
031            SqlReader reader;
032    
033            @Autowired
034            DataSourceConfig dataSourceConfig;
035    
036            public JdbcContext dbaBeforeContext() {
037                    return getContext(BEFORE, context.getDba().getBefore());
038            }
039    
040            public JdbcContext dbaAfterContext() {
041                    return getContext(AFTER, context.getDba().getAfter());
042            }
043    
044            protected JdbcContext getContext(String message, String sql) {
045                    DataSource dataSource = dataSourceConfig.dbaDataSource();
046                    SqlSupplier supplier = new ComplexStringSupplier(sql, reader);
047                    SqlListener listener = new LogSqlListener(LoggerLevel.INFO, LogSqlMode.BEFORE);
048                    return new JdbcContext.Builder(dataSource, supplier).message(message).listener(listener).build();
049            }
050    }