001package org.kuali.common.util.metainf.spring; 002 003import java.io.File; 004import java.util.ArrayList; 005import java.util.HashMap; 006import java.util.List; 007import java.util.Map; 008 009import org.kuali.common.util.metainf.model.MetaInfContext; 010import org.kuali.common.util.metainf.service.MetaInfUtils; 011import org.kuali.common.util.nullify.NullUtils; 012import org.kuali.common.util.project.model.Build; 013import org.kuali.common.util.project.model.Project; 014import org.kuali.common.util.project.spring.AutowiredProjectConfig; 015import org.kuali.common.util.spring.SpringUtils; 016import org.kuali.common.util.spring.env.EnvironmentService; 017import org.kuali.common.util.spring.service.SpringServiceConfig; 018import org.springframework.beans.factory.annotation.Autowired; 019import org.springframework.context.annotation.Bean; 020import org.springframework.context.annotation.Configuration; 021import org.springframework.context.annotation.Import; 022 023@Configuration 024@Import({ AutowiredProjectConfig.class, MetaInfExecutableConfig.class, SpringServiceConfig.class }) 025public class SqlConfig implements MetaInfContextsConfig { 026 027 private static final boolean DEFAULT_GENERATE_RELATIVE_PATHS = true; 028 private static final String RELATIVE_KEY = MetaInfUtils.PROPERTY_PREFIX + ".sql.relative"; 029 private static final String DB_VENDOR_KEY = "db.vendor"; 030 private static final String PREFIX = "sql"; 031 032 @Autowired 033 EnvironmentService env; 034 035 @Autowired 036 Project project; 037 038 @Autowired 039 Build build; 040 041 @Override 042 @Bean 043 public List<MetaInfContext> metaInfContexts() { 044 Map<MetaInfGroup, String> defaultIncludes = getDefaultIncludes(); 045 List<MetaInfContext> contexts = new ArrayList<MetaInfContext>(); 046 for (MetaInfGroup group : MetaInfGroup.values()) { 047 MetaInfContext context = getMetaInfContext(group, defaultIncludes); 048 contexts.add(context); 049 } 050 return contexts; 051 } 052 053 protected MetaInfContext getMetaInfContext(MetaInfGroup group, Map<MetaInfGroup, String> defaultIncludes) { 054 String databaseVendor = env.getString(DB_VENDOR_KEY); 055 boolean relativePaths = env.getBoolean(RELATIVE_KEY, DEFAULT_GENERATE_RELATIVE_PATHS); 056 File outputFile = MetaInfUtils.getOutputFile(project, build, databaseVendor, group); 057 String includesKey = MetaInfConfigUtils.getIncludesKey(group, PREFIX); 058 String excludesKey = MetaInfConfigUtils.getExcludesKey(group, PREFIX); 059 List<String> includes = SpringUtils.getNoneSensitiveListFromCSV(env, includesKey, defaultIncludes.get(group)); 060 List<String> excludes = SpringUtils.getNoneSensitiveListFromCSV(env, excludesKey, NullUtils.NONE); 061 File scanDir = build.getOutputDir(); 062 String encoding = build.getEncoding(); 063 return new MetaInfContext.Builder(outputFile, encoding, scanDir).includes(includes).excludes(excludes).relativePaths(relativePaths).build(); 064 } 065 066 protected Map<MetaInfGroup, String> getDefaultIncludes() { 067 Map<MetaInfGroup, String> map = new HashMap<MetaInfGroup, String>(); 068 map.put(MetaInfGroup.SCHEMA, "**/initial-db/**/*create-schema.sql"); 069 map.put(MetaInfGroup.DATA, "**/initial-db/**/data/*.sql"); 070 map.put(MetaInfGroup.CONSTRAINTS, "**/initial-db/**/*constraints.sql"); 071 map.put(MetaInfGroup.OTHER, "**/upgrades/**/*.sql"); 072 return map; 073 } 074}