/*
* Copyright 2015
* Ubiquitous Knowledge Processing (UKP) Lab and FG Language Technology
* Technische Universität Darmstadt
*
* 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 de.tudarmstadt.ukp.clarin.webanno.support;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
public class SettingsUtil
{
public static final String PROP_BUILD_NUMBER = "buildNumber";
public static final String PROP_TIMESTAMP = "timestamp";
public static final String PROP_VERSION = "version";
private static final String PROP_USER_HOME = "user.home";
private static final String PROP_WEBANNO_HOME = "webanno.home";
private static final String SETTINGS_FILE = "settings.properties";
private static final String WEBANNO_USER_HOME_SUBDIR = ".webanno";
public static final String CFG_LOCALE = "locale";
public static final String CFG_STYLE_LOGO = "style.logo";
public static final String CFG_LOGIN_MESSAGE = "login.message";
public static final String CFG_AUTH_MODE = "auth.mode";
public static final String CFG_AUTH_PREAUTH_NEWUSER_ROLES = "auth.preauth.newuser.roles";
public static final String CFG_WARNINGS_EMBEDDED_DATABASE = "warnings.embeddedDatabase";
public static final String CFG_WARNINGS_UNSUPPORTED_BROWSER = "warnings.unsupportedBrowser";
public static final String CFG_USER_ALLOW_PROFILE_ACCESS = "user.profile.accessible";
private static Properties versionInfo;
private static Properties settings;
public static Properties getVersionProperties()
{
if (versionInfo == null) {
try {
versionInfo = PropertiesLoaderUtils.loadProperties(new ClassPathResource(
"META-INF/version.properties"));
}
catch (IOException e) {
versionInfo = new Properties();
versionInfo.setProperty(PROP_VERSION, "unknown");
versionInfo.setProperty(PROP_TIMESTAMP, "unknown");
versionInfo.setProperty(PROP_BUILD_NUMBER, "unknown");
}
}
return versionInfo;
}
public static String getVersionString()
{
Properties props = getVersionProperties();
if ("unknown".equals(props.getProperty(PROP_VERSION))) {
return "Version information not available";
}
else {
return props.getProperty(SettingsUtil.PROP_VERSION) + " ("
+ props.getProperty(SettingsUtil.PROP_TIMESTAMP) + ", build "
+ props.getProperty(SettingsUtil.PROP_BUILD_NUMBER) + ")";
}
}
/**
* Locate the settings file and return its location.
*
* @return the location of the settings file or {@code null} if none could be found.
*/
public static File getSettingsFile()
{
String appHome = System.getProperty(PROP_WEBANNO_HOME);
String userHome = System.getProperty(PROP_USER_HOME);
// Locate settings, first in webanno.home, then in user home
File settings = null;
if (appHome != null) {
settings = new File(appHome, SETTINGS_FILE);
}
else if (userHome != null) {
settings = new File(userHome + "/" + WEBANNO_USER_HOME_SUBDIR, SETTINGS_FILE);
}
if (settings.exists()) {
return settings;
}
else {
return null;
}
}
public static Properties getSettings()
{
if (settings == null) {
settings = new Properties();
File settingsFile = getSettingsFile();
if (settingsFile != null) {
try (InputStream in = new FileInputStream(settingsFile)) {
settings.load(in);
}
catch (IOException e) {
LoggerFactory.getLogger(SettingsUtil.class).error(
"Unable to load settings file [" + settings + "]", e);
}
}
}
return settings;
}
}