001    /*
002     * Copyright 2011 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.ole.utility;
017    
018    import static org.apache.commons.lang.StringUtils.isBlank;
019    
020    import org.slf4j.Logger;
021    import org.slf4j.LoggerFactory;
022    
023    /**
024     * Logic for determining a base directory for Kuali applications by examining system properties and the environment the application is
025     * running in
026     */
027    public class ConfigUtil {
028        private static final Logger logger = LoggerFactory.getLogger(ConfigUtil.class);
029    
030        public static final String KUALI_HOME_SYSTEM_PROPERTY = "kuali.home";
031        public static final String KUALI_HOME_ENVIRONMENT_VAR = "KUALI_HOME";
032        public static final String KUALI_HOME_DEFAULT_VALUE = System.getProperty("user.home") + "/.kuali";
033    
034        /**
035         * Return the configured value for the <code>kuali.home</code> system property, the <code>KUALI_HOME</code> environment variable, or a
036         * default value for "kuali.home" based on "user.home".
037         * 
038         * When this method finishes the system property <code>kuali.home</code> is guaranteed to be set to the same value returned by this
039         * method.
040         */
041        public String getKualiHome() {
042            String kualiHome = getValue(KUALI_HOME_SYSTEM_PROPERTY, KUALI_HOME_ENVIRONMENT_VAR, KUALI_HOME_DEFAULT_VALUE);
043            String systemProperty = System.getProperty(KUALI_HOME_SYSTEM_PROPERTY);
044            if (!kualiHome.equals(systemProperty)) {
045                logger.info("Setting " + KUALI_HOME_SYSTEM_PROPERTY + "=" + kualiHome);
046                System.setProperty(KUALI_HOME_SYSTEM_PROPERTY, kualiHome);
047            }
048            return kualiHome;
049        }
050    
051        public String getGroupHome(String group) {
052            return getKualiHome() + "/" + group;
053        }
054    
055        public String getApplicationHome(String group, String application) {
056            return getGroupHome(group) + "/" + application;
057        }
058    
059        /**
060         * Locate a value by examining system properties and environment variables. If a system property is found, the system property always
061         * wins. Otherwise the logic defers to the environment variable before falling through to the default value.
062         * 
063         * @param systemProperty
064         * @param environmentVariable
065         * @param defaultValue
066         * @return
067         */
068        public String getValue(String systemProperty, String environmentVariable, String defaultValue) {
069            if (!isBlank(systemProperty) && !isBlank(System.getProperty(systemProperty))) {
070                return System.getProperty(systemProperty);
071            } else if (!isBlank(environmentVariable) && !isBlank(System.getenv(environmentVariable))) {
072                return System.getenv(environmentVariable);
073            } else {
074                return defaultValue;
075            }
076        }
077    }