001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.sql.spring; 017 018 import java.util.List; 019 020 import javax.sql.DataSource; 021 022 import org.kuali.common.jdbc.model.context.JdbcContext; 023 import org.kuali.common.jdbc.reset.DefaultJdbcResetConfig; 024 import org.kuali.common.jdbc.service.spring.DataSourceConfig; 025 import org.kuali.common.jdbc.sql.spring.DbaContextConfig; 026 import org.kuali.common.jdbc.sql.spring.JdbcContextsConfig; 027 import org.kuali.common.jdbc.suppliers.ResourcesSupplierFactory; 028 import org.kuali.common.jdbc.suppliers.SqlSupplier; 029 import org.kuali.common.jdbc.suppliers.spring.SuppliersFactoryConfig; 030 import org.kuali.common.jdbc.vendor.model.DatabaseVendor; 031 import org.kuali.common.util.metainf.service.MetaInfUtils; 032 import org.kuali.common.util.metainf.spring.MetaInfGroup; 033 import org.kuali.common.util.project.ProjectService; 034 import org.kuali.common.util.project.model.Project; 035 import org.kuali.common.util.project.spring.ProjectServiceConfig; 036 import org.kuali.rice.sql.project.SqlProjectConstants; 037 import org.springframework.beans.factory.annotation.Autowired; 038 import org.springframework.context.annotation.Bean; 039 import org.springframework.context.annotation.Configuration; 040 import org.springframework.context.annotation.Import; 041 042 import com.google.common.collect.ImmutableList; 043 044 /** 045 * Used by developers (to reset their local db), CI (to validate changes), and by the deploy process to reset the 046 * database for instances of the running application. 047 * 048 * @author Kuali Rice Team (rice.collab@kuali.org) 049 */ 050 @Configuration 051 @Import({ DbaContextConfig.class, SuppliersFactoryConfig.class, ProjectServiceConfig.class, DefaultJdbcResetConfig.class }) 052 public class SourceSqlConfig implements JdbcContextsConfig { 053 054 @Autowired 055 DbaContextConfig dba; 056 057 @Autowired 058 ResourcesSupplierFactory factory; 059 060 @Autowired 061 ProjectService projectService; 062 063 @Autowired 064 DatabaseVendor vendor; 065 066 @Autowired 067 DataSourceConfig dataSources; 068 069 @Bean 070 public Project riceSqlProject() { 071 return projectService.getProject(SqlProjectConstants.ID); 072 } 073 074 @Override 075 @Bean 076 public List<JdbcContext> jdbcContexts() { 077 JdbcContext before = dba.dbaBeforeContext(); 078 JdbcContext schema = getJdbcContext(MetaInfGroup.SCHEMA, true); 079 JdbcContext data = getJdbcContext(MetaInfGroup.DATA, true); 080 JdbcContext constraints = getJdbcContext(MetaInfGroup.CONSTRAINTS, true); 081 JdbcContext other = getJdbcContext(MetaInfGroup.OTHER, false); 082 JdbcContext after = dba.dbaAfterContext(); 083 return ImmutableList.of(before, schema, data, constraints, other, after); 084 } 085 086 protected JdbcContext getJdbcContext(MetaInfGroup group, boolean multithreaded) { 087 String resourcesLocation = MetaInfUtils.getClasspathResource(riceSqlProject(), vendor.getCode(), group); 088 List<SqlSupplier> suppliers = factory.getSuppliers(resourcesLocation); 089 DataSource dataSource = dataSources.dataSource(); 090 String message = "[" + group.name().toLowerCase() + ":" + (multithreaded ? "concurrent" : "sequential") + "]"; 091 return new JdbcContext.Builder(dataSource, suppliers).message(message).multithreaded(multithreaded).build(); 092 } 093 }