2 * Instantlauncher. Author: Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.instantlauncher.configuration;
7 import com.esotericsoftware.yamlbeans.YamlConfig;
8 import com.esotericsoftware.yamlbeans.YamlReader;
9 import com.esotericsoftware.yamlbeans.YamlWriter;
12 import java.util.HashSet;
14 public class ConfigurationManager {
16 private static final String CONFIG_FILE_NAME = ".instantlauncher";
17 private Configuration configuration;
19 public ConfigurationManager() throws IOException {
23 public Configuration getConfiguration() {
27 private File getPropertiesFile() {
28 return new File(System.getProperty("user.home") + "/" + CONFIG_FILE_NAME);
32 private void initConfig() throws IOException {
33 final File propertiesFile = getPropertiesFile();
34 if (!propertiesFile.exists()) {
35 initDefaultConfiguration();
37 loadConfigFile(propertiesFile);
40 private void loadConfigFile(File propertiesFile) throws IOException {
41 YamlReader reader = new YamlReader(new FileReader(propertiesFile));
42 configureYaml(reader.getConfig());
43 configuration = reader.read(Configuration.class);
44 if (configuration == null)
45 initDefaultConfiguration();
48 private void saveConfigFile() throws IOException {
49 YamlWriter writer = new YamlWriter(new FileWriter(getPropertiesFile()));
50 configureYaml(writer.getConfig());
51 writer.write(configuration);
55 private void configureYaml(YamlConfig config) {
56 config.setClassTag("configuration", Configuration.class);
57 config.setPropertyElementType(Configuration.class, "fileAssociations", FileAssociation.class);
60 private void registerFileAssociation(String fileRegex, String command) {
61 FileAssociation association = new FileAssociation(fileRegex, command);
62 configuration.fileAssociations.add(association);
65 private void initDefaultConfiguration() throws IOException {
66 configuration = new Configuration();
67 configuration.fileAssociations = new HashSet<>();
69 configuration.navigationRootPath = System.getProperty("user.home") + "/";
70 configuration.directoryOpenCommand = "nautilus -w {file}";
71 configuration.directoryTerminalOpenCommand = "gnome-terminal --working-directory={file}";
73 registerFileAssociation(".*\\.jpeg$", "eog {file}");
74 registerFileAssociation(".*\\.jpg$", "eog {file}");
75 registerFileAssociation(".*\\.png$", "eog {file}");
76 registerFileAssociation(".*\\.txt$", "emacs {file}");
77 registerFileAssociation(".*\\.org$", "emacs {file}");
78 registerFileAssociation(".*\\.avi$", "vlc {file}");
79 registerFileAssociation(".*\\.mp4$", "vlc {file}");
80 registerFileAssociation(".*\\.mkv$", "vlc {file}");