001/** 002 * Copyright 2010-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 */ 016package org.kuali.common.util.execute; 017 018import java.util.Properties; 019 020import org.apache.commons.lang3.StringUtils; 021import org.kuali.common.util.Version; 022import org.kuali.common.util.VersionUtils; 023import org.slf4j.Logger; 024import org.slf4j.LoggerFactory; 025import org.springframework.util.Assert; 026 027public class SetSourceDbSchemaNameExecutable implements Executable { 028 029 private static final Logger logger = LoggerFactory.getLogger(SetSourceDbSchemaNameExecutable.class); 030 031 String sourceDbSchemaNameKey = "jdbc.source.db.username"; 032 String dbBranchQualifierKey = "db.branch.qualifier"; 033 // eg KS_SOURCE_DB 034 String baseSourceDbSchemaName; 035 Properties mavenProperties; 036 String version; 037 boolean skip; 038 039 @Override 040 public void execute() { 041 // Might be skipping execution altogether 042 if (skip) { 043 logger.info("Skipping execution"); 044 return; 045 } 046 047 // Make sure we are configured correctly 048 Assert.notNull(mavenProperties, "mavenProperties is null"); 049 Assert.hasText(baseSourceDbSchemaName, "baseSourceDbSchemaName is blank"); 050 051 // Check to see if the source db name is already set 052 String existingValue = mavenProperties.getProperty(sourceDbSchemaNameKey); 053 if (!StringUtils.isBlank(existingValue)) { 054 logger.info("Existing value - [{}={}]", sourceDbSchemaNameKey, existingValue); 055 return; 056 } 057 058 // Get the qualifier we will append to KS_SOURCE_DB for this branch 059 String qualifier = getQualifier(mavenProperties, dbBranchQualifierKey, version); 060 061 // This is the full schema name that Impex will use 062 String sourceDbSchemaName = baseSourceDbSchemaName + qualifier; 063 064 // Update the internal Maven properties object with the new value 065 mavenProperties.setProperty(sourceDbSchemaNameKey, sourceDbSchemaName); 066 logger.debug("Set property - [{}={}]", sourceDbSchemaNameKey, sourceDbSchemaName); 067 } 068 069 protected String getQualifier(Properties mavenProperties, String explicitQualifierKey, String version) { 070 // Determine if the qualifier is already set 071 String qualifier = mavenProperties.getProperty(explicitQualifierKey); 072 if (!StringUtils.isBlank(qualifier)) { 073 return "_" + qualifier; 074 } 075 076 // Parse the version string into a version pojo 077 Version v = VersionUtils.getVersion(version); 078 079 // If the version qualifier is blank there is nothing more to do 080 if (StringUtils.isBlank(v.getQualifier())) { 081 return qualifier; 082 } 083 084 // Transform and append the qualifier based on the qualifier from the version 085 qualifier = v.getQualifier(); 086 qualifier = StringUtils.upperCase(qualifier); 087 qualifier = StringUtils.replace(qualifier, "-", "_"); 088 qualifier = StringUtils.replace(qualifier, ".", "_"); 089 qualifier = "_" + qualifier; 090 return qualifier; 091 } 092 093 public Properties getMavenProperties() { 094 return mavenProperties; 095 } 096 097 public void setMavenProperties(Properties mavenProperties) { 098 this.mavenProperties = mavenProperties; 099 } 100 101 public String getVersion() { 102 return version; 103 } 104 105 public void setVersion(String version) { 106 this.version = version; 107 } 108 109 public boolean isSkip() { 110 return skip; 111 } 112 113 public void setSkip(boolean skip) { 114 this.skip = skip; 115 } 116 117 public String getBaseSourceDbSchemaName() { 118 return baseSourceDbSchemaName; 119 } 120 121 public void setBaseSourceDbSchemaName(String sourceDbSchemaName) { 122 this.baseSourceDbSchemaName = sourceDbSchemaName; 123 } 124 125 public String getSourceDbSchemaNameKey() { 126 return sourceDbSchemaNameKey; 127 } 128 129 public void setSourceDbSchemaNameKey(String sourceDbSchemaNameKey) { 130 this.sourceDbSchemaNameKey = sourceDbSchemaNameKey; 131 } 132 133 public String getDbBranchQualifierKey() { 134 return dbBranchQualifierKey; 135 } 136 137 public void setDbBranchQualifierKey(String dbBranchQualifierKey) { 138 this.dbBranchQualifierKey = dbBranchQualifierKey; 139 } 140 141}