io.github.linuxforhealth.core.config.ConfigDirectoryLocationStrategy Maven / Gradle / Ivy
/*
* (C) Copyright IBM Corp. 2020
*
* SPDX-License-Identifier: Apache-2.0
*/
package io.github.linuxforhealth.core.config;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.configuration2.io.FileLocationStrategy;
import org.apache.commons.configuration2.io.FileLocator;
import org.apache.commons.configuration2.io.FileSystem;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConfigDirectoryLocationStrategy implements FileLocationStrategy {
private static final String CONF_PROP_HOME_SYSTEM_PROP = "hl7converter.config.home";
private static final String CONF_PROP_HOME_ENV_VAR = "HL7CONVERTER_CONFIG_HOME";
private static final Logger LOGGER =
LoggerFactory.getLogger(ConfigDirectoryLocationStrategy.class);
/** The home directory to be searched for the requested file. */
private final String confDirectory;
public ConfigDirectoryLocationStrategy() {
confDirectory = fetchHomeDirectory();
}
public String getConfDirectory() {
return confDirectory;
}
/**
* {@inheritDoc} This implementation searches in the home directory for a file described by the
* passed in {@code FileLocator}. If the locator defines a base path and the
* {@code evaluateBasePath} property is true, a sub directory of the home directory is
* searched.
*/
@Override
public URL locate(final FileSystem fileSystem, final FileLocator locator) {
if (StringUtils.isNotEmpty(locator.getFileName()) && confDirectory != null) {
LOGGER.info("Looking for config file in location {} based on config.home system property.",
confDirectory);
final File file = new File(confDirectory, locator.getFileName());
if (file.isFile()) {
try {
return file.toURI().toURL();
} catch (MalformedURLException e) {
return null;
}
}
}
return null;
}
private static String fetchHomeDirectory() {
String homeDirectory = System.getenv(CONF_PROP_HOME_ENV_VAR);
if (homeDirectory==null || homeDirectory.trim().isEmpty())
return System.getProperty(CONF_PROP_HOME_SYSTEM_PROP);
return homeDirectory;
}
}