1 package org.kuali.common.util.metainf.spring;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import org.kuali.common.util.metainf.model.MetaInfContext;
10 import org.kuali.common.util.metainf.service.MetaInfUtils;
11 import org.kuali.common.util.nullify.NullUtils;
12 import org.kuali.common.util.project.model.Build;
13 import org.kuali.common.util.project.model.Project;
14 import org.kuali.common.util.project.spring.AutowiredProjectConfig;
15 import org.kuali.common.util.spring.SpringUtils;
16 import org.kuali.common.util.spring.env.EnvironmentService;
17 import org.kuali.common.util.spring.service.SpringServiceConfig;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.context.annotation.Bean;
20 import org.springframework.context.annotation.Configuration;
21 import org.springframework.context.annotation.Import;
22
23 @Configuration
24 @Import({ AutowiredProjectConfig.class, MetaInfExecutableConfig.class, SpringServiceConfig.class })
25 public class SqlConfig implements MetaInfContextsConfig {
26
27 private static final boolean DEFAULT_GENERATE_RELATIVE_PATHS = true;
28 private static final String RELATIVE_KEY = MetaInfUtils.PROPERTY_PREFIX + ".sql.relative";
29 private static final String DB_VENDOR_KEY = "db.vendor";
30 private static final String PREFIX = "sql";
31
32 @Autowired
33 EnvironmentService env;
34
35 @Autowired
36 Project project;
37
38 @Autowired
39 Build build;
40
41 @Override
42 @Bean
43 public List<MetaInfContext> metaInfContexts() {
44 Map<MetaInfGroup, String> defaultIncludes = getDefaultIncludes();
45 List<MetaInfContext> contexts = new ArrayList<MetaInfContext>();
46 for (MetaInfGroup group : MetaInfGroup.values()) {
47 MetaInfContext context = getMetaInfContext(group, defaultIncludes);
48 contexts.add(context);
49 }
50 return contexts;
51 }
52
53 protected MetaInfContext getMetaInfContext(MetaInfGroup group, Map<MetaInfGroup, String> defaultIncludes) {
54 String databaseVendor = env.getString(DB_VENDOR_KEY);
55 boolean relativePaths = env.getBoolean(RELATIVE_KEY, DEFAULT_GENERATE_RELATIVE_PATHS);
56 File outputFile = MetaInfUtils.getOutputFile(project, build, databaseVendor, group);
57 String includesKey = MetaInfConfigUtils.getIncludesKey(group, PREFIX);
58 String excludesKey = MetaInfConfigUtils.getExcludesKey(group, PREFIX);
59 List<String> includes = SpringUtils.getNoneSensitiveListFromCSV(env, includesKey, defaultIncludes.get(group));
60 List<String> excludes = SpringUtils.getNoneSensitiveListFromCSV(env, excludesKey, NullUtils.NONE);
61 File scanDir = build.getOutputDir();
62 String encoding = build.getEncoding();
63 return new MetaInfContext.Builder(outputFile, encoding, scanDir).includes(includes).excludes(excludes).relativePaths(relativePaths).build();
64 }
65
66 protected Map<MetaInfGroup, String> getDefaultIncludes() {
67 Map<MetaInfGroup, String> map = new HashMap<MetaInfGroup, String>();
68 map.put(MetaInfGroup.SCHEMA, "**/initial-db/**/*create-schema.sql");
69 map.put(MetaInfGroup.DATA, "**/initial-db/**/data/*.sql");
70 map.put(MetaInfGroup.CONSTRAINTS, "**/initial-db/**/*constraints.sql");
71 map.put(MetaInfGroup.OTHER, "**/upgrades/**/*.sql");
72 return map;
73 }
74 }