001    /**
002     * Copyright 2010-2013 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.common.util.execute;
017    
018    import java.util.Properties;
019    
020    import org.apache.commons.lang3.StringUtils;
021    import org.kuali.common.util.Version;
022    import org.kuali.common.util.VersionUtils;
023    import org.slf4j.Logger;
024    import org.slf4j.LoggerFactory;
025    import org.springframework.util.Assert;
026    
027    public 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    }