/**
*
* Copyright to the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
*/
package com.github.born2snipe.maven.log.config;
import org.apache.commons.lang.StringUtils;
import com.github.born2snipe.maven.log.EnvAccessor;
import org.openide.util.Lookup;
import java.io.File;
public class ConfigLoader {
public static final String CONFIG_SYSTEM_PROPERTY = "custom.logging.configuration";
public static final String CONFIG_FILENAME = "maven-custom-logging.yml";
public static final String ENV_CONFIG_LOCATION = "MAVEN_CUSTOM_LOGGING_CONFIG";
public ConfigSerializer configSerializer;
public EnvAccessor envAccessor;
public ConfigLoader() {
this(new ConfigSerializer(), new EnvAccessor());
}
public ConfigLoader(ConfigSerializer configSerializer, EnvAccessor envAccessor) {
this.configSerializer = configSerializer;
this.envAccessor = envAccessor;
}
public Config loadConfiguration(boolean debug) {
Config config = loadSystemPropertyConfigFile(debug);
if (config == null) config = loadEnvPropertyConfigFile(debug);
if (config == null) config = loadUserHomeConfigFile(debug);
if (config == null) config = loadGlobalConfigFile(debug);
if (config == null) config = loadDefaultConfigFile(debug);
return config;
}
private Config loadUserHomeConfigFile(boolean debug) {
File file = new File(System.getProperty("user.home"), CONFIG_FILENAME);
Config config = configSerializer.quietLoad(file);
if (config != null && debug) System.out.println("Using config from 'user.home': " + file);
return config;
}
public Config loadEnvPropertyConfigFile(boolean debug) {
String value = envAccessor.get(ENV_CONFIG_LOCATION);
if (StringUtils.isNotBlank(value)) {
Config config = configSerializer.quietLoad(new File(value));
if (config != null && debug) System.out.println("Using config from $" + ENV_CONFIG_LOCATION + "=" + value);
return config;
}
return null;
}
public Config loadSystemPropertyConfigFile(boolean debug) {
String configFileLocation = System.getProperty(CONFIG_SYSTEM_PROPERTY);
if (StringUtils.isNotBlank(configFileLocation)) {
File configFile = new File(configFileLocation);
if (debug) System.out.println("System property config file: " + configFile);
return configSerializer.load(configFile);
}
return null;
}
public Config loadDefaultConfigFile(boolean debug) {
if (debug) System.out.println("Using default config file");
return configSerializer.load("config/default.yml");
}
public Config loadGlobalConfigFile(boolean debug) {
GlobalSettingsLocator locator = Lookup.getDefault().lookup(GlobalSettingsLocator.class);
File configFile = new File(locator.locateSettingsDirectory(), CONFIG_FILENAME);
Config config = configSerializer.quietLoad(configFile);
if (config != null && debug) System.out.println("Global config file: " + configFile);
return config;
}
}