/* * Copyright (C) 2015 thirdy * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package net.thirdy.blackmarket.util; import static net.thirdy.blackmarket.util.BlackmarketUtil.homeDirectory; import static net.thirdy.blackmarket.util.BlackmarketUtil.loadOrCreateDirectory; import static net.thirdy.blackmarket.util.BlackmarketUtil.loadOrCreateFile; import static net.thirdy.blackmarket.util.BlackmarketUtil.readFileToString; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import net.thirdy.blackmarket.ex.BlackmarketRuntimeException; public class BlackmarketConfig { public static final String VERSION = "v0.3-pre-alpha"; public static final boolean TESTING_MODE = false; public static final boolean DEVELOPMENT_MODE = false; public static final String TITLE = "Blackmarket " + VERSION + (DEVELOPMENT_MODE ? " - DEVELOPMENT-MODE-ENABLED" : ""); private static BlackmarketProperties blackmarketProperties; public static BlackmarketProperties properties() { return blackmarketProperties; } public static Map<String, String> loadLanguageDictionary() { File languageConfigFile = languageConfigFile(); return parseBlackmarketRawFile(languageConfigFile); } public static File configDirectory() { File file = loadOrCreateDirectory(new File(homeDirectory(), ".blackmarket")); return file; } static File languageConfigFile() { return new File(configDirectory(), "blackmarket.language"); } static File autoCompleteConfigFile() { return new File(configDirectory(), "blackmarket.autocomplete"); } static File propertiesConfigFile() { return new File(configDirectory(), "blackmarket.properties"); } public static void setupConfigFiles() { File propertiesFile = loadOrCreateFile(propertiesConfigFile()); blackmarketProperties = new BlackmarketProperties(propertiesFile); File languageConfig = loadOrCreateFile(languageConfigFile()); File autoCompleteConfig = loadOrCreateDirectory(autoCompleteConfigFile()); // if development mode, we always overwrite the config files if (blackmarketProperties.isNewInstall() || DEVELOPMENT_MODE) { System.out.println("New install detected, creating/overwriting config files"); try { FileUtils.deleteQuietly(languageConfig); FileUtils.deleteQuietly(propertiesFile); FileUtils.deleteQuietly(autoCompleteConfig); FileUtils.writeStringToFile(languageConfig, getDefaultLanguageConfig()); FileUtils.writeStringToFile(propertiesFile, getDefaultPropertiesConfig()); FileUtils.writeStringToFile(autoCompleteConfig, getDefaultAutoCompleteConfig()); // if nothing goes wrong with setup of files, new install is successful blackmarketProperties = new BlackmarketProperties(propertiesConfigFile()); } catch (IOException e) { throw new BlackmarketRuntimeException(e); } } System.out.println("---Properties----"); System.out.println(blackmarketProperties.toString()); } static String getDefaultLanguageConfig() { return BlackmarketUtil.loadFromClassPath(BlackmarketConfig.class, "/default.language"); } static String getDefaultPropertiesConfig() { return BlackmarketUtil.loadFromClassPath(BlackmarketConfig.class, "/default.properties"); } static String getDefaultAutoCompleteConfig() { return BlackmarketUtil.loadFromClassPath(BlackmarketConfig.class, "/default.autocomplete"); } static boolean isLineNotComment(String line) { return !StringUtils.startsWith(line, "//") && !StringUtils.startsWith(line, ";"); } public static Map<String, String> loadAutoCompleteDictionary() { File autoCompleteConfigFile = autoCompleteConfigFile(); return parseBlackmarketRawFile(autoCompleteConfigFile); } private static Map<String, String> parseBlackmarketRawFile(File blackarketFile) { Map<String, String> map = new HashMap<>(); String raw = readFileToString(blackarketFile); if (StringUtils.isNotBlank(raw)) { String[] lines = StringUtils.split(raw, BlackmarketUtil.lineSep()); for (String line : lines) { if (isLineNotComment(line) && StringUtils.isNotBlank(line)) { // substringBefore/substringAfter is first occurance String key = StringUtils.substringBefore(line, "="); String value = StringUtils.substringAfter(line, "="); key = StringUtils.trim(key); value = StringUtils.trim(value); map.put(key, value); } } } return map; } }