001    package org.kuali.common.jdbc.reader.spring;
002    
003    import java.util.List;
004    
005    import org.kuali.common.jdbc.reader.SqlReader;
006    import org.kuali.common.jdbc.reader.DefaultSqlReader;
007    import org.kuali.common.jdbc.reader.model.Comments;
008    import org.kuali.common.jdbc.reader.model.Delimiter;
009    import org.kuali.common.jdbc.reader.model.DelimiterMode;
010    import org.kuali.common.jdbc.reader.model.LineSeparator;
011    import org.kuali.common.util.CollectionUtils;
012    import org.kuali.common.util.spring.SpringUtils;
013    import org.kuali.common.util.spring.env.EnvironmentService;
014    import org.kuali.common.util.spring.service.SpringServiceConfig;
015    import org.springframework.beans.factory.annotation.Autowired;
016    import org.springframework.context.annotation.Bean;
017    import org.springframework.context.annotation.Configuration;
018    import org.springframework.context.annotation.Import;
019    
020    @Configuration
021    @Import({ SpringServiceConfig.class })
022    public class SqlReaderConfig {
023    
024            private static final String DELIMITER_KEY = "sql.delimiter";
025            private static final String DELIMITER_MODE_KEY = "sql.delimiter.mode";
026            private static final String LINE_SEPARATOR_KEY = "sql.line.separator";
027            private static final String COMMENTS_IGNORE_KEY = "sql.comments.ignore";
028            private static final String COMMENTS_TOKENS_KEY = "sql.comments.tokens";
029            private static final String TRIM_KEY = "sql.trim";
030    
031            @Autowired
032            EnvironmentService env;
033    
034            @Bean
035            public SqlReader sqlReader() {
036                    boolean trim = env.getBoolean(TRIM_KEY, DefaultSqlReader.DEFAULT_TRIM);
037                    Comments comments = sqlComments();
038                    LineSeparator separator = sqlLineSeparator();
039                    Delimiter delimiter = sqlDelimiter();
040                    return new DefaultSqlReader(delimiter, separator, trim, comments);
041            }
042    
043            @Bean
044            public Comments sqlComments() {
045                    boolean ignore = env.getBoolean(COMMENTS_IGNORE_KEY, Comments.DEFAULT_IGNORE);
046                    List<String> tokens = SpringUtils.getNoneSensitiveListFromCSV(env, COMMENTS_TOKENS_KEY, CollectionUtils.getCSV(Comments.DEFAULT_TOKENS));
047                    return new Comments(ignore, tokens);
048            }
049    
050            @Bean
051            public LineSeparator sqlLineSeparator() {
052                    String value = env.getString(LINE_SEPARATOR_KEY, LineSeparator.DEFAULT_VALUE.name());
053                    return LineSeparator.valueOf(value.toUpperCase());
054            }
055    
056            @Bean
057            public Delimiter sqlDelimiter() {
058                    String delimiter = env.getString(DELIMITER_KEY, Delimiter.DEFAULT_VALUE);
059                    String modeString = env.getString(DELIMITER_MODE_KEY, DelimiterMode.DEFAULT_VALUE.name());
060                    DelimiterMode mode = DelimiterMode.valueOf(modeString.toUpperCase());
061                    return new Delimiter(delimiter, mode);
062            }
063    
064    }